比赛 |
20121106 |
评测结果 |
AAAAAAAAAAAA |
题目名称 |
H 指数因子 |
最终得分 |
100 |
用户昵称 |
王者自由 |
运行时间 |
0.012 s |
代码语言 |
C++ |
内存使用 |
3.15 MiB |
提交时间 |
2012-11-06 09:26:46 |
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 100 + 10;
struct gakusha {
int h;
string t;
inline bool operator < (const gakusha x) const {
return h == x.h ? t < x.t : h > x.h;
}
} e[N];
int n, m, p[N];
map<string, int> s;
string a[N];
vector<int> v[N];
inline bool bigger(int x, int y) {
return x > y;
}
int main() {
freopen("publish.in", "r", stdin);
freopen("publish.out", "w", stdout);
scanf("%d\n", &n);
char c[N];
for(int i=0; i<n; i++) {
scanf("%s\n", c);
a[i] = c;
if(s.find(a[i]) == s.end()) {
s[a[i]] = m;
e[m].t = a[i]; m++;
}
}
for(int i=0; i<n; i++) {
scanf("%s\n", c);
for(int j=0; j<n; j++)
if(i != j) p[j] += c[j] - '0';
}
for(int i=0; i<n; i++)
if(p[i]) v[s[a[i]]].push_back(p[i]);
int k, l[N];
for(int i=0; i<m; i++) {
sort(v[i].begin(), v[i].end(), bigger);
fill_n(l, k = v[i].size(), 0);
l[0] = k ? 1 : 0;
for(int j=1; j<k; j++)
l[j] += l[j-1] + (v[i][j] > j);
e[i].h = *max_element(l, l+k);
for(int j=0; j<k; j++)
fprintf(stderr, "(%d)%d[%d] ", j, v[i][j], l[j]);
fprintf(stderr, "\n");
}
sort(e, e+m);
for(int i=0; i<m; i++)
printf("%s %d\n", e[i].t.c_str(), e[i].h);
return 0;
}