頭良くなりたい人

文系大学生shadeのブログです。競技プログラミングや人文学の話題,受験ネタなど。

ABC156 C - Rally

問題はこちら
atcoder.jp

指針

スマートな方法が思いつかなかったのでローラー作戦1\leq N\leq100, 1\leq X_i\leq100 なのでそれでも問題なさそう。

問題文通りに整数 N と配列 X を宣言して,X_i の最小の要素から最大の要素までの範囲で N を動かし,求める最小値を出しました。

コード

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    int n;
    cin>>n;
    vector<int> x(n);
 
    for(int i=0; i<n; i++){
        cin>>x.at(i);
    }
 
    int sum=0,sum_min=0;
 
    sort(x.begin(),x.end());
 
    for(int i=x.at(0); i<x.at(n-1)+1; i++){
        for(int j=0; j<n; j++){
            sum+=(x.at(j)-i)*(x.at(j)-i);
        }
        if(sum_min==0 || sum<sum_min){
            sum_min=sum;
        }
        sum=0;
    }
 
    cout<<sum_min<<endl;
}

反省など

とりあえずあまりに愚直なやり方でしっくりこないので,強い人のコードを見てみようと思います。
気づいたことなどがあればまた書きます。