今天做完百度acm的题,群里几个人在讨论各个学校的acm队伍、学习等。说到一起做USACO Training上的题目。我遍开始做了,以为这个网站是训练,是一个循序渐进的过程。做到Greedy Gift Givers这个题目,学到很多东西,记录一下。
这个题目很简单,不需要神马高深的算法,主要学到许多c语言的用法,先上我自己写的代码。


/*
ID:
LANG:C
TASK:gift1
*/
#include
struct gift
{
char name[15];
int get;
int give;
}g[10];
int main()
{FILE *fin=fopen("gift1.in","r");
FILE *fout=fopen("gift1.out","w");
int i,np;
fscanf(fin,"%d",&np);
for(i=0;i{
fscanf(fin,"%s",g[i].name);
g[i].get=0;
g[i].give=0;
}
for(i=0;i{char s[15];
int a,b,j;
fscanf(fin,"%s",s);
fscanf(fin,"%d %d",&a,&b);
//fprintf(fout,"%d %d\n",a,b);
for(j=0;j{
if(!strcmp(g[j].name,s))
if(b!=0)
g[j].give=a-a%b;
//fprintf(fout,"%d",g[j].give);
}
for(j=0;j{
fscanf(fin,"%s",s);
int k;
for(k=0;k{
if(!strcmp(g[k].name,s))
if(b!=0)
g[k].get+=a/b;
}
}
}
for(i=0;i{
fprintf(fout,"%s %d\n",g[i].name,g[i].get-g[i].give);
}

return 0;
}


这里学到的几点:
结构体里的get和give可以只用一个最后结果表示就行。
我自己写的查找字符串的操作遍历了结构图数组所有元素,可以直接break退出循环,看别人写的代码用while很好,记录下。

j=0;
while(strcmp(a[j],b)) j++;

上一篇:
下一篇:

相关文章:

Categories: 博客记录

0 Responses so far.

Leave a Reply