题意
http://codeforces.com/problemset/problem/387/C
从前向后找数(单个的或带零的),若从头开始的数大于当前数答案加一,可拆分,否则不可拆分,答案变成1
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<cmath>
#include<vector>
using namespace std;
#define MAX 200000
char num[MAX];
struct P
{
int s,t;
P(int a,int b)
{
s=a,t=b;
}
/*
bool operator < (const P &o) const
{
int d=t-s;
int td=o.t-o.s;
if(d!=td)
return d<td;
for(int i=0;i<=d;i++)
{
if(num[s+i]!=num[o.s+i])
return num[s+i]<num[o.s+i];
}
return false;
}
*/
bool operator <=(const P &o) const
{
int d=t-s;
int td=o.t-o.s;
if(d!=td)
return d<td;
for(int i=0;i<=d;i++)
{
if(num[s+i]!=num[o.s+i])
return num[s+i]<num[o.s+i];
}
return true;
}
};
int main()
{
scanf("%s",num);
int len=strlen(num);
int ans=1;
int i=0;
while(num[++i]=='0'&&i<len);
for(;i<len;i++)
{
int s;
int t;
if(num[i]!='0'&&num[i+1]!='0')
{
s=i;
t=i;
}
else
{
s=i;
t=i+1;
while(num[t]=='0'&&t<len)
t++;
t--;
i=t;
}
if(P(s,t)<=P(0,s-1))
ans++;
else
ans=1;
}
cout<<ans<<endl;
return 0;
}