题目大意:求最终有多少张海报可见。
题目思路:最近想写一下矩形切割,当然,对于这道题不是很适合,不过可以过。
[cpp] #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define inf 0x3f3f3f3f #define uint unsigned __int64 #define M 1000000 struct node { int p1,p2,co; }a[M],now; int used[10100],total; int judge(node a,node b) { if(a.p2b.p2) return 0; else return 1; } void cut(node tmp) { int k1,k2; k1=max(tmp.p1,now.p1); k2=min(tmp.p2,now.p2); if(tmp.p1 { a[++total]=tmp; a[total].p2=k1-1; } if(tmp.p2>k2) { a[++total]=tmp; a[total].p1=k2+1; } } int main() { int t,i,j,l,r,n; scanf("%d",&t); while(t--) { scanf("%d",&n); total=0; for(i=1;i<=n;i++) { scanf("%d%d",&l,&r); now.p1=l;now.p2=r;now.co=i; for(j=total;j>=1;j--) { if(judge(now,a[j])) { cut(a[j]); a[j]=a[total--]; } } a[++total]=now; } memset(used,0,sizeof(used)); int num=0; for(i=1;i<=total;i++) { if(!used[a[i].co]) { used[a[i].co]=1; num++; } } printf("%d\n",num); } }