Cod sursa(job #2785259)

Utilizator stefantagaTaga Stefan stefantaga Data 18 octombrie 2021 12:50:39
Problema Laser Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <bits/stdc++.h>
#define PI 3.14159265
using namespace std;
ifstream f("laser.in");
ofstream g("laser.out");
bitset < 1024 > din[1024];
int n,x,y,x2,y2,i,m,j,poz,fr[1024];
long double unghi,unghi2;
pair <long double,long double> ceau[1024];
vector <long double> v,bisect;
int main()
{
    f>>n;
    for (i=1;i<=n;i++)
    {
        f>>x>>y>>x2>>y2;
        unghi = atan2(y,x) * 180 / PI;
        unghi2 = atan2(y2,x2) * 180 / PI;
        if (unghi<0)
        {
            unghi+=360;
        }
        if (unghi2<0)
        {
            unghi2+=360;
        }
        if (unghi>unghi2)
        {
            swap(unghi,unghi2);
        }
        ceau[i]={unghi,unghi2};
        v.push_back(unghi);
        v.push_back(unghi2);
    }
    sort (v.begin(),v.end());
    m=v.size();
    for (i=0;i<m-1;i++)
    {
        bisect.push_back((v[i]+v[i+1]/2));
    }
    bisect.push_back((v[0]+360+v[m-1])/2);
    if (bisect.back()>360)
    {
        bisect.back()-=360;
    }
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
        {
            din[i][j]=(ceau[i].first<=bisect[j-1]&&bisect[j-1]<=ceau[i].second);
        }
        bool x;
        f>>x;
        din[i][j+1]=x;
    }
    for (i=1;i<=n;i++)
    {
        poz=0;
        j=0;
        for (j=1;j<=m+1;j++)
        {
            if (din[i][j]!=0)
            {
                poz=j;
                break;
            }
        }
        if (j==m+2)
        {
            continue;
        }
        fr[poz]++;
        for (j=1;j<=n;j++)
        {
            if (din[j][poz]!=0)
            {
                din[j]^=din[i];
            }
        }
    }
    vector <long double> sol;
    for (j=1;j<=m;j++)
    {
        if (fr[j]!=0)
        {
            sol.push_back(bisect[j-1]);
        }
    }
    g<<sol.size()-1<<'\n';
    for (i=0;i<sol.size();i++)
    {
        g<<sol[i]<<'\n';
    }
    return 0;
}