1. 程式人生 > >Wannafly挑戰賽26 御阪網路

Wannafly挑戰賽26 御阪網路

御阪網路

時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld

題解:暴力!暴力出奇跡,分別以每一個頂點作為圓心,看剩下的圓心之間的距離是否相同。qwq

題目描述

作為「Misaka Network」的中心司令塔的 LastOrder出事了,為了維持 「Misaka Network」的正常工作,需要臨時選出一個Sister作為中心司令塔。

為了彌補能力上的不足,對於選出的Sister有一些要求。
具體來說,平面上有 n 個 Sister,問能否找到一個Sister作為中心司令塔,使得其他 Sister 都在以她為圓心的一個圓上,如果找不到這樣的Sister,則輸出 "-1"(不含引號)。

輸入描述:

第一行一個數 n
接下來 n 行,第 i 行兩個整數 xi, yi ,表示第 i 個Sister在平面上的座標。

輸出描述:

輸出共一個數,表示選出的Sister的編號,如果找不到則輸出 "-1"。

示例1

輸入

複製

3
1 1
0 1
1 2

輸出

複製

1

備註:

3 ≤ n ≤ 1000,-109≤ xi, yi ≤ 109 ,所有座標互不相同。
#include <iostream>
using namespace std;
typedef long long ll;
const int maxn=1e4+5;
ll a[maxn],b[maxn];
ll d[maxn];
int main(){
    ll n;
    cin>>n;
    for(ll i=1;i<=n;i++){
        cin>>a[i]>>b[i];
    }
    for(ll i=1;i<=n;i++){
        ll num=0;
        for(ll j=1;j<=n;j++){
            if(i!=j)
                d[++num]=(a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j]);
        }
        ll flag=1;
        for(ll j=1;j<num;j++){
            if(d[j]!=d[j+1]) flag=0;
            if(flag){
                cout<<i;
                return 0;
            }
        }
    }
    cout<<"-1";
    return 0;
}