神秘问题
  • 板块学术版
  • 楼主Aixan
  • 当前回复2
  • 已保存回复3
  • 发布时间2024/11/20 16:26
  • 上次更新2024/11/20 18:39:14
查看原帖
神秘问题
1178193
Aixan楼主2024/11/20 16:26

我现在有两份T539822 202411C K/D/A的代码,提交都是对的

唯一的区别是 nn 的声明位置

然后我在本地Dev-C++ 5.11 不开 O2 第一份代码输出 11,第二份输出 22

然后我把第一份下面注释去掉(一个看起来根本无意义的循环),发现输出了 22

然后注释加回去,开O2跑,发现输出了 22

然后我又把第一份代码弄到小熊猫里不做其他修改,发现输出了 22

所以到底是什么原因使第一份代码本地输出 11 的 ?

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6+7;
struct node{
	int k,d,b,val,id;
	node(){}
	node(int K,int D,int B,int I){
		k=K;d=D;b=B;id=I;
		if(k-d>=10)val = k*(k-d)+b;
		else if(k>=d) val = (k-d+1)*3+b;
		else val = b*2;
	}
	bool operator < (const node &x)const{
		return val > x.val;
	}
}a[N];
signed main(){
//	ios_base::sync_with_stdio(false);
//	cin.tie(0);cout.tie(0);
	int n;
	cin >> n;
	for(int i=1;i<=n;i++){
		int x,y,z;
		scanf("%d/%d/%d",&x,&y,&z);
		a[i] = node(x,y,z,i);
	}
	sort(a+1,a+1+n);
//	for(int i=1;i<=n;i++)
//		a[i].id=a[i].id;
	cout << a[1].id;
	return 0;
}
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6+7;
struct node{
	int k,d,b,val,id;
	node(){}
	node(int K,int D,int B,int I){
		k=K;d=D;b=B;id=I;
		if(k-d>=10)val = k*(k-d)+b;
		else if(k>=d) val = (k-d+1)*3+b;
		else val = b*2;
	}
	bool operator < (const node &x)const{
		return val > x.val;
	}
}a[N];
int n;
signed main(){
//	ios_base::sync_with_stdio(false);
//	cin.tie(0);cout.tie(0);
	cin >> n;
	for(int i=1;i<=n;i++){
		int x,y,z;
		scanf("%d/%d/%d",&x,&y,&z);
		a[i] = node(x,y,z,i);
	}
	sort(a+1,a+1+n);
//	for(int i=1;i<=n;i++)
//		a[i].id=a[i].id;
	cout << a[1].id;
	return 0;
}
样例:
2
10/1/9
10/0/1
2024/11/20 16:26
加载中...