2007浙大上机复试解题报告

    技术2022-05-19  21

    更详细的解题报告请下载:http://download.csdn.net/source/3153210

    包括2005-2011,有些题目有多种解法!

    http://acm.hdu.edu.cn/showproblem.php?pid=1859

     #include<stdio.h> int main() { int min_x,min_y; int max_x,max_y; int x,y; while(scanf("%d %d",&x,&y)!=EOF&&(x*x+y*y)!=0) { max_x=min_x=x; max_y=min_y=y; while(1) { scanf("%d %d",&x,&y); if(x==0&&y==0) { printf("%d %d %d %d/n",min_x,min_y,max_x,max_y); break; } else { if(max_x<x)max_x=x; if(max_y<y)max_y=y; if(min_x>x)min_x=x; if(min_y>y)min_y=y; } } } return 0; }

    http://acm.hdu.edu.cn/showproblem.php?pid=1860

     #include<stdio.h> #include<string.h> int main() { char str1[10]; char str2[100]; while(1) { gets(str1); if(strcmp(str1,"#")==0)break; gets(str2); int len1,len2; len1=strlen(str1); len2=strlen(str2); int i,j; for(i=0;i<len1;i++) { int num=0; for(j=0;j<len2;j++) { if(str1[i]==str2[j])num++; } printf("%c %d/n",str1[i],num); } } }

    http://acm.hdu.edu.cn/showproblem.php?pid=1861

     #include<stdio.h> struct B { int flag; int s; int t; }b[105]; int main() { int sum=0; int num=0; int Tb; char op; int i; for(i=1;i<=100;i++) b[i].flag=0; int h,m; int temp; while(1) { scanf("%d",&Tb); if(Tb==-1)break; scanf("%*c%c",&op); scanf("%d%*c%d",&h,&m); temp=h*60+m; if(Tb==0) { if(num==0) printf("0 0/n"); else { int ans=sum*10/num; if(ans>=5) ans=sum/num+1; else ans=sum/num; printf("%d %d/n",num,ans); } sum=0; num=0; for(i=1;i<=100;i++) b[i].flag=0; } else { if(op=='S') { b[Tb].s=temp; b[Tb].flag=1; } else { if(b[Tb].flag==1) { num++; sum+=(temp-b[Tb].s); b[Tb].flag=0; } } } } return 0; }

    http://acm.hdu.edu.cn/showproblem.php?pid=1862

     #include<stdio.h> #include<string.h> #include<stdlib.h> struct S { int num; char name[10]; int g; }s[100005]; int cmp1(const void *a,const void *b) { struct S *c=(S *)a; struct S *d=(S *)b; return c->num-d->num; } int cmp2(const void *a,const void *b) { struct S *c=(S *)a; struct S *d=(S *)b; if(strcmp(c->name,d->name)==0) { return c->num-d->num; } else return strcmp(c->name,d->name); } int cmp3(const void *a,const void *b) { struct S *c=(S *)a; struct S *d=(S *)b; if(c->g==d->g) { return c->num-d->num; } else return c->g-d->g; } int main() { int Tnum; char Tname[10]; int Tg; int N,C; int k=0; while(1) { scanf("%d %d",&N,&C); if(N==0)break; int i; for(i=1;i<=N;i++) { scanf("%d%*c%s%d",&Tnum,&Tname,&Tg); s[i].num=Tnum; strcpy(s[i].name,Tname); s[i].g=Tg; } if(C==1) { qsort(s+1,N,sizeof(s[1]),cmp1); } else if(C==2) qsort(s+1,N,sizeof(s[1]),cmp2); else qsort(s+1,N,sizeof(s[1]),cmp3); printf("Case %d:/n",++k); for(i=1;i<=N;i++) printf("%.6d %s %d/n",s[i].num,s[i].name,s[i].g); } return 0; }

    http://acm.hdu.edu.cn/showproblem.php?pid=1863

     #include<stdio.h> #include<stdlib.h> int p[105]; int N,M; struct E { int a,b; int dis; }e[10000]; void init() { int i; for(i=1;i<=N;i++) { p[i]=i; } } int find(int a) { if(a==p[a]) return a; else return find(p[a]); } void Union(int x,int y) { int a=find(x); int b=find(y); p[a]=b; } int cmp(const void *a,const void *b) { return ((E *)a)->dis-((E *)b)->dis; } int main() { while(1) { scanf("%d %d",&M,&N); if(M==0)break; init(); int i; int sum=0; for(i=1;i<=M;i++) { scanf("%d %d %d",&e[i].a,&e[i].b,&e[i].dis); } int T=N-1; int k=1; qsort(e+1,M,sizeof(e[1]),cmp); while(1) { if(k==M+1) { printf("?/n"); break; } if(find(e[k].a)!=find(e[k].b)) { Union(e[k].a,e[k].b); sum+=e[k].dis; // printf("%d/n",sum); T--; if(T==0)break; } k++; } if(k!=M+1)printf("%d/n",sum); } return 0; }

    http://acm.hdu.edu.cn/showproblem.php?pid=1864

     #include<stdio.h> #include<stdlib.h> double ans; double max; double Q; int num_i; int num[40]; int dp[3000005]; int cmp(const void *a,const void *b) { return ((*(int *)a)-(*(int *)b)); } int main() { int N; while(scanf("%lf %d",&Q,&N)!=EOF&&N!=0) { int i; num_i=0; for(i=1;i<=N;i++) { int K; scanf("%d",&K); int T[5]={0}; char C; int flag=1; double temp; while(K--) { scanf("%*c%c",&C); if(flag==1&&C=='A') { scanf("%*c%lf",&temp); T[1]+=(int)(temp*100); } else if(flag==1&&C=='B') { scanf("%*c%lf",&temp); T[2]+=(int)(temp*100); } else if(flag==1&&C=='C') { scanf("%*c%lf",&temp); T[3]+=(int)(temp*100); } else { flag=0; scanf("%*c%lf",&temp); } }//while if(T[1]<=60000&&T[2]<=60000&&T[3]<=60000&&(T[1]+T[2]+T[3])<=100000&&flag==1) { num[++num_i]=T[1]+T[2]+T[3]; } }//for qsort(num+1,num_i,sizeof(num[1]),cmp); dp[0]=1; int q=(int)(Q*100); //if(q>900000)q=900000; for(i=1;i<=q;i++) dp[i]=0; int j; for(i=1;i<=num_i;i++) { for(j=q;j>=num[i];j--) if(dp[j-num[i]]==1) dp[j]=1; } for(i=q;i>=0;i--) if(dp[i]==1)break; max=i/100.0; printf("%.2lf/n",max); } return 0; }

     

    以上代码并不是最优,贴出来只为与广大研友交流!有需要提供个别题目具体思路的请留言!


    最新回复(0)