50109. H-index
難度:3.5/5
如果沒有hint的話應該有4。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char name[16];
int n;
} scholar;
int cmp(const void* a, const void* b){
int rtv = strcmp(((scholar*)a)->name, ((scholar*)b)->name);
if(rtv != 0) return rtv;
else if(((scholar*)a)->n > ((scholar*)b)->n) return -1;
else if(((scholar*)a)->n == ((scholar*)b)->n) return 0;
else return 1;
}
scholar arr[20000];
int cnt = 0;
static inline void get_index(int l, int r){
int p = 0;
for(int i = l; i <= r; i++){
p++;
if(arr[i].n < p){
p--;
break;
}
}
printf("%s %d\n", arr[l].name, p);
}
int main(){
while(scanf("%s %d", arr[cnt].name, &arr[cnt].n) != EOF) cnt++;
qsort(arr, cnt, sizeof(scholar), cmp);
for(int i = 0; i < cnt; i++){
int last = i;
while(last < cnt && strcmp(arr[i].name, arr[last].name) == 0) last++;
get_index(i, last - 1);
i = last - 1;
}
}