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 |
谁能帮我出一组数据啊!~~~~~~现在找到的数据还没有错误,但是老WA,我这个题目做法是查找可能的的差值,最后最长时间为(总和+差值)/2,以下是代码,多谢了! #include<stdio.h> #include<memory.h> #include<string.h> struct node { char color[20]; int useti[100]; }clo[10]; int i,m,n,val,ans,t,use[100002],mid[100002]; char str[20]; bool get[100001]; int Findcolor() { int i; for (i=0;i<m;i++) if (!strcmp(str,clo[i].color)) return i; } int oper(int x) { int i,j,h,sum; if (clo[x].useti[0]==0) return 0; use[0]=1;use[1]=clo[x].useti[1];sum=use[1]; for (i=2;i<=clo[x].useti[0];i++) { memset(get,false,sizeof(get)); mid[0]=0;h=clo[x].useti[i];sum+=h; for (j=1;j<=use[0];j++) { if (!get[use[j]+h]) { mid[++mid[0]]=use[j]+h; get[use[j]+h]=true; } if (use[j]>=h&&!get[use[j]-h]) { mid[++mid[0]]=use[j]-h; get[use[j]-h]=true; } if (use[j]<h&&!get[h-use[j]]) { mid[++mid[0]]=h-use[j]; get[h-use[j]]=true; } } for (j=0;j<=mid[0];j++) use[j]=mid[j]; } for (i=0;;i++) if (get[i]) break; return (sum+i)>>1; } int main() { while (scanf("%d%d",&m,&n)&&(m||n)) { for (i=0;i<m;i++) { scanf("%s",&clo[i].color); clo[i].useti[0]=0; } for (i=0;i<n;i++) { scanf("%d%s",&val,&str); t=Findcolor(); clo[t].useti[++clo[t].useti[0]]=val; } ans=0; for (i=0;i<m;i++) ans+=oper(i); printf("%d\n",ans); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator