CodeForces 387C George and Number

来源:互联网 发布:特朗普访华意义知乎 编辑:程序博客网 时间:2024/05/29 18:36

题意:

在数组里任选两个数字  将大的数字在前小的在后拼成一个数字(如:31和20 拼成3120)  这样往复的做  直到数组就剩一个元素  现给你这个最后的元素  问  数组最初最多能有多少个元素


思路:

明显的贪心  因为每次找两个数字去拼成一个大数字  所以我可以第一步拼成一个大数字  然后用这个数字当接下来选的两个数字中的大数字再拼  然后再选它当大数字再拼直到最后

因此贪心的去拼数字  其实就是扫一遍数组  如果能扫到末尾答案就出来了  如果中间发现前面的数字小了  其实说明你第一次拼的时候拼小了  更改开头重新拼即可


代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char a[100010];bool big(int s1,int s2){if(s1+1>s2-s1) return true;else if(s1+1<s2-s1) return false;int i,j;for(i=0,j=s1+1;i<=s1;i++,j++){if(a[i]>a[j]) return true;else if(a[i]<a[j]) return false;}return true;}int main(){char op;int i,j,k,len,ans=1;scanf("%s",a);len=strlen(a);for(i=0;i<len;i++){if(i+1<len&&a[i+1]=='0') continue;ans=1;k=i;for(j=k+1;j<len;j++){if(j+1<len&&a[j+1]=='0') continue;if(big(k,j)){ans++;k=j;}else break;}if(k==len-1) break;}printf("%d\n",ans);return 0;}


0 0
原创粉丝点击