1 条题解
-
0
C++ :
#include <cstdio> #include <cstring> using namespace std; const int N(83); int a[N]={0},f[N]={0},num[N][N]={0},last,end; bool flag[N]={0}; void init() { char *s=new(char); scanf("%s",s); for(int i=0;s[i];i++) a[i+1]=s[i]-'0',a[0]=i+1; for(int i=1;i<=a[0];i++) for(int j=i;j<=a[0];j++) num[i][j]=num[i][j-1]*10+a[j]; } void solve() { f[0]=-1; for(int i=2;i<=a[0];i++) for(int j=i-1;j>=0;j--) if(num[j+1][i]>num[f[j]+1][j]) { f[i]=j; break; } last=num[f[a[0]]+1][a[0]]; end=f[a[0]]; memset(f,0,sizeof(f)); f[0]=-1; for(int i=2;i<=end;i++) for(int j=0;j<i;j++) if(num[f[j]+1][j]<num[j+1][i]&&num[j+1][i]<last) { f[i]=j; break; } int x=end; while(x) { flag[x]=true; x=f[x]; } } void print() { for(int i=1;i<=a[0];i++) { printf("%d",a[i]); if(flag[i]) printf(","); } printf("\n"); } int main() { init(); solve(); print(); return 0; }
- 1
信息
- ID
- 769
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者