离散化——HDOJ 1199

来源:互联网 发布:淘宝房产中介 编辑:程序博客网 时间:2024/06/07 01:15

HDOJ 1199 Color the Ball

/*HDOJ 1199先离散化,然后再搜索最长的白色区间只存白色区间,是黑的时候,处理过程要将各种情况分清楚。本体看起来就是可以用区间树的,可惜我还不会咯*/#include <iostream>#include <algorithm>using namespace std;struct white{int x;int y;}s[3000];bool cmp(white a,white b){if(a.x != b.x)return (a.x<b.x);elsereturn (a.y<b.y);}int main(){int N,a,b,i,j,temp,len,num;int ansa,ansb,anslen;char c;while(cin>>N){num=0;for(i=0;i<3000;i++){s[i].x = -1;s[i].y = -1;}for(i=0;i<N;i++){cin>>a>>b>>c;if(c == 'w'){s[num].x=a;s[num].y=b;num++;}else{temp=num;for(j=0;j<temp;j++){if((a <= s[j].x)&&(b >= s[j].y)){s[j].x=-1;s[j].y=-1;}else if((a <= s[j].x)&&(b >= s[j].x)&&(b <= s[j].y))s[j].x=b+1;else if((a >= s[j].x)&&(a <= s[j].y)&&(b >= s[j].y))s[j].y=a-1;else if((a >= s[j].x)&&(b <= s[j].y)){s[num].x=b+1;s[num].y=s[j].y;s[j].y=a-1;num++;}}}}sort(s,s+num,cmp);len=-1;anslen=-1;ansa=-1;ansb=-1;for(i=0;i<num;i++){if(s[i].x >= -1){a=s[i].x;b=s[i].y;len=b-a+1;i++;for(;i<num;i++){if(s[i].x <= (b+1)) //这里要为b+1,保证连续性{if(b < s[i].y)b=s[i].y;len=b-a+1;}else{if(len > anslen){ansa=a;ansb=b;anslen=len;}a=s[i].x;b=s[i].y;len=b-a+1;}}if(len > anslen){ansa=a;ansb=b;anslen=len;}break;}}if(anslen == -1)cout<<"Oh, my god"<<endl;elsecout<<ansa<<" "<<ansb<<endl;}return 0;}