Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
#include
#include
#include
#include
using namespace std; ifstream cin("miting.in"); ofstream cout("miting.out"); queue
> q; int di[] = {0,0,1,-1}, dj[] = {1,-1,0,0}; char mat[101][101], cuv[11]; int dp[11][11][61][61],visited[61][61]; const int inf = 1e9; int cerinta, n ,m; pair
poz[11]; int index(char c) { return (strchr(cuv,c) - cuv) + 1 ; } int main() { cin >> cerinta >> n >> m >> cuv; for(int i = 1;i<=n;i++) for(int j = 1;j<=m;j++) cin >> mat[i][j]; if(cerinta == 1) { int xi=inf, yi=inf, xf=-inf, yf=-inf; for(int i = 1;i<=n;i++) for(int j = 1;j<=m;j++) if(mat[i][j]!= '#' && mat[i][j]!='_') { xi = min(xi,i); yi = min(yi,j); xf = max(xf,i); yf = max(yf,j); } cout << (xf - xi + 1) * (yf - yi + 1); return 0; } /// Initializam vectorul dp[][][][] cu valori mari.. int cuvLen = strlen(cuv); for(int i = 1;i<=cuvLen;i++) for(int j = 1;j<=cuvLen;j++) for(int k = 1;k<=n;k++) for(int l = 1;l<=m;l++) dp[i][j][k][l] = 1e9; /// Salvam pozitiile literelor in poz. for(int i = 1;i<=n;i++) for(int j = 1;j<=m;j++) if(mat[i][j] != '#' && mat[i][j]!='_') poz[index(mat[i][j])] = {i,j}; /// Facem un lee pornind din fiecare litera. for(int i = 1;i<=cuvLen;i++) { q.push(poz[i]); int x = poz[i].first, y = poz[i].second; dp[i][i][x][y] = 0; while(!q.empty()) { x = q.front().first; y = q.front().second; for(int k = 0; k<4;k++) { int cx = x + di[k]; int cy = y + dj[k]; if(cx < 1 || cy < 1 || cx > n || cy > m) continue; if(mat[cx][cy] == '#' || dp[i][i][cx][cy] <= dp[i][i][x][y]) continue; dp[i][i][cx][cy] = dp[i][i][x][y] + 1; /// Daca elementul este deja in coada nu are rost sa il pun iar. if(!visited[cx][cy]) q.push({cx,cy}),visited[cx][cy] = true; } q.pop(); visited[x][y] = false; } } /// Afisarea acestor matrici : /*for(int i = 1;i<=cuvLen;i++,cout<<'\n') { cout << "MAT " << i << ":\n"; for(int j = 1;j<=n;j++,cout<<'\n') for(int k = 1;k<=m;k++) { if(dp[i][i][j][k] == 1e9) cout <
n || cy > m) continue; if(mat[cx][cy] == '#' || dp[i][j][cx][cy] <= dp[i][j][x][y] + 1) continue; dp[i][j][cx][cy] = dp[i][j][x][y] + 1; if(!visited[cx][cy]) q.push({cx,cy}),visited[cx][cy] = true; } q.pop(); visited[x][y] = false; } } /// Afisarile noilor matrici /*cout << "Matrice dupa lee \n" << "len = " << len << ',' << " i = " << i << " ,j = " << j << '\n' << '\n'; for(int L = 1; L <= n; L++,cout << '\n') for(int C = 1; C<=m; C++) { if(dp[i][i][L][C] == 1e9) cout <
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)