Cod sursa(job #1108049)

Utilizator ion824Ion Ureche ion824 Data 15 februarie 2014 12:52:07
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include<fstream>
#include<string>
#include<vector>
using namespace std;
const int MOD = 666013;
const int NM = 1002;
typedef struct lnod{
        int x,y;
        lnod *next;
        }*Nod;
int x1[NM],y1[NM];
string s;
Nod h[MOD];

inline int abs(int x){ return (x<0)?(-x):(x); }

void add(Nod &q,int x,int y){
     Nod p = new lnod;
     p->x=x;
     p->y=y;
     p->next=q;
     q=p;
     }

int main(){
    ifstream cin("patrate3.in");
    ofstream cout("patrate3.out");
    int N,i,j,x,y,l,DX,DY,p1x,p1y,Q,f1,nr=0,semn;
    
    cin>>N; getline(cin,s);
    for(i=1;i<=N;++i)
    {
      getline(cin,s);
      x=y=0; l=s.length();
      semn=0;
      for(j=0;s[j]!=' ';++j)
        if(s[j]!='.')
          if(s[j]=='-') semn=1;
            else x=(x*10)+(s[j]-'0');
      x1[i]=x * ((semn==1)?(-1):(1)); 
      semn=0; 
      for(++j; j<l;++j)
        if(s[j]!='.')
          if(s[j]=='-') semn=1;
          else y=(y*10)+(s[j]-'0');
          
      y1[i]=y * ((semn==1)?(-1):(1));     
      
      //cout<<x1[i]<<' '<<y1[i]<<'\n';    
      
      add(h[(abs(x+y))%MOD],x,y);            
    }
    
    for(i=1;i<N;++i)
      for(j=i+1;j<=N;++j)
      {
        DX=x1[i]-x1[j]; DY=y1[i]-y1[j];
        p1x=x1[i]+DY; p1y=y1[i]-DX;
        Q=(abs(p1x+p1y))%MOD;
        f1=0;
        for(Nod p=h[Q];p;p=p->next)
          if(p->x==p1x && p->y==p1y)
          {
            f1=1;             
          }
        
        if(f1){
          p1x=x1[j]+DY; p1y=y1[j]-DX;
          Q=(abs(p1x+p1y))%MOD;
          f1=0;
          for(Nod p=h[Q];p;p=p->next)
            if(p->x==p1x && p->y==p1y)
              {
                ++nr;
                break;
              }                             
          }                     
      }
    nr>>=1;
    cout<<nr<<'\n';
    
 return 0;   
}