您的位置:首页 > 其它

2008浙大上机复试解题报告

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

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

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

#include<stdio.h>
int main()
{
unsigned int A,B;
unsigned int M;
unsigned int ans[50];
while(1)
{
scanf("%d",&M);
if(M==0)break;
scanf("%d %d",&A,&B);
A=A+B;
int ans_i=0;
while(1)
{
if(A<M)
{
ans[++ans_i]=A;
break;
}
else
{
ans[++ans_i]=A%M;
A=A/M;
}
}
int i;
for(i=ans_i;i>=1;i--)
printf("%d",ans[i]);
printf("/n");

}
return 0;
}


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

#include<stdio.h>
int Node[1005];
int r[1005][1005];
int p[1005];
int N,M;

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);
if(a!=b)p[a]=b;
}

int main()
{

int x,y;
int i,j;

while(1)
{
scanf("%d",&N);
if(N==0)break;
scanf("%d",&M);
for(i=1;i<=N;i++)
Node[i]=0;
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
r[i][j]=0;
init();
int T=N-1;
for(i=1;i<=M;i++)
{
scanf("%d %d",&x,&y);

if(find(x)!=find(y))
{
Union(x,y);
T--;
}
r[x][y]=1;
Node[x]++;
Node[y]++;
}

for(i=1;i<=N;i++)
if(Node[i]%2!=0)break;
if(i==N+1&&T==0)printf("1/n");
else printf("0/n");
}

return 0;
}


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

#include<stdio.h>
#include<stdlib.h>
int r[100][100];
struct E
{
int a,b;
int dis;
}e[10000];

int p[100];
int N;

void init()
{
int i;
for(i=1;i<=N;i++)
{
p[i]=i;
}
}

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

void Union(int x,int y)
{
int a=find(x);
int b=find(y);
if(a!=b)p[a]=b;
}

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

int main()
{
while(1)
{
scanf("%d",&N);
if(N==0)break;
int i;
int flag;
for(i=1;i<=N*(N-1)/2;i++)
{
scanf("%d %d %d %d",&e[i].a,&e[i].b,&e[i].dis,&flag);
if(flag==1)e[i].dis=0;
}
qsort(e+1,N*(N-1)/2,sizeof(e[1]),cmp);
int T=N-1;
int e_i=1;
int sum=0;
init();
while(1)
{
if(find(e[e_i].a)!=find(e[e_i].b))
{
sum+=e[e_i].dis;
Union(e[e_i].a,e[e_i].b);
T--;
if(T==0)break;
}
++e_i;
}
printf("%d/n",sum);
}
return 0;

}


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

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

struct Ans
{
char A[30];
char B[90];
}ans[100005];

int main()
{
int K;
char TA[30];
int ans_i=0;
int i;
while(1)
{

scanf("%s",TA);
if(TA[0]=='@')break;
strcpy(ans[++ans_i].A,TA);
getchar();
gets(ans[ans_i].B);

}
scanf("%d",&K);
getchar();
char T[100];
while(K--)
{
gets(T);
if(T[0]=='[')
{
for(i=1;i<=ans_i;i++)
{
if(strcmp(ans[i].A,T)==0)
{
printf("%s/n",ans[i].B);
break;
}
}
if(i==ans_i+1)printf("what?/n");
}
else
{
for(i=1;i<=ans_i;i++)
{
if(strcmp(ans[i].B,T)==0)
{
int len=strlen(ans[i].A);
int j;
for(j=1;j<len-1;j++)
putchar(ans[i].A[j]);
printf("/n");

break;
}
}
if(i==ans_i+1)printf("what?/n");
}

}
return 0;
}


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

#include<iostream>
#include<algorithm>
using namespace std;

int N;
int dp[40][10005];
struct Node
{
int hp,use,left;
}node[40];

int mmax(int a,int b)
{
return a>b?a:b;
}

int cmp(const void *a,const void *b)
{
return (*(Node *)a).left-(*(Node *)b).left;
}
int main()
{
while(scanf("%d",&N)!=EOF&&N>0)
{
int i,j,k;
for(i=0;i<N;i++)
scanf("%d %d %d",&node[i].hp,&node[i].use,&node[i].left);
qsort(node,N,sizeof(node[0]),cmp);
memset(dp,0,sizeof(dp));
dp[0][node[0].use]=node[0].hp;
int ans=0;
for(i=1;i<N;i++)
{
for(j=0;j+node[i].use<=node[i].left;j++)
{
for(k=0;k<i;k++)
{
dp[i][j+node[i].use]=mmax(dp[k][j]+node[i].hp,dp[i][j+node[i].use]);
ans=mmax(ans,dp[i][j+node[i].use]);
}
}

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

}
return 0;
}


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