Pagini recente » Cod sursa (job #3209949) | Cod sursa (job #2686085) | Cod sursa (job #1242318) | Cod sursa (job #1874422) | Cod sursa (job #40746)
Cod sursa(job #40746)
#include<stdio.h>
#include<math.h>
#define max 513
struct {double u1,u2,b;
} a[513];
char b[514][514],s[513];
int c[514][514],n,i,j,nr,k,l;
int main()
{freopen("laser.in","r",stdin);
freopen("laser.out","w",stdout);
scanf("%d",&n);
int x,y;
double u;
for(i=1;i<=n;i++){
scanf("%d %d",&x,&y);
u=atan(y*1.0/x)/M_PI*180;
if(u<0) u=u+360;
if(x<0) if(y>0) u=u-180;
else u=u+180;
a[i].u1=u;
scanf("%d %d",&x,&y);
u=atan(y*1.0/x)/M_PI*180;
if(u<0) u=u+360;
if(x<0) if(y>0) u=u-180;
else u=u+180;
a[i].u2=u;
if(!((a[i].u1>270&&a[i].u2<180)||(a[i].u2>270&&a[i].u1<180)))a[i].b=(a[i].u1+a[i].u2)/2;
else a[i].b=(a[i].u1+a[i].u2-360)/2;
if(a[i].b<0) a[i].b+=360;}
for(i=1;i<=n;i++) scanf("%d",&c[i][max]);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j) {c[i][++c[i][0]]=j;continue;}
else {b[i][j]=(a[j].b<=a[i].u1&&a[j].b>=a[i].u2)||(a[j].b>=a[i].u1&&a[j].b<=a[i].u2);
if(b[i][j]) c[i][++c[i][0]]=j;}
for(k=1;k<=n;k++)
{for(j=1;j<=n;j++)
if(c[j][0]==1) break;
if(j>n) break;
x=c[j][1]; y=c[j][max];
s[x]=y; if(y) nr++;
for(i=1;i<=n;i++)
for(j=1;j<=c[i][0];j++)
if(c[i][j]==x)
{c[i][max]= y? !c[i][max] : c[i][max];
for(l=j;l<c[i][0];l++)
c[i][l]=c[i][l+1];
c[i][0]--;
break;}}
printf("%d\n",nr);
for(i=1;i<=n;i++)
if(s[i]) printf("%f\n",a[i].b);
fclose(stdout);
return 0;}