Pagini recente » Cod sursa (job #1141226) | Cod sursa (job #2938612) | Cod sursa (job #298765) | Cod sursa (job #854305) | Cod sursa (job #2482131)
#include <fstream>
#include<math.h>
#include<iomanip>
#include<algorithm>
#define ver 0.000000001
#define P 3.14159265358979323846264338327950288
using namespace std;
ifstream fin ("laser.in");
ofstream fout("laser.out");
int n,m,x1,x2,y3,y2,i,j,x,y,a[1100][1100],sol[1100],t;
double segs[520],segd[520],v[1100],st,dr,ung[1100];
int verif()
{
if(segd[i]-segs[i]>P)
return (ung[j]<segs[i]+ver)||(ung[j]>segd[i]-ver);
return (ung[j]-segs[i]>-ver&&segd[i]-ung[j]>-ver);
}
int main ()
{
fin>>n;m=2*n;
for(i=1;i<=n;i++)
{
fin>>x1>>y3>>x2>>y2;
st=atan2(y3,x1);
if(st<0) st+=2*P;
dr=atan2(y2,x2);
if(dr<0) dr+=2*P;
v[i*2-1]=st;v[i*2]=dr;
if(st-dr>ver) swap(st,dr);
segs[i]=st;segd[i]=dr;
}
sort(v+1,v+m+1);
for(i=1;i<m;i++) ung[i]=(v[i]+v[i+1])/2;
ung[m]=2*P-ver;
for(i=1;i<=n;i++) for(j=1;j<=m;j++)
a[i][j]=verif();
for(i=1;i<=n;i++) fin>>a[i][m+1];
x=1;y=1;
while(x<=n&&y<=m)
{
for(i=x;i<=n;i++) if(a[i][y]!=0) break;
if(i==n+1)
{
y++;
continue;
}
if(i!=x) for(j=1;j<=m+1;j++)
swap(a[x][j],a[i][j]);
for(i=x+1;i<=n;i++)
if(a[i][y])
for(j=y;j<=m+1;j++)
a[i][j]^=a[x][j];
x++;y++;
}
int nr=0;
for(i=n;i>=1;i--)
{
for(j=1;j<=m+1;j++) if(a[i][j]) break;
if(j==m+2) continue;
if(j==m+1) fout<<2/0;
sol[j]=a[i][m+1];
for(t=j+1;t<=m;t++)
sol[j]^=sol[t]*a[i][t];
if(sol[j]==1) nr++;
}
fout<<nr<<"\n";
for(i=1;i<=m;i++)
if(sol[i]==1) fout<<fixed<<setprecision(6)<<ung[i]/P*180<<"\n";
return 0;
}