比赛 咲 -Saki- 互测赛 评测结果 AAAAAAAAAA
题目名称 天才麻将少女什么编 最终得分 100
用户昵称 了反取字名我擦 运行时间 0.240 s
代码语言 C++ 内存使用 3.26 MiB
提交时间 2012-07-19 10:59:15
显示代码纯文本
#include<fstream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<list>

using namespace std;
ifstream fi("sakinani.in");
ofstream fo("sakinani.out");

string k;
struct P
{
	string name;
	string school;
	bool magic;
	int czg;
	
	void init()
	{
		magic=0;
		czg=0;
	}
	void appear(string k)
	{
		if(k==name)
			if(magic)
				czg+=2;
			else
				czg++;
	}
	void go_magic(string k)
	{
		if(k==name)
			magic=true;
	}
	void school_union(P p)
	{
		if(p.school==school)
		{
			p.school=k;
			czg+=p.czg;
			p.czg=0;
		}
	}
}people[201];
int main()
{
	int n,k;
	fi>>n;
	for(int i=0;i<n;i++)
		fi>>people[i].name>>people[i].school;
	fi>>k;
	string temp;
	for(int i=0;i<k;i++)
	{
		fi>>temp;
		for(int j=0;j<n;j++)
			people[j].go_magic(temp);
	}
	while(fi.peek()!=EOF)
	{
		fi>>temp;
		for(int i=0;i<n;i++)
			people[i].appear(temp);
	}
	for(int i=0;i<n;i++)
		for(int j=i+1;j<n;j++)
			people[i].school_union(people[j]);
	int max=0,maxi;;
	string ans;
	for(int i=0;i<n;i++)
	{
		if(people[i].czg>max)
		{
			ans=people[i].school;
			maxi=i;
			max=people[i].czg;
		}
		else
			if(people[i].czg==max&&people[i].school<people[maxi].school)
			{
				ans=people[i].school;
				maxi=i;
			}
	}
	fo<<ans;
	fi.close();
	fo.close();
	return 0;
}