Codeforces 387C George and Number

来源:互联网 发布:淘宝cf代练 编辑:程序博客网 时间:2024/06/06 00:59

题意:

给你一串数字,问你如何划分这些数字,使其按严格递减顺序,划分完后的数字个数最多是多少个。

思路:

由于不能有前导0,所以我们先把所有的数字单独划分出来。然后从头开始,枚举每一个数,并维护Max,若该数小于Max,则该数可以独立,ans++,并合并到Max中(由于题目所给的操作是允许不同数合并后成为新数去比较的),否则该数要和之前所有的数都合并,ans=1。注意:由于所给数字太大,得用字符串存放,这里得自己写一个字符串的比较函数cmp。

#include<iostream>#include<cstring>#include<string>using namespace std;const int MAX=100005;string s,a[MAX];bool cmp(string a,string b){int lena=a.size();int lenb=b.size();if(lena<lenb) return false;else if(lena>lenb) return true;else{for(int i=0;i<lena;i++){if(a[i]>b[i]) return true;if(a[i]<b[i]) return false;}}return true;}int main(){cin>>s;int len=s.size(),cnt=0;for(int i=0;i<len;i++){a[cnt]+=s[i];while(s[i+1]=='0'){a[cnt]+=s[i+1];i++;}cnt++;}/*for(int i=0;i<cnt;i++){cout<<a[i]<<endl;}*/string Max=a[0];int ans=1;for(int i=1;i<cnt;i++){//cout<<i<<" "<<Max<<endl;if(cmp(Max,a[i])) ans++;else ans=1;Max+=a[i];}cout<<ans<<endl;return 0;}


0 0
原创粉丝点击