我现在有两份T539822 202411C K/D/A的代码,提交都是对的
唯一的区别是 n 的声明位置
然后我在本地Dev-C++ 5.11 不开 O2 第一份代码输出 1,第二份输出 2
然后我把第一份下面注释去掉(一个看起来根本无意义的循环),发现输出了 2
然后注释加回去,开O2跑,发现输出了 2
然后我又把第一份代码弄到小熊猫里不做其他修改,发现输出了 2
所以到底是什么原因使第一份代码本地输出 1 的 ?
#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