记录编号 |
48759 |
评测结果 |
AAAAAAAAAAAA |
题目名称 |
H 指数因子 |
最终得分 |
100 |
用户昵称 |
QhelDIV |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.009 s |
提交时间 |
2012-11-06 15:25:27 |
内存使用 |
3.40 MiB |
显示代码纯文本
#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;
}