[BOJ/C+]2012号スコア


この問題はグリディアルゴリズムによって簡単に解決された.
  • に入力された予想スコアを昇順に並べ替えます.
  • の予想点数がwishでランクがrankであればabs(wish-rank)を最小にするために予想点数が並んだ最初の数から順に順位をつける.
  • の複文を通じて、お茶の節制費を全部加算します.
  • Code

    #include <iostream>
    #include <algorithm>
    #include <math.h>
    #define MAX 500001
    using namespace std;
    
    int n;
    int wish[MAX];
    int cnt=0;
    
    void Input(){
        cin>>n;
        for(int i=0; i<n; i++){
            cin>>wish[i];
        }
    }
    
    void Solution(){
        sort(wish, wish+n);
        for(int i=0; i<n; i++){
            cnt+=abs(i+1-wish[i]);
        }
        cout<<cnt<<endl;
    }
    
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        Input();
        Solution();
        return 0;
    }