Cod sursa(job #2847834)

Utilizator nubnubMeh Neh nubnub Data 11 februarie 2022 16:08:40
Problema Patrate 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.23 kb
#include <cstdio>
#include <cctype>
#include <algorithm>
#include <cmath>
#define MAXN 10000
struct Point{
     int x;
     int y;
};
Point P[MAXN+1];
bool cmp(Point a,Point b){
    if(a.x==b.x)
       return a.y<b.y;
    return a.x<b.x;
}
inline char cauta(int x,int y,int n){
    int pas,rez=0;
   // printf("%.15lf %.15lf\n" ,y,26.51);
    for(pas=1<<12;pas;pas>>=1)
      if(rez+pas<=n&&(P[rez+pas].x<x||(P[rez+pas].x==x&&P[rez+pas].y<=y)))
         rez+=pas;
   //      if(x==9.1&&y==26.51)
     //       printf("%d " ,rez);
    return (P[rez].x==x&&P[rez].y==y);
}
int main(){
   FILE*fi,*fout;
   int i,j,n,ans,x3,y3,x4,y4,x,y,sign;
   char a;
   fi=fopen("patrate3.in" ,"r");
   fout=fopen("patrate3.out" ,"w");
   fscanf(fi,"%d " ,&n);
   for(i=1;i<=n;i++){
       a=fgetc(fi);
       sign=1;
       if(a=='-'){
          sign=-1;
          a=fgetc(fi);
       }
       x=0;
       while(isdigit(a)==1){
          x=x*10+a-'0';
          a=fgetc(fi);
       }
       a=fgetc(fi);
       while(isdigit(a)==1){
          x=x*10+a-'0';
          a=fgetc(fi);
       }
       x*=sign;
       y=0;
       a=fgetc(fi);
       sign=1;
       if(a=='-'){
          sign=-1;
          a=fgetc(fi);
       }
       while(isdigit(a)==1){
          y=y*10+a-'0';
          a=fgetc(fi);
       }
       a=fgetc(fi);
       while(isdigit(a)==1){
          y=y*10+a-'0';
          a=fgetc(fi);
       }
       y*=sign;
       P[i].x=x;
       P[i].y=y;
   }
   std::sort(P+1,P+n+1,cmp);
   ans=0;
   for(i=1;i<=n;i++)
    for(j=i+1;j<=n;j++)
      if(P[i].x<P[j].x&&P[i].y<=P[j].y){
          x3=P[j].x-(P[j].y-P[i].y);
          y3=P[j].y+(P[j].x-P[i].x);
          if(cauta(x3,y3,n)==1){
              y4=P[i].y+(P[j].x-P[i].x);
              x4=P[i].x-(P[j].y-P[i].y);
              if(cauta(x4,y4,n)==1)
                 ans++;
          }
          x3=P[j].x+(P[j].y-P[i].y);
          y3=P[j].y-(P[j].x-P[i].x);
          if(cauta(x3,y3,n)==1){
              x4=P[i].x+(P[j].y-P[i].y);
              y4=P[i].y-(P[j].x-P[i].x);
              if(cauta(x4,y4,n)==1)
                 ans++;
          }
      }
   fprintf(fout,"%d" ,ans/2);
   fclose(fi);
   fclose(fout);
   return 0;
}