uva1504(模拟+暴力)
生活随笔
收集整理的這篇文章主要介紹了
uva1504(模拟+暴力)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題意:
給出第一象限的n個(gè)矩形的左下角坐標(biāo)和右上角坐標(biāo),我們先把所有矩形向下移動(dòng),直至所有矩形都不能移動(dòng),然后把所有矩形都向左移動(dòng),直至所有矩形都不能移動(dòng),如此往復(fù),直至所有矩形都不能移動(dòng),問最后所有矩形能覆蓋到的x和y的最大值。
思路:
最開始以為是線段樹,不知道該怎么寫,而且巨麻煩,后來旁邊的喪失說暴力。。。暴力!!!
那就暴力吧,我們每次對(duì)所有矩形進(jìn)行移動(dòng)的時(shí)候先對(duì)矩形進(jìn)行排序,第一次移動(dòng)按y排序,第二次按x排序,第三次按y排序。。。如此往復(fù),直到所有矩形都不能動(dòng),輸出答案即可。
代碼:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<vector> #include<map> #include<stack> #include<cmath> #include<cstdlib> #include<climits> #include<sstream>using namespace std;struct REC {int x1,x2,y1,y2; }rec[600];int cmp1(REC a,REC b) {if(a.y1==b.y1)return a.x1<b.x1;return a.y1<b.y1; }int cmp2(REC a,REC b) {if(a.x1==b.x1)return a.y1<b.y1;return a.x1<b.x1; }int main() {int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d%d%d",&rec[i].x1,&rec[i].y1,&rec[i].x2,&rec[i].y2);rec[0].x1=0;rec[0].y1=0;rec[0].x2=0;rec[0].y2=0;for(int i=1;;i++){int flag=0;if(i%2){sort(rec,rec+1+n,cmp1);for(int j=1;j<=n;j++){int tx1=rec[j].x1;int tx2=rec[j].x2;// printf("x= %d %d\n",tx1,tx2);int ymax=0;for(int k=0;k<j;k++){int lx1=rec[k].x1;int lx2=rec[k].x2;if(lx1>=tx2||lx2<=tx1)continue;else ymax=max(ymax,rec[k].y2);}// printf("ymax= %d\n",ymax);int sub=rec[j].y1-ymax;// printf("sub= %d\n",sub);if(sub>0){rec[j].y1-=sub;rec[j].y2-=sub;flag=1; // puts("-------------1");}}}else{sort(rec,rec+1+n,cmp2);for(int j=1;j<=n;j++){int ty1=rec[j].y1;int ty2=rec[j].y2;int xmax=0;for(int k=0;k<j;k++){int ly1=rec[k].y1;int ly2=rec[k].y2;if(ly1>=ty2||ly2<=ty1)continue;else xmax=max(xmax,rec[k].x2);}int sub=rec[j].x1-xmax;if(sub>0){rec[j].x1-=sub;rec[j].x2-=sub;flag=1; // puts("-------------2");}}}// for(int j=1;j<=n;j++)// printf("%d %d %d %d\n",rec[j].x1,rec[j].y1,rec[j].x2,rec[j].y2);// puts("-----------------------------");if(flag==0)break;}int xmax=-1,ymax=-1;for(int i=1;i<=n;i++){xmax=max(xmax,rec[i].x2);ymax=max(ymax,rec[i].y2);}printf("%d %d\n",xmax,ymax);}return 0; }總結(jié)
以上是生活随笔為你收集整理的uva1504(模拟+暴力)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu3695(AC自动机)
- 下一篇: uva1505(暴力)