社区讨论

神秘问题

学术版参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m3pmfqhx
此快照首次捕获于
2024/11/20 16:28
去年
此快照最后确认于
2025/11/04 14:19
4 个月前
查看原帖
我现在有两份T539822 202411C K/D/A的代码,提交都是对的
唯一的区别是 nn 的声明位置
然后我在本地Dev-C++ 5.11 不开 O2 第一份代码输出 11,第二份输出 22
然后我把第一份下面注释去掉(一个看起来根本无意义的循环),发现输出了 22
然后注释加回去,开O2跑,发现输出了 22
然后我又把第一份代码弄到小熊猫里不做其他修改,发现输出了 22
所以到底是什么原因使第一份代码本地输出 11 的 ?
CPP
#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;
}
CPP
#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;
}
CPP
样例:
2
10/1/9
10/0/1

回复

3 条回复,欢迎继续交流。

正在加载回复...