为啥子不对呢。。。。跟答案的代码感觉没啥区别啊。。。。结果只过了7个点。。。。
救救孩子5555
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 200010;
long long a[maxn];
int main()
{
int T;
cin>>T;
while(T--)
{
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
sort(a,a+n);
int j = n-2;
if(a[n-1]) //如果最大的数不是0的话
{
while(k--)
{
if(!a[j]) break; //走到了0 直接结束
a[n-1]+=a[j--];
}
}
cout<<a[n-1]<<endl;
}
}
我懂了!
原程序错误在:
1. 在cout<<a[n-1]<<endl; 之后没有将a[n - 1] 置为0
2. 如果a[n - 1]超出 (2^32 - 1)后,在下一次的 scanf(“%d”, &a[i]) 时就不能抹去上一轮的 a[n - 1] 的高32位。导致该位置数据错误。
可以在cout 后加入 a[n - 1] = 0; 也可 ac
%%%%好厉害%%理解的好深入 我之前理解的太浅了😖谢谢xd
很简单,读入错误,应该 scanf(“%lld”,&a[i]); 或 cin >> a[i];
艾玛对啊。。。WA好几次都没发现。谢谢xd😁!
您好,请问为什么改为scanf(“%lld”, &a[i])就可以通过了?
我的理解:0 <= a[i] <= 1e9 并没有超过 int 的范围,所以scanf(“%d”, a[i])也没问题,并且读入后会转为LL类型,即原程序应该正确。
而我的理解 与 “原程序不能通过” 矛盾。因此,想请问您应该如何理解 %d 是错误的。
因为我定义a数组的时候定义的是long long啊