@994495jj
2017-08-14T11:30:32.000000Z
字数 1814
阅读 704
201708 (ACM)几何
#include<bits/stdc++.h>using namespace std;#define fi first#define se second#define mp make_pair#define pb push_back#define sz(a) (int)a.size()#define rep(i, a, b) for(int i=(a); i<(b); i++)#define de(a) cout<<#a<<" = "<<a<<endl#define x(a) a.x#define y(a) a.ytypedef long long ll;typedef double db;typedef pair<int, int> pii;typedef vector<int> vi;//----const int N=105;const db eps=1e-5;int sign(db x) {return (x>eps)-(x<-eps);}int n;int pre[N];db x[N],y[N],z[N];struct P {db x,y;P() {}P(db x, db y) {this -> x = x;this -> y = y;}P operator + (const P &c) const {return P(x + c.x, y + c.y);}P operator - (const P &c) const {return P(x - c.x, y - c.y);}};struct S {int r;P a[2],b[2],c[6][6];}ss[N];P read() {db x,y;scanf("%lf%lf",&x,&y);return P(x,y);}db abs(P a) {return sqrt(x(a) * x(a) + y(a) * y(a));}db cross(P a, P b) {return x(a) * y(b) - x(b) * y(a);}int find(int x) {if(x==pre[x]) return x;return pre[x]=find(pre[x]);}void join(int x,int y) {int fx=find(x),fy=find(y);pre[fx]=fy;}void gao(int u) {S &t = ss[u];db a=abs(t.a[0]-t.a[1]);db b=abs(t.b[0]-t.b[1]);y[u]=a*b;rep(i,0,t.r) {x[u]=x[u]+fabs(cross(t.c[i][0]-t.c[i][1], t.c[i][2]-t.c[i][1]));}z[u]=x[u]/y[u];}bool eq(int u,int v) {return sign(z[u]-z[v])==0;}int main(){///scanf("%d",&n);///initrep(i,0,n+1) pre[i]=i;///readrep(i,1,n+1) {ss[i].a[0]=read();ss[i].a[1]=read();ss[i].b[0]=read();ss[i].b[1]=read();scanf("%d",&ss[i].r);rep(j,0,ss[i].r) {rep(k,0,4) {ss[i].c[j][k]=read();}}}///solverep(i,1,n+1) gao(i);rep(i,1,n+1) {rep(j,i+1,n+1) {if(eq(i,j)) join(i,j);}}rep(i,1,n+1) printf("%d%c",find(i),(i==n)?'\n':' ');return 0;}
