今天做一道站外题,题是做完了,不过每次调试编译都很慢。刚开始没在意以为是devc++的问题,不过提交的时候外站直接表示编译超时不评测了,为什么会出现这种事情?
#include <bits/stdc++.h>
using namespace std;
int r,c,k;
int a[2505][2505];
int cnt[7000000];
int cnt2[7000000];
struct b{
int l=114514,r=0,u=114514,d=0;
};
b border[7000000];
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin>>r>>c>>k;
for (int i=1;i<=r;i++) {
for (int j=1;j<=c;j++) {
cin>>a[i][j];
cnt[a[i][j]]++;
border[a[i][j]].l=min(border[a[i][j]].l,j);
border[a[i][j]].r=max(border[a[i][j]].r,j);
border[a[i][j]].u=min(border[a[i][j]].u,i);
border[a[i][j]].d=max(border[a[i][j]].d,i);
}
}
int ans=0;
bool ret,stop;
for (int i=1;i<=r;i++){
for (int j=1;j<=c;j++){
stop=0;
for (int l=ans+1;i>=l&&j>=l&&!stop;l++){
ret=1;
for (int ii=1;ii<=k;ii++) cnt2[ii]=0;
for (int ii=i-l+1;ii>0&&ii<=i&&ret;ii++){
for (int jj=j-l+1;jj>0&&jj<=j&&ret;jj++){
if (border[a[ii][jj]].d>i||border[a[ii][jj]].r>j) {
stop=1;
ret=0;
break;
}
if (border[a[ii][jj]].u<i-l+1||border[a[ii][jj]].l<j-l+1){
l=max(i-border[a[ii][jj]].u,j-border[a[ii][jj]].l);
ret=0;
break;
}
cnt2[a[ii][jj]]++;
}
}
for (int ii=1;ii<=k;ii++) if (cnt2[ii]&&cnt2[ii]!=cnt[ii]) {
ret=0;
break;
}
if (ret) ans=l;
}
}
}
cout<<ans;
}