Comment detail

情報オリンピック2006年度国内本選問題3 (Nested Flatten)

標準入出力を使っています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdlib.h>
#include <stdio.h>
int cmp( const void *a, const void *b ){
   int *pa = (int *)a;
   int *pb = (int *)b;
   int r = (*pa<*pb)? -1
            : (*pa>*pb)? 1
            : (*(pa+1)<*(pb+1)) ? -1
            : (*(pa+1)>*(pb+1)) ? 1
            : 0;
   return r;
}

int i,j,n,s,S,*p,dx,dy,q[4];
int main( void ){

   scanf("%d",&n);

   p = (int *)malloc(sizeof(int)*n*2);
   if(!p) return EXIT_FAILURE;

   for(i=0;~scanf("%d%d",p+i,p+i+1);i+=2);
   qsort(p,n,sizeof(int)*2,cmp);
   for(i=0;i<2*n;i+=2){
      for(j=i+2;j<2*n;j+=2){
         dx = p[j] - p[i];
         dy = p[j+1] - p[i+1];
         q[0] = p[i] - dy;  // rotate 90
         q[1] = p[i+1] + dx;
         q[2] = q[0] + dx;  // opposite vertex
         q[3] = q[1] + dy;
         if( bsearch(q,p,n,sizeof(int)*2,cmp)
            && bsearch(q+2,p,n,sizeof(int)*2,cmp) ){
            s = dx*dx+dy*dy;
            S = s>S?s:S;
         }
      }
   }
   free(p);
   return printf("%d\n",S);
}

Index

Feed

Other

Link

Pathtraq

loading...