Cod sursa(job #317093)

Utilizator andreioneaAndrei Onea andreionea Data 22 mai 2009 15:56:23
Problema Poligon Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.51 kb
/*#include<stdio.h>
long x[804],y[804];
int n,m,xx,yy,np=0,i,j;
long long a=0,b;
int main()
{FILE *f=fopen("poligon.in","r"),*g=fopen("poligon.out","w");

 fscanf(f,"%d %d\n",&n,&m);
 for(i=1;i<=n;++i) 
  fscanf(f,"%ld %ld\n",&x[i],&y[i]);
 for(i=2;i<n;++i) 
 a+=(x[i]-x[1])*(y[i+1]-y[1])-(x[i+1]-x[1])*(y[i]-y[1]); 
 for(i=1;i<=m;++i)
	{fscanf(f,"%d %d\n",&xx,&yy);
	 b=0;
	 for(j=1;j<n;++j)
	 b+=(x[i]-xx)*(y[i+1]-yy)-(x[i+1]-xx)*(y[i]-yy);
	 b+=(x[n]-xx)*(y[1]-yy)-(x[1]-xx)*(y[n]-yy);
         if(b==a) np++;
	 }
 fprintf(g,"%d\n",np);
 fclose(f);
 fclose(g);
 return 0;
}*/
 #include<stdio.h>  
 int x[801],y[801],n;  
 inline int sign(long long x)  
 {return (x<0)?(-1):(x>0)?(1):(0);  
 }  
 inline long long dotprod(int x0,int y0, int x1, int y1,int x2,int y2)  
 {return (long long)(x1-x0)*(y2-y0)-(long long)(x2-x0)*(y1-y0);  
 }  
 int in_poli(int xx,int yy)  
 {int semn=sign(dotprod(xx,yy,x[1],y[1],x[2],y[2])),i,s;  
  for(i=3;i<=n;++i)  
   {s=sign(dotprod(xx,yy,x[i-1],y[i-1],x[i],y[i]));  
     if(s==0) return 1;  
     if(s!=semn) return 0;  
    }  
  s=sign(dotprod(xx,yy,x[n],y[n],x[1],y[1]));  
  if(s==0) return 1;  
  if(s!=semn) return 0;  
  return 1;  
 }  
 int main()  
{FILE *f=fopen("poligon.in","r"),*g=fopen("poligon.out","w");  
  int m,xx,yy,np=0,i;  
 fscanf(f,"%d %d\n",&n,&m);  
  for(i=1;i<=n;++i) fscanf(f,"%d %d\n",&x[i],&y[i]);  
  for(i=1;i<=m;++i)  
     {fscanf(f,"%d %d\n",&xx,&yy);  
          np+=in_poli(xx,yy);  
      }  
  fprintf(g,"%d\n",np);  
 fclose(f);  
  fclose(g);  
 return 0;  
 }