Pagini recente » Cod sursa (job #1707579) | Cod sursa (job #212480) | Cod sursa (job #805130) | algoritmiada-2019/runda-maraton/solutii/pisica | Cod sursa (job #415419)
Cod sursa(job #415419)
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
const char iname[]="poligon.in";
const char oname[]="poligon.out";
const int maxn=1605;
ifstream f(iname);
ofstream g(oname);
struct point
{
int x;
int y;
point(int _x,int _y):x(_x),y(_y){}
point():x(0),y(0){}
} a[maxn],b[maxn];
ifstream& operator>>(ifstream &a,point &b)
{
a>>b.x;
a>>b.y;
return a;
}
bool operator<(const point& a,const point& b)
{
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
struct line
{
point a;
point b;
line(point _a,point _b):a(_a),b(_b){}
line(int _ax,int _ay,int _bx,int _by):a(_ax,_ay),b(_bx,_by){}
};
long long area(point a,point b,point c)
{
return 1LL*a.x*(b.y-c.y)+1LL*b.x*(c.y-a.y)+1LL*c.x*(a.y-b.y);
}
vector<line> E[maxn];
bool operator<(const line &a,const line& b)
{
return area(a.a,a.b,b.b)>=0;
}
int i,j,n,m,x,y;
int main()
{
//read&sort
f>>n>>m;
for(i=1;i<=n;++i)
f>>a[i],b[i]=a[i];
sort(b+1,b+n+1);
b[0].x=-1;
b[n+1].x=70000;
//benzi
a[0]=a[n];
for(i=0;i<n;++i)
if(a[i].x!=a[i+1].x)
for(j=1;j<=n;++j)
if((a[i].x<=b[j].x&&a[i+1].x>=b[j+1].x)||(a[i+1].x<=b[j].x&&a[i].x>=b[j+1].x))
E[j].push_back(line(min(a[i],a[i+1]),max(a[i],a[i+1])));
for(i=0;i<=n;++i)
E[i].push_back(line(-1,-1,70000,-1));
for(i=0;i<=n;++i)
sort(E[i].begin(),E[i].end());
f.close();
g.close();
return 0;
}