srupのメモ帳

競プロで解いた問題や勉強したことを記録していくメモ帳

yukicoder No.406 鴨等間隔の法則

問題

問題概要

隣合う二点間の距離がすべて等しいかを見分ける。

解法

x座標がソートされていないのでまずはソートする。そのあと、順番に隣り合う区間の距離が等しいかを見ていけばいい。私は、x0とx1の距離を出しておいて、その値と他の隣り合う2点間の距離が等しいかを調べた。

ミス

特になし。

コード

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define rep(i,n) for(int i=0;i<(n);i++)

int main(void){
    int n; cin >> n;
    vector<int> x(n);
    rep(i, n) cin >> x[i];
    sort(x.begin(), x.end());
    int sa = x[1] - x[0];//一つの場所の差を求めておく
    if(sa == 0){//同じ位置にある
        printf("NO\n");
        return 0;
    }
    for (int i = 1; i < n - 1; ++i){
        if(sa != x[i + 1] - x[i]){//2点間の距離が異なる
            printf("NO\n");
            return 0;
        }
    }
    printf("YES\n");
    return 0;
}