#include <bits/stdc++.h> //Michał Kuśmirek
using namespace std;     //XIII LO Szczecin
#define FOR(i, a, b) for(int i = (a); i <= (b); ++i)
#define REP(i, n) for(int i = 0; i < (n); ++i)
using ll = long long;
using pii = pair<int, int>;
template<class T> int size(T && a) {
	return (int)(a.size());
}
ostream& operator << (ostream &os, string str) {
    for(char c : str) os << c;
    return os;
}
template <class A, class B> ostream& operator << (ostream &os, const pair<A, B> &p) {
	return os << '(' << p.first << "," << p.second << ')';
}
template <class T> auto operator << (ostream &os, T &&x) -> decltype(x.begin(), os) {
	os << '{';
	for(auto it = x.begin(); it != x.end(); ++it)
		os << *it << (it == prev(x.end()) ? "" : " ");
	return os << '}';
}
template <class T> ostream& operator << (ostream &os, vector<vector<T>> vec) {
    for(auto x : vec)
    	os << "\n  " << x;
    return os;
}
void dump() {}
template <class T, class... Args> void dump(T &&x, Args... args) {
    cerr << x << "; ";
    dump(args...);
}
#ifdef DEBUG
# define debug(x...) cerr << "[" #x "]: ", dump(x), cerr << '\n'
#else 
# define debug(...) 0
#endif
//--------------------------------------------------
#ifdef DEBUG
	const int BITS = 12;
#else
	const int BITS = 840;
#endif
int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n, m, q;
	cin >> n >> m >> q;
	vector<vector<bitset<BITS>>> s(n, vector<bitset<BITS>>(m));
	REP(i, n) REP(j, m) {
		string str; cin >> str;
		REP(k, BITS)
			s[i][j][k] = (str[k % size(str)] - '0');
	}
	vector<int> orientation(BITS); //0 - none, 1 - horizontal, 2 - vertical
	vector<vector<int>> rows(n);
	REP(i, n) {
		bitset<BITS> ret = s[i][0];
		REP(j, m)
			ret &= s[i][j];
		debug(ret);
		REP(k, BITS)
			if(!ret[k])
				rows[i].emplace_back(k);
			else
				orientation[k] = 1;
	}
	vector<vector<int>> cols(m);
	REP(j, m) {
		bitset<BITS> ret = s[0][j];
		REP(i, n)
			ret |= s[i][j];
		REP(k, BITS)
			if(ret[k])
				cols[j].emplace_back(k);
			else
				orientation[k] = 2;
	}
	debug(rows);
	debug(cols);
	debug(orientation);
	while(q--) {
		int t, a, b, c, d;
		cin >> t >> a >> b >> c >> d;
		int current_time = t;
		if(orientation[t % BITS] == 1) {
			int diff = (a <= c ? 1 : -1);
			if(a > c) --a, --c;
			for(int i = a; i != c; i += diff) {
				auto it = lower_bound(rows[i].begin(), rows[i].end(), current_time % BITS);
				if(it == rows[i].end())
					it = rows[i].begin();
				current_time += (BITS + *it - current_time % BITS) % BITS;
			}
		} else {
			int diff = (b <= d ? 1 : -1);
			if(b > d) --b, --d;
			for(int i = b; i != d; i += diff) {
				auto it = lower_bound(cols[i].begin(), cols[i].end(), current_time % BITS);
				if(it == cols[i].end())
					it = cols[i].begin();
				current_time += (BITS + *it - current_time % BITS) % BITS;
			}
		}
		cout << current_time << '\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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | #include <bits/stdc++.h> //Michał Kuśmirek using namespace std; //XIII LO Szczecin #define FOR(i, a, b) for(int i = (a); i <= (b); ++i) #define REP(i, n) for(int i = 0; i < (n); ++i) using ll = long long; using pii = pair<int, int>; template<class T> int size(T && a) { return (int)(a.size()); } ostream& operator << (ostream &os, string str) { for(char c : str) os << c; return os; } template <class A, class B> ostream& operator << (ostream &os, const pair<A, B> &p) { return os << '(' << p.first << "," << p.second << ')'; } template <class T> auto operator << (ostream &os, T &&x) -> decltype(x.begin(), os) { os << '{'; for(auto it = x.begin(); it != x.end(); ++it) os << *it << (it == prev(x.end()) ? "" : " "); return os << '}'; } template <class T> ostream& operator << (ostream &os, vector<vector<T>> vec) { for(auto x : vec) os << "\n " << x; return os; } void dump() {} template <class T, class... Args> void dump(T &&x, Args... args) { cerr << x << "; "; dump(args...); } #ifdef DEBUG # define debug(x...) cerr << "[" #x "]: ", dump(x), cerr << '\n' #else # define debug(...) 0 #endif //-------------------------------------------------- #ifdef DEBUG const int BITS = 12; #else const int BITS = 840; #endif int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m, q; cin >> n >> m >> q; vector<vector<bitset<BITS>>> s(n, vector<bitset<BITS>>(m)); REP(i, n) REP(j, m) { string str; cin >> str; REP(k, BITS) s[i][j][k] = (str[k % size(str)] - '0'); } vector<int> orientation(BITS); //0 - none, 1 - horizontal, 2 - vertical vector<vector<int>> rows(n); REP(i, n) { bitset<BITS> ret = s[i][0]; REP(j, m) ret &= s[i][j]; debug(ret); REP(k, BITS) if(!ret[k]) rows[i].emplace_back(k); else orientation[k] = 1; } vector<vector<int>> cols(m); REP(j, m) { bitset<BITS> ret = s[0][j]; REP(i, n) ret |= s[i][j]; REP(k, BITS) if(ret[k]) cols[j].emplace_back(k); else orientation[k] = 2; } debug(rows); debug(cols); debug(orientation); while(q--) { int t, a, b, c, d; cin >> t >> a >> b >> c >> d; int current_time = t; if(orientation[t % BITS] == 1) { int diff = (a <= c ? 1 : -1); if(a > c) --a, --c; for(int i = a; i != c; i += diff) { auto it = lower_bound(rows[i].begin(), rows[i].end(), current_time % BITS); if(it == rows[i].end()) it = rows[i].begin(); current_time += (BITS + *it - current_time % BITS) % BITS; } } else { int diff = (b <= d ? 1 : -1); if(b > d) --b, --d; for(int i = b; i != d; i += diff) { auto it = lower_bound(cols[i].begin(), cols[i].end(), current_time % BITS); if(it == cols[i].end()) it = cols[i].begin(); current_time += (BITS + *it - current_time % BITS) % BITS; } } cout << current_time << '\n'; } } | 
 
            
         English
                    English