您的位置:首页 > 其它

2005浙大上机复试解题报告

2011-03-06 19:42 465 查看
更详细的解题报告请下载:http://download.csdn.net/source/3153210

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

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

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char Num[10][10]={"zero","one","two","three","four","five","six","seven","eight","nine"
};
int fun(char temp[])
{
int i;
for(i=0;i<10;i++)
{
if(strcmp(temp,Num[i])==0)
{
return i;

}
}
return 0;

}
int main()
{
char temp[10];
int left,right,sum;
int flag=0;
int Tflag=0;
while(scanf("%s",temp)!=EOF)
{

flag=0;
left=right=sum=0;
left=fun(temp);
while(scanf("%s",temp))
{

if(strcmp(temp,"=")==0)
{
if(left+right==0)Tflag=1;
else
{
printf("%d/n",left+right);
left=right=sum=0;
}
break;
}
if(strcmp(temp,"+")==0)
{
flag=1;
continue;
}
if(flag==0)
{
int T;
T=fun(temp);
left=left*10+T;

}
else
{
int T;
T=fun(temp);
right=right*10+T;

}
}
if(Tflag==1)break;

}

return 0;
}


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

#include<stdio.h>
int main()
{
int K;
int a[10005];
int dp[10005][3];
while(scanf("%d",&K)!=EOF&&K!=0)
{
int i;
int flag=1;
for(i=1;i<=K;i++)
{
scanf("%d",&a[i]);
if(a[i]>0)flag=3;
if(a[i]==0&&flag!=3)
{
flag=2;

}
}
if(flag==2)
{
printf("0 0 0/n");
continue;
}

else if(flag==1)
{
printf("0 %d %d/n",a[1],a[K]);
continue;
}
else
{

dp[1][1]=a[1];
dp[1][2]=1;
for(i=2;i<=K;i++)
{
if(a[i]>=0&&dp[i-1][1]>=0)
{
dp[i][1]=dp[i-1][1]+a[i];
dp[i][2]=dp[i-1][2];
}

if(a[i]<0&&dp[i-1][1]>=0)
{
dp[i][1]=a[i]+dp[i-1][1];
dp[i][2]=dp[i-1][2];
}
if(dp[i-1][1]<0)
{
dp[i][1]=a[i];
dp[i][2]=i;
}

}
int max=0;
int T;
for(i=1;i<=K;i++)
if(max<dp[i][1])
{
max=dp[i][1];
T=i;
}
printf("%d %d %d/n",max,a[dp[T][2]],a[T]);

}

}
return 0;
}


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

#include<stdio.h>
#include<stdlib.h>

int p[1002];

void set_init()
{
int i;
for(i=0;i<1002;i++)
p[i]=i;
}

int find_set(int a)
{
if (p[a]==a) return a;
else return p[a]=find_set(p[a]);
}

void SetUnion(int x,int y)
{
int a=find_set(x);
int b=find_set(y);
if(a==b)return ;
p[b]=a;

}

int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}

int main()
{

int N,K;

while(scanf("%d",&N)!=EOF&&N!=0)
{
scanf("%d",&K);
int i;
int s,t;

set_init();

for(i=1;i<=K;i++)
{
scanf("%d %d",&s,&t);

if(t!=s&&find_set(s)!=find_set(t))
{

SetUnion(s,t);
}
}

int ans[1002];

for(i=1;i<=N;i++)
ans[i]=find_set(i);

qsort(ans+1,N,sizeof(ans[1]),cmp);

int num=0;

for(i=2;i<=N;i++)
if(ans[i]!=ans[i-1])num++;

printf("%d/n",num);
}
return 0;
}


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

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct Ans
{
int  time;
char name[20];

}S_ans,E_ans;

int fun(char Temp[])
{
int ans=0;
int temp=0;
int i=0;
while(Temp[i]!='/0')
{
if(Temp[i]==':')
{
ans+=temp;
temp=0;
ans*=60;

}
else
{
temp=temp*10+(Temp[i]-48);
}
i++;
if(Temp[i]=='/0')
{
ans+=temp;
}
}
return ans;

}

int main()
{
int N;
int K;
int j;
scanf("%d",&N);
for(j=1;j<=N;j++)
{
scanf("%d",&K);
int i;
char Tname[20];
char Tstart[20];
char Tend[20];
int flag=0;
for(i=1;i<=K;i++)
{
scanf("%s%s%s",Tname,Tstart,Tend);
if(flag==0)
{
S_ans.time=fun(Tstart);
//printf("%d/n",S_ans.time);
strcpy(S_ans.name,Tname);

E_ans.time=fun(Tend);
//printf("%d/n",E_ans.time);
strcpy(E_ans.name,Tname);
flag=1;
}
else
{
int s=fun(Tstart);
int t=fun(Tend);
//printf("%d %d/n",s,t);
if(s<S_ans.time)
{
S_ans.time=s;

strcpy(S_ans.name,Tname);
}
if(t>E_ans.time)
{
E_ans.time=t;

strcpy(E_ans.name,Tname);

}
}

}
printf("%s %s/n",S_ans.name,E_ans.name);

}
return 0;
}


http://acm.hdu.edu.cn/showproblem.php?pid=1236
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct S
{
char name[30];
int g;
}s[1005];

int num[20];

int cmp(const void * a,const void * b)
{
struct S *c=(S *)a;
struct S *d=(S *)b;
if(c->g!=d->g)
return d->g-c->g;
else
return strcmp(c->name,d->name);
}

int main()
{
int N;
int T,F;
while(scanf("%d",&N)!=EOF&&N!=0)
{
scanf("%d %d",&T,&F);
int i;
for(i=1;i<=T;i++)
scanf("%d",&num[i]);
char Tname[30];

for(i=1;i<=N;i++)
{
scanf("%s",s[i].name);
int K;
scanf("%d",&K);
int j;
int temp;
int sum=0;
for(j=1;j<=K;j++)
{
scanf("%d",&temp);
sum+=num[temp];
}
s[i].g=sum;

}
qsort(s+1,N,sizeof(s[1]),cmp);
int ans=0;
for(i=1;i<=N;i++)
{
if(s[i].g>=F)ans++;
else break;

}
printf("%d/n",ans);

for(i=1;i<=ans;i++)
{
printf("%s %d/n",s[i].name,s[i].g);

}

}
return 0;
}


以上代码并不是最优,贴出来只为与广大研友交流!有需要提供个别题目具体思路的请留言!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: