比赛 20121106 评测结果 AAAAAAAAAAAA
题目名称 H 指数因子 最终得分 100
用户昵称 QhelDIV 运行时间 0.009 s
代码语言 C++ 内存使用 3.40 MiB
提交时间 2012-11-06 10:44:28
显示代码纯文本
#include <fstream>
#include <set>
#include <algorithm>
using namespace std;
ifstream fin("publish.in");
ofstream fout("publish.out");
int N,M,Sum[101],H[101],Count[101][101],SC[101][101],pos[101][101];
string Si[101],Name[101];
set<string>Set;
class Ans
{
public:
	string name;
	int Value;
}Out[101];
void Initialize()
{
int i,j;char c;
	fin>>N;
	for(i=1;i<=N;i++)
	{
		fin>>Si[i];
		if(Set.find(Si[i])==Set.end())
		{
			Set.insert(Si[i]);
			M++;
		}
	}
set<string>::iterator it=Set.begin();
	for(i=1;i<=M;i++,it++)
	{
		Name[i]=*it;
		for(int j=1;j<=N;j++)
			if(Si[j]==Name[i])
				pos[i][++pos[i][0]]=j;
	}
	for(i=1;i<=N;i++)
		for(j=1;j<=N;j++)
		{
			fin>>c;
			if(c=='1')
				Sum[j]++;
		}
	for(i=1;i<=M;i++)
	{
		for(j=1;j<=pos[i][pos[i][0]];j++)
			Count[i][Sum[pos[i][j]]]++;
		for(j=N;j>=1;j--)
			SC[i][j]=SC[i][j+1]+Count[i][j];
	}
}
bool Cmp(Ans a,Ans b)
{
	if(a.Value==b.Value)
		return a.name<b.name;
	else
		return a.Value>b.Value;
}
void Solve()
{
int i,j,h;
	for(i=1;i<=M;i++)
	{
		for(h=1;h<=N;h++)
			if(SC[i][h]>=h && SC[i][h+1]<=h)
				H[i]=h;
		Out[i].name=Name[i];
		Out[i].Value=H[i];
	}
	sort(Out+1,Out+M+1,Cmp);
	for(i=1;i<=M;i++)
		fout<<Out[i].name<<" "<<Out[i].Value<<endl;
}
int main()
{
	Initialize();
	
	Solve();
	
	fin.close();
	fout.close();
	return 0;
}