首页 > USACO题解 > USACO Greedy Gift Givers

USACO Greedy Gift Givers

USACO Greedy Gift Givers一题在于处理好字符串的查找工作,感觉C写起来有点别扭,于是用了C++里面的map来简单实现。分析给出的代码是自己用C实现了一个字符串的简单处理操作。下面是我的解题代码(另外我发现map里面用char*竟然出错了,正在寻找答案):

/*
	ID:stackex1
	LANG:C++
	PROG:gift1
*/
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <map>
#include <string>
using namespace std;

map<string, int> name2num;

typedef struct TagPeople
{
	string name;
	int init;
	int final;
}People;

People p[20];

int main(int argc, char **argv)
{
	int n, i, j, init, num;
	char name[20];
	
	FILE *fin = fopen("gift1.in", "r");
	FILE *fout = fopen("gift1.out", "w");
	
	fscanf(fin, "%d%*c", &n);
	for(i = 0; i < n; ++i)
	{
		fscanf(fin, "%s", name);
		(p[i].name).assign(name);
		name2num[p[i].name] = i;
		p[i].init = p[i].final = 0;
	}
	
	while(fscanf(fin, "%s", name) != EOF)
	{
		fscanf(fin, "%d %d%*c", &init, &num);
		p[name2num[name]].init = init;
		if(num == 0)
		{
			p[name2num[name]].final += init;
			continue;
		}
		p[name2num[name]].final += init % num;
		for(j = 0; j < num; ++j)
		{
			fscanf(fin, "%s", name);
			p[name2num[name]].final += init / num;
		}
	}
	
	for(i = 0; i < n; ++i)
	{
		fprintf(fout, "%s %d\n", p[i].name.c_str(), p[i].final - p[i].init);
	}
	
	return 0;
}


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> USACO Greedy Gift Givers
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: USACO题解 标签: , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.