[ブラシノート]Codeforces 181 Bは、ある点が存在するか否かを検出する

1124 ワード

テーマ:Codeforces 181 B
アドレス:http://codeforces.com/submissions/GreyCrow/page/1
N組の点を与えて、これらの点の中にいくつの点が他の2点の中点であることを聞きます
心得:
  • 初めて暴力が果敢にタイムアウトした.
  •  好方法放弃[无法]じòぴé 
  • 他の人のコードがこのように点が存在するかどうかをマークすることができます.
  • は配列ex[n][n]を確立し、初期値はすべてゼロである.ex[a][b]=1であっても、1つの点(a,b)を読み込むたびに、

  • コード:
    #include <algorithm>
    #include<iostream>
    using namespace std;
    struct stu 
    {
        int a;
        int b;
    }pt[3005];
    int cmp(stu a,stu b)
    {
        if(a.a!=b.a)
            return a.a<b.a;
        else
            return a.b<b.b;
    }
    int a[2*3005][2*3005] = {0};
    int main()
    {
        int i, j, n, cnt;
        cin>>n;
        for(i=0;i<n;i++)
            scanf("%d %d", &pt[i].a, &pt[i].b),a[pt[i].a+3005][pt[i].b+3005]=1;//  
        sort(pt,pt+n,cmp);
        cnt = 0;
        for(i=0;i<n-1;i++)
            for(j=i+2;j<n;j++)
            {
                
                    if((pt[i].a+pt[j].a)%2||(pt[i].b+pt[j].b)%2)
                        continue;
                    cnt+=a[(pt[i].a+pt[j].a)/2+3005][(pt[i].b+pt[j].b)/2+3005];//        
            }
        printf("%d
    ", cnt); }