G题通过判断原数列和是否等于n的累加来确定是否可以排序为什么不对啊

#include<iostream>

#include<algorithm>

using namespace std;

const int N=1e5+10;

typedef long long LL;

LL a[N];

int n;

int main()

{

cin>>n;

LL num=0;

for(int i=1;i<=n;i++)cin>>a[i],num+=a[i];

sort(a+1,a+1+n);

LL ans=n*(n+1)/2;

if(ans!=num)

{

cout<<"-1"<<endl;

return 0;

}

LL z=0,f=0;

for(int i=1;i<=n;i++)

{

if(a[i]<i)z+=i-a[i];

else if(a[i]>i)f+=a[i]-i;

}

cout<<z<<endl;

return 0;

}

测试结果只判断能否排序过了百分之二十,只求操作数过了百分之八十,和一块就剩36了

全部评论
n*(n+1)/2爆int了,n是int型,答案是先爆int才会被ll型的ans接收
1 回复 分享
发布于 01-23 09:50 河南
求求大佬解释
点赞 回复 分享
发布于 01-22 16:23 河南

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务