记录编号 |
267914 |
评测结果 |
AAAAAAAAAA |
题目名称 |
韩国明星 |
最终得分 |
100 |
用户昵称 |
核糖核酸 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.242 s |
提交时间 |
2016-06-11 19:07:21 |
内存使用 |
118.19 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
struct Node{
int c[60];
int hash;
};
static Node s[500000];
int Index=0;
struct Person{
char name[10];
int val;
};
static Person h[100005];
int N, M, tot=0, p, x;
bool cmp(const Person a, const Person b)
{
if(a.val!=b.val) return a.val>b.val;
return strcmp(a.name,b.name);
}
int main()
{
freopen("star.in","r",stdin);
freopen("star.out","w",stdout);
scanf("%d", &N);
s[0].hash = 0;
for(int i=1; i<=N; i++)
{
scanf("%s", h[i].name);
h[i].val = 0;
int sz = strlen(h[i].name);
p = 0;
for(int j=0; j<sz; j++)
{
x = h[i].name[j] - 'A';
if(s[p].c[x] == 0) s[p].c[x] = ++Index;
p = s[p].c[x];
if(j==(sz-1)) s[p].hash = i;
}
}
scanf("%d", &M);
for(int i=1; i<=M; i++)
{
scanf("%s", h[0].name);
scanf("%d", &h[0].val);
int sz = strlen(h[0].name);
p = 0;
for(int j=0; j<sz; j++)
{
x = h[0].name[j] - 'A';
p = s[p].c[x];
}
h[s[p].hash].val += h[0].val;
}
sort(h+1, h+N+1, cmp);
for(int i=1; i<=N; i++)
{
printf("%s\n", h[i].name);
printf("%d\n", h[i].val);
}
fclose(stdin); fclose(stdout);
return 0;
}