(codeforces)D. Cloud of Hashtags

来源:互联网 发布:淘宝店邮费一般多少 编辑:程序博客网 时间:2024/06/06 06:57

どれでもドア:http://codeforces.com/problemset/problem/777/D

水题:删除其中一些字符串的一段连续的字符(必须是一直删除到结尾),使每个字符串按照字典序排序后,与输入时的位置相同。
方法:倒着两个两个比较,前面字符串的比后面的大的话就删除前者一段字符串,
删除时用二分查找删除字符数最少的位置。

CODE:

void change(string &str1,string &str2){    int l=1,r=str1.length(),mid;    string s;    while(r-l>1){        s=str1;        mid=l+(r-l)/2;        if(s.erase(mid)<str2){            l=mid;        }        else if(s.erase(mid)>str2){            r=mid;        }        else {            l=mid+1;            break;        }    }    s=str1;    if(s.erase(l)<=str2)        str1.erase(l);    else        str1.erase(l-1);}string str[MAX];int main(){    int n;    cin>>n;    for(int i=0;i<n;i++)        cin>>str[i];    for(int i=n-1;i>0;i--){        if(str[i-1]>str[i]){            change(str[i-1],str[i]);        }    }    for(int i=0;i<n;i++){        cout<<str[i]<<endl;    }    return 0;}
0 0