POJ 1151
剛看了這道題目完全沒(méi)思路,在網(wǎng)上找了結(jié)題報(bào)告,了解到需用離散化+線段樹(shù)+掃描,但菜鳥(niǎo)一個(gè),發(fā)現(xiàn)數(shù)據(jù)規(guī)模并不大,用離散化完全可以,所以只用了離散化,思路還是很清晰的,但還是貢獻(xiàn)了5個(gè)小時(shí),15次wa,糾結(jié)過(guò)后發(fā)現(xiàn)x,y數(shù)組我是從1開(kāi)始計(jì)數(shù)的,但sort 的時(shí)候卻是從0開(kāi)始sort,結(jié)果導(dǎo)致身心煎熬了n小時(shí),粗心惹的禍啊
//離散化求解!!!! #include <iostream> #include <algorithm> using namespace std; const int maxn=210; double x[maxn],y[maxn]; int vis[maxn][maxn]; int n; struct node {double x1,y1,x2,y2; }map[101]; int main() {int t=0;while(scanf("%d",&n)&&n!=0){memset(vis,0,sizeof(vis));t++;double tot=0.0;int i,j=1;for(i=1;i<=n;i++){cin>>map[i].x1>>map[i].y1;x[j]=map[i].x1;y[j]=map[i].y1;j++;cin>>map[i].x2>>map[i].y2;x[j]=map[i].x2;y[j]=map[i].y2;j++;}int i1,i2,j1,j2;sort(x+1,x+2*n+1);sort(y+1,y+2*n+1);for(int k=1;k<=n;k++){for(i1=1;i1<=2*n;i1++){if(x[i1]==map[k].x1) break;}for(i2=1;i2<=2*n;i2++){if(x[i2]==map[k].x2) break;}for(j1=1;j1<=2*n;j1++){if(y[j1]==map[k].y1) break;}for(j2=1;j2<=2*n;j2++){if(y[j2]==map[k].y2) break;}for(i=i1;i<i2;i++){for(j=j1;j<j2;j++){vis[i][j]=1;}}}for(i=1;i<2*n;i++) {for(j=1;j<2*n;j++){tot+=vis[i][j]*(x[i+1]-x[i])*(y[j+1]-y[j]);}}printf("Test case #%d\n",t);printf("Total explored area: %.2f\n",tot);printf("\n");}return 0; }
?
轉(zhuǎn)載于:https://www.cnblogs.com/lj-vs-lishimin/archive/2012/09/25/2774383.html
總結(jié)
- 上一篇: iPhone比小米贵3000,贵在哪里?
- 下一篇: struts2对action的指定方法进