灵异事件之 for 循环后变量突然改变成一个很小的数
  • 板块学术版
  • 楼主icaijy
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/13 20:21
  • 上次更新2024/7/13 20:23:48
查看原帖
灵异事件之 for 循环后变量突然改变成一个很小的数
378195
icaijy楼主2024/7/13 20:21
#include <bits/stdc++.h>
using namespace std;

int r,c,k;
struct s{
	int num[10];
	s operator+(const s s2)const{
		s ret;
		for (int i=1;i<=k;i++){
			ret.num[i]=num[i]+s2.num[i];
		}
		return ret;
	}
	s operator-(const s s2){
		s ret;
		for (int i=1;i<=k;i++){
			ret.num[i]=num[i]-s2.num[i];
		}
		return ret;
	}
};
int a[2505][2505];
s sum[2505][2505];
int cnt[6250005];


bool check(s s1){
	for (int i=1;i<=k;i++) if (s1.num[i]&&s1.num[i]!=cnt[i]) return false;
	return true;
}

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]]++;
			sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
			sum[i][j].num[a[i][j]]++;
		}
	}
	int ans=0;
	for (int i=1;i<=r;i++){
		for (int j=1;j<=r;j++){
			for (int l=ans+1;i>=l&&j>=l;l++){
				if (check(sum[i][j]-sum[i-l][j]-sum[i][j-l]+sum[i-l][j-1])) {
					ans=l;
				}
			}
		}
	}
	cout<<ans;
	
}

站外题,但是第一次执行完check函数后l就突然变成一个很小的数,这是啥问题啊,一天头绪没有。 测试样例:

5 8 10
1 6 6 6 6 6 7 7
1 1 1 6 8 4 4 7
2 2 2 9 3 4 4 7
2 5 2 9 3 3 4 7
2 2 2 2 10 10 7 7
2024/7/13 20:21
加载中...