Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
对拍了100组依旧WA。。。各种数据全过。。跪烂、、求数据。。附程序。。。//2次dp 做法还是挺难想的 # include<stdio.h> # include<iostream> # include<string.h> # include<algorithm> using namespace std; int zero; bool iszero; char t; int n; int dp[100],f[100],ansf[100],maxf1; char s[100]; char a[100],b[100]; int lena,lenb; void st_copy(char *a,int left,int right,int &x) { x=0; for(int i=left;i<=right;i++) a[x++]=s[i]; return; } int compare_big(char *a,char *b) { int firsta=0,firstb=0; while(firsta<lena&&a[firsta]=='0') firsta++; while(firstb<lenb&&b[firstb]=='0') firstb++; /* if(lena-firsta!=lenb-firstb) return lena-firsta>lenb-firstb?1:-1;*/ if(lena-firsta>lenb-firstb) return 1; else if(lena-firsta<lenb-firstb) return -1; for(;firsta<lena;firsta++,firstb++) { if(a[firsta]==b[firstb]) continue; return a[firsta]>b[firstb]?1:-1; } return 0; } int main() { //freopen("in.txt","r",stdin); for(;;) { zero=0;n=0; iszero=true; while((t=getchar())&&(t<'0'||t>'9')) {} while((t>='0'&&t<='9')) { if(iszero&&t=='0') { zero++; } else { iszero=false; s[++n]=t; } t=getchar(); } //printf("n:%d zero:%d\n",n,zero); if(n==0&&zero==1) {//printf("end\n"); break;} dp[0]=0; for(int i=1;i<=n;i++) { dp[i]=0; for(int j=i-1;j>0;j--) { st_copy(a,j+1,i,lena); st_copy(b,dp[j]+1,j,lenb); //puts(a);puts(b); //bool t=; //printf("t:%d\n",t); if(compare_big(a,b)>0) { dp[i]=j; break; } } //printf("dp[%d]:%d\n",i,dp[i]); } maxf1=0;bool first=true; while(s[dp[n]+1]=='0'||first) { //printf("aaa"); first=false; f[dp[n]+1]=n; for(int i=dp[n];i>=1;i--) { int j; if(i==dp[n]) j=dp[n]; else j=f[i+1]; for(;j>=i;j--) { st_copy(a,i,j,lena); st_copy(b,j+1,f[j+1],lenb); //puts(a);puts(b); int t=compare_big(a,b); //printf("i:%d j:%d t:%d\n",i,j,t); if(t<0) { f[i]=j; break; } } //printf("f[%d]:%d\n",i,f[i]); } //printf("dp[%d]:%d\n",n,dp[n]); if(f[1]>maxf1) {maxf1=f[1]; for(int i=1;i<=n;i=f[i]+1) ansf[i]=f[i]; } dp[n]--; } int temp; temp=1; for(int i=1;i<=zero;i++) printf("0"); while(ansf[temp]!=n) { for(int i=temp;i<=ansf[temp];i++) printf("%c",s[i]); printf(","); temp=ansf[temp]+1; } for(int i=temp;i<=ansf[temp];i++) printf("%c",s[i]); printf("\n"); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator