Pagini recente » Cod sursa (job #883757) | Cod sursa (job #196192) | Cod sursa (job #171017) | Cod sursa (job #1159519) | Cod sursa (job #2491284)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f("zona.in");
ofstream g("zona.out");
const int maxn = 2555;
int x, y, n, m, i, xa, xb, fx, fy;
int v[maxn];
int a[55][55];
int v1[] = {0, -1, 0, 1, 0};
int v2[] = {0, 0, 1, 0, -1};
struct xy { int x, y; };
queue <xy> q;
void bfs(xy start) {
int x, y, xx, yy;
q.push(start);
while(!q.empty()) {
x = q.front().x;
y = q.front().y;
q.pop();
for(i = 1; i <= 4; i ++) {
xx = x + v1[x];
yy = y + v2[y];
if(b[xx][yy])
if(xx >= 1 && xx <= n && yy >= 1 && yy <= n) {
if((a[x][y] & (1 << i)) != 0) {
b[xx][yy] = 1;
q.push({xx, yy});
}
}
}
}
}
int main()
{
f >> x >> y >> n >> m;
for(i = 1; i <= m; i ++) {
f >> v[i];
}
// -----------------1--------------------------
xa = x; xb = y;
for(i = 1; i <= m; i ++) {
xa += v1[v[i] ];
xb += v2[v[i] ];
}
fx = xa; fy = xb;
xa = x; xb = y;
for(i = 1; i <= m; i ++) {
xa += v1[v[i] ];
xb += v2[v[i] ];
if(xa == fx && xb == fy) {
g << m - i << '\n';
break;
}
}
// ------------------2-------------------------
xa = x; xb = y;
for(i = 1; i <= m; i ++) {
xa += v1[v[i] ];
xb += v2[v[i] ];
if(v[i] == 2) {
a[xa][xb] |= (1 << 3);
a[xa+1][xb] |= (1 << 1);
} else if(v[i] == 4) {
a[xa][xb+1] |= (1 << 3);
a[xa+1][xb+1] |= (1 << 1);
} else if(v[i] == 3) {
a[xa][xb] |= (1 << 2);
a[xa][xb+1] |= (1 << 4);
} else if(v[i] == 3) {
a[xa+1][xb] |= (1 << 2);
a[xa+1][xb+1] |= (1 << 4);
}
}
bfs({1, 1});
f.close(); g.close();
return 0;
}