听过运行超时,头一回遇见编译超时
  • 板块学术版
  • 楼主icaijy
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/13 21:44
  • 上次更新2024/7/14 08:13:07
查看原帖
听过运行超时,头一回遇见编译超时
378195
icaijy楼主2024/7/13 21:44

今天做一道站外题,题是做完了,不过每次调试编译都很慢。刚开始没在意以为是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;
	
}
2024/7/13 21:44
加载中...