一个小小的疑问(我太菜了)
  • 板块学术版
  • 楼主ZBSAMZL
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/11 23:05
  • 上次更新2024/8/12 09:08:13
查看原帖
一个小小的疑问(我太菜了)
932251
ZBSAMZL楼主2024/8/11 23:05

为什么有些代码在本地运行出来的结果是对的,提交到洛谷就错了(无论开不开O2)。

就比如说,今天我做2013年NOIp普及组T4时,WA在#7#8,然后我下载了#7的测试数据,我的输出与正确答案均为994。后面我又发现我的代码如果开了O2输出会变成503,我自信地关掉O2再次提交仍然WA在#7#8。这到底是怎么回事? 抓耳挠腮

附上丑陋的代码:

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
const int N=1e3+5;
vector<int>e[2*N];
queue<int>q;
int n,m,d[N],b[N][N],ans,in[2*N];
int main(){
	cin>>n>>m;
	int tmp=n;
	for(int i=1,s;i<=m;i++){
		cin>>s;
		tmp++;
		int mxa=0;
		int mna=1e5;
		for(int j=1,a;j<=s;j++){
			cin>>a;
			mxa=max(a,mxa);
			mna=min(a,mna);
			b[i][a]++;
		}
		for(int j=mna;j<=mxa;j++){
			
			if(b[i][j]==0){
				e[tmp].push_back(j);
				in[j]++;
			}
			else{
				e[j].push_back(tmp);
				in[tmp]++;
			}
		}
	}
	int cnt=1;
	ans=1;
	for(int i=1;i<=n;i++){
		if(!in[i]){
			q.push(i);
			d[cnt]++;
		}
	}
    int lst=0;
	while(!q.empty()){
		int x=q.front();
		q.pop();
		if(d[cnt]==0){
			if(d[cnt+1]==0)break;
			if(lst>n)ans++;
			cnt++;
		}
        d[cnt]--;
		for(int i=0;i<e[x].size();i++){
			in[e[x][i]]--;
			if(in[e[x][i]]==0){
				d[cnt+1]++;
				q.push(e[x][i]);
			}
		}
        lst=x;
	}
    cout<<ans<<endl;
	return 0;
}
2024/8/11 23:05
加载中...