Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> pii;
- typedef vector<int> vi;
- #define X first
- #define Y second
- #define inb push_back
- #define mk make_pair
- #define all(v) v.begin(), v.end()
- #define sqr(x) (x) * (x)
- #define y1 zapadupal
- int solve();
- int main()
- {
- solve();
- return 0;
- }
- mt19937 rnd(time(0));
- int solve()
- {
- int n;
- scanf("%d", &n);
- vector<vi> a(n, vi(n)), xpr(n, vi(n));
- unordered_map<int, int> kek;
- for (int i = 0; i < (int)kek.size(); ++i)
- {
- kek[i] = abs((int)rnd());
- }
- for (int i = 0; i < n; ++i)
- {
- for (int j = 0; j < n; ++j)
- {
- scanf("%d", &a[i][j]);
- --a[i][j];
- if (kek.find(a[i][j]) == kek.end())
- {
- kek[a[i][j]] = rnd();
- }
- a[i][j] = kek[a[i][j]];
- xpr[i][j] = a[i][j];
- if (i)
- xpr[i][j] ^= xpr[i - 1][j];
- if (j)
- xpr[i][j] ^= xpr[i][j - 1];
- if (i && j)
- xpr[i][j] ^= xpr[i - 1][j - 1];
- }
- }
- auto getxor = [&](int x, int y, int x1, int y1)
- {
- int ans = xpr[x1][y1];
- if (x)
- ans ^= xpr[x - 1][y1];
- if (y)
- ans ^= xpr[x1][y - 1];
- if (x && y)
- ans ^= xpr[x - 1][y - 1];
- return ans;
- };
- int ansx = 0, ansy = 0;
- auto check = [&](int x)
- {
- for (int i = 1; i + x < n; ++i)
- {
- for (int j = 1; j + x < n; ++j)
- {
- if (getxor(i, j, i + x - 1, j + x - 1) == 0)
- {
- ansx = i + 1, ansy = j + 1;
- return 1;
- }
- }
- }
- return 0;
- };
- int l = n - 2;
- while (!check(l))
- l -= 2;
- printf("%d %d %d\n", l, ansx, ansy);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement