此题属于被usaco分为杂题,即没有具体的现成的合适的算法,算法需要自己YY了。 杂题一般注重细节的考查,当然对于我这种菜鸟会出现各种细节的错误,是细节错误,不是bug,我编码能力很差,代码写完,改了三次才通过。错误之处代码注释里已标出。代码的前两处错误,主要在于写代码前没有想好程序的思路。写程序前一定要先把思路弄清楚再动手写。所有的题目有思路后必须将程序亲自写出,不能贴模板。 用fgets进行字符串读取提交时发生了超时
/*
ID: acmerfi1
PROG: gift1
LANG: C++
*/
#include <stdio.h>
#include <string.h>
#define MAX_ch 20
#define MAX_p 10000
typedef struct node
{
char name[MAX_ch];
int sum;
} person;
person p[MAX_p];
int main()
{
int n, sum, sum_p;
char NAME[MAX_ch];
freopen("gift1.in", "r", stdin);
freopen("gift1.out", "w",stdout);
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%s", p[i].name);
p[i].sum = 0;
}
for(int k = 0; k < n; k++)
{
scanf("%s", NAME);
scanf("%d%d", &sum, &sum_p);
for(int i = 0; i < n; i++)
{
if(0 == strcmp(NAME, p[i].name))
{
if(0 == sum_p) p[i].sum += sum; // 除数为0的情况没有考虑,出错
else p[i].sum -= (sum - sum % sum_p); // 写程序前想好具体算法 ,出错
break ;
}
}
for(int i = 0; i < sum_p; i++)
{
scanf("%s", NAME);
for(int j = 0; j < n; j++)
{
if(0 == strcmp(NAME, p[j].name))
{
p[j].sum += sum / sum_p;
break ; // break 写到了if的外边, 出错
}
}
}
}
for(int i = 0; i < n; i++)
{
printf("%s %d\n", p[i].name, p[i].sum);
}
return 0;
}