Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- VLL a,s,h,v,sh,sv;
- int n,m;
- void build() {
- s.assign(n+1,VL(m+1,0));
- sh=sv=h=v=s;
- for (int i=1;i<=n;i++) {
- for (int j=1;j<=m;j++) {
- h[i][j]=a[i][j]*j;
- v[i][j]=a[i][j]*i;
- s[i][j]=a[i][j]+s[i-1][j]+s[i][j-1]-s[i-1][j-1];
- sh[i][j]=h[i][j]+sh[i-1][j]+sh[i][j-1]-sh[i-1][j-1];
- sv[i][j]=v[i][j]+sv[i-1][j]+sv[i][j-1]-sv[i-1][j-1];
- }
- }
- }
- bool getdisk(int x,int y,int r) {
- x++;y++;
- LL hsum=sh[x+r-1][y+r-1]-sh[x-1][y+r-1]-sh[x+r-1][y-1]+sh[x-1][y-1];
- LL vsum=sv[x+r-1][y+r-1]-sv[x-1][y+r-1]-sv[x+r-1][y-1]+sv[x-1][y-1];
- LL sum=s[x+r-1][y+r-1]-s[x-1][y+r-1]-s[x+r-1][y-1]+s[x-1][y-1];
- hsum-=h[x][y]+h[x+r-1][y]+h[x][y+r-1]+h[x+r-1][y+r-1];
- vsum-=v[x][y]+v[x+r-1][y]+v[x][y+r-1]+v[x+r-1][y+r-1];
- sum-=a[x][y]+a[x+r-1][y]+a[x][y+r-1]+a[x+r-1][y+r-1];
- if (2*vsum!=(2*x+r-1)*sum) return 0;
- if (2*hsum!=(2*y+r-1)*sum) return 0;
- return 1;
- }
- void solve() {
- int d;
- cin >> n >> m >> d;
- a.assign(n+1,VL(m+1,0));
- for (int i=1;i<=n;i++) {
- string s;
- cin >> s;
- for (int j=1;j<=m;j++) {
- a[i][j]=s[j-1]-'0'+d;
- }
- }
- build();
- for (int i=min(n,m);i>=3;i--) {
- for (int x=0;x<=n-i;x++)
- for (int y=0;y<=m-i;y++)
- if (getdisk(x,y,i)) {
- print(i);
- return;
- }
- }
- print("IMPOSSIBLE");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement