3 条题解
-
3
//条件为一个数+1一个数-1,即总和不变,先判断总和再排序后依次取各个数差的绝对值除2 #include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ll n,sum1=0;
cin>>n;
ll a[n+10];
for(int i=1;i<=n;i++){
cin>>a[i];
sum1+=a[i];
}
ll sum2=(n+n*n)/2;
if(sum1!=sum2){
cout<<-1<<"\n";
}else{
ll ans=0;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
if(a[i]!=i){
ans=ans+abs(a[i]-i);
}
}
cout<<ans/2<<"\n";
}
return 0;
}
-
0
#include <stdio.h> #include <algorithm> #include <math.h> using namespace std; int main() { long long n, a[200005], sum1 = 0, b = 0; scanf("%lld", &n); for (int i = 0; i < n; i++) { scanf("%lld", &a[i]); sum1 += a[i]; } long long sum2 = n * (n + 1) / 2; if (sum1 != sum2) { printf("-1\n"); return 0; } sort(a, a + n); for (int i = 0; i < n; i++) { b += llabs(a[i] - (i + 1));//求绝对值 } printf("%lld\n", b / 2); return 0; } -
0
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll N=1e6+5; ll a[N]; void solve(){ ll n;cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+1+n); ll sf=0,sz=0; for(int i=1;i<=n;i++){ if(a[i]<i) sf+=i-a[i]; else sz+=a[i]-i; } if(sz!=sf) cout<<"-1"<<'\n'; else cout<<sf<<'\n'; } int main(){ ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); ll _=1; // cin>>_; while(_--){ solve(); } return 0; }
- 1
信息
- ID
- 1203
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 327
- 已通过
- 45
- 上传者