#include <bits/stdc++.h> using namespace std; int n, m, q; string s; vector<bool> wczasie[840]; vector<bool> xd; int t_w_dfsie; void _dfs(int a, int b); inline void podbij(const int &a, const int &b, const int &da, const int &db) { if(!xd[(b+db)*(n+1)+a+da]) _dfs(a+da, b+db); } void _dfs(int a, int b) { // cerr << a << ' ' << b << endl; xd[b*(n+1)+a] = 1; if(a>0&&b>0) { if(wczasie[t_w_dfsie][n*(b-1)+a-1]) podbij(a, b, 0, -1); else podbij(a, b, -1, 0); } if(a>0&&b<m) { if(wczasie[t_w_dfsie][n*(b)+a-1]) podbij(a, b, 0, 1); else podbij(a, b, -1, 0); } if(a<n&&b>0) { if(wczasie[t_w_dfsie][n*(b-1)+a]) podbij(a, b, 0, -1); else podbij(a, b, 1, 0); } if(a<n&&b<m) { if(wczasie[t_w_dfsie][n*(b)+a]) podbij(a, b, 0, 1); else podbij(a, b, 1, 0); } } int t, a, b, c, d, i, j, k, kk; int test() { cin >> t >> a >> b >> c >> d; /* cerr << t << endl; for(i=0; i<n; ++i){ for(j=0; j<m; ++j) cerr << wczasie[t][n*j+i]; cerr << endl; } cerr << endl; */ fill(xd.begin(), xd.end(), 0); t_w_dfsie = t%840; _dfs(a, b); /* cerr << endl; for(i=0; i<=n; ++i) { for(j=0; j<=m; ++j) { cerr << xd[j*(n+1)+i]; } cerr << endl; } cerr << endl; */ for(;;) { if(xd[(d)*(n+1)+c]) return t; ++t; t_w_dfsie = t%840; for(i=0; i<=n; ++i) { for(j=0; j<=m; ++j) { if(xd[(j)*(n+1)+i]) _dfs(i, j); } } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m >> q; for(i=0; i<840; ++i) wczasie[i].resize(n*m); xd.resize((n+1)*(m+1)); for(i=0; i<n; ++i) for(j=0; j<m; ++j) { cin >> s; for(k=0, kk=0; k<840; ++k, kk = (kk+1)%s.size()) { // cerr << i << ' ' << j << ' ' << k << ' ' << s[kk] << endl; if(s[kk] == '1') wczasie[k][j*n+i] = 1; } } while(q--) cout << test() << '\n'; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include <bits/stdc++.h> using namespace std; int n, m, q; string s; vector<bool> wczasie[840]; vector<bool> xd; int t_w_dfsie; void _dfs(int a, int b); inline void podbij(const int &a, const int &b, const int &da, const int &db) { if(!xd[(b+db)*(n+1)+a+da]) _dfs(a+da, b+db); } void _dfs(int a, int b) { // cerr << a << ' ' << b << endl; xd[b*(n+1)+a] = 1; if(a>0&&b>0) { if(wczasie[t_w_dfsie][n*(b-1)+a-1]) podbij(a, b, 0, -1); else podbij(a, b, -1, 0); } if(a>0&&b<m) { if(wczasie[t_w_dfsie][n*(b)+a-1]) podbij(a, b, 0, 1); else podbij(a, b, -1, 0); } if(a<n&&b>0) { if(wczasie[t_w_dfsie][n*(b-1)+a]) podbij(a, b, 0, -1); else podbij(a, b, 1, 0); } if(a<n&&b<m) { if(wczasie[t_w_dfsie][n*(b)+a]) podbij(a, b, 0, 1); else podbij(a, b, 1, 0); } } int t, a, b, c, d, i, j, k, kk; int test() { cin >> t >> a >> b >> c >> d; /* cerr << t << endl; for(i=0; i<n; ++i){ for(j=0; j<m; ++j) cerr << wczasie[t][n*j+i]; cerr << endl; } cerr << endl; */ fill(xd.begin(), xd.end(), 0); t_w_dfsie = t%840; _dfs(a, b); /* cerr << endl; for(i=0; i<=n; ++i) { for(j=0; j<=m; ++j) { cerr << xd[j*(n+1)+i]; } cerr << endl; } cerr << endl; */ for(;;) { if(xd[(d)*(n+1)+c]) return t; ++t; t_w_dfsie = t%840; for(i=0; i<=n; ++i) { for(j=0; j<=m; ++j) { if(xd[(j)*(n+1)+i]) _dfs(i, j); } } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m >> q; for(i=0; i<840; ++i) wczasie[i].resize(n*m); xd.resize((n+1)*(m+1)); for(i=0; i<n; ++i) for(j=0; j<m; ++j) { cin >> s; for(k=0, kk=0; k<840; ++k, kk = (kk+1)%s.size()) { // cerr << i << ' ' << j << ' ' << k << ' ' << s[kk] << endl; if(s[kk] == '1') wczasie[k][j*n+i] = 1; } } while(q--) cout << test() << '\n'; } |