2 条题解

  • 3
    @ 2025-11-16 15:05:42

    //条件为一个数+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
      @ 2025-11-16 23:33:36
      #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;
      }
      
      • @ 2025-11-16 23:34:08

        sort排序,贪心模拟,签到

    • 1

    信息

    ID
    1203
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    271
    已通过
    30
    上传者