比赛 20121106 评测结果 AAAAAAAAAAAA
题目名称 H 指数因子 最终得分 100
用户昵称 11111111 运行时间 0.010 s
代码语言 C++ 内存使用 3.19 MiB
提交时间 2012-11-06 11:09:56
显示代码纯文本
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
string l1[101],l[101],gg;
int f[101][101]={0},t[101]={0},ren[101]={0},h[101]={0};
void temp(int a,int b)
{
	int tt;
	tt=h[a];
	h[a]=h[b];
	h[b]=tt;
	gg=l[a];
	l[a]=l[b];
	l[b]=gg;
	return;
}
char s;
int main()
{
	ifstream fin("publish.in");
	ofstream fout("publish.out");
	int n,m=1,j,i,k,o;
	fin>>n;
	for (int i=1;i<=n;i++)
	{
		fin>>l1[i];
		for (j=1;j<=m;j++)
			if (l[j]==l1[i]) 
			{
				ren[j]++;
				f[j][ren[j]]=i;
				break;
			}
		if (j>m)
		{
			l[m]=l1[i];
			ren[m]=1;
			f[m][1]=i;
			m++;
		}
	}
	m--;
	for (int i=1;i<=n;i++)
		for (j=1;j<=n;j++)
		{
			fin>>s;
			if (s=='1')
			t[j]++;
		}
	
	for (i=1;i<=m;i++)
	{
		for (j=1;j<=ren[i];j++) f[i][j]=t[f[i][j]];
		for (j=1;j<=ren[i]-1;j++)
			for (k=j+1;k<ren[i];k++)
				if (f[i][j]<f[i][k])
				{
					o=f[i][j];
					f[i][j]=f[i][k];
					f[i][k]=o;
				}
		for (j=1;j<=ren[i];j++)
			if (f[i][j]<j) break;
		j--;
		h[i]=j;
	}
	
	for (int i=1;i<=m-1;i++)
		for (int j=1;j<=m-i;j++)
		{
			if (h[j]<h[j+1])
				temp(j,j+1);
			else
			if (h[j]==h[j+1])
			{
				int xx=0;
				while (l[j][xx]>=l[j+1][xx])
				{
					if (l[j][xx]>l[j+1][xx]) 
					{
						temp(j,j+1);
						break;
					}
					xx++;
					if (xx>l[j].length()) break;
				}
			}
		}
	for (int i=1;i<=m;i++)
		fout<<l[i]<<' '<<h[i]<<endl;
	fin.close();
	fout.close();
	return 0;
}