记录编号 33423 评测结果 AAAAAAAAAA
题目名称 韩国明星 最终得分 100
用户昵称 Gravatar苏轼 是否通过 通过
代码语言 C++ 运行时间 1.609 s
提交时间 2011-11-10 16:34:51 内存使用 12.86 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int n,m;
int find();
char str[128];
int cmp(const void*a,const void *b);
struct tree
{
	int num;
	tree *s[128];
};
struct hehe
{
	int mark;
	char st[128];
}q[100001];
int main()
{
	freopen ("star.in","r",stdin);
	freopen ("star.out","w",stdout);
	scanf("%d\n",&n);
	tree *head=new tree;
	for (int p=0;p<128;p++)
	{
		head->s[p]=NULL;
	}
	for (int i=0;i<n;i++)
	{
		q[i].mark=0;
		scanf("%[^\n]\n",&q[i].st);
		int lq;
		lq=strlen(q[i].st);
		tree *p=new tree;
		p=head;
		for (int j=0;j<lq;j++)
		{
			if (j==lq-1)
			{
				p->num=i;
				break;
			}
			if (p->s[q[i].st[j]-'0']==NULL)
			{
				tree *b=new tree;
				for (int u=0;u<128;u++)
				{
					b->s[u]=NULL;
				}
				p->s[(q[i].st[j])-'0']=b;
				b=NULL;
				delete b;
			}
			p=p->s[q[i].st[j]-'0'];
		}
		p=NULL;
		delete p;
	}
	scanf("%d\n",&m);
	for (int i=0;i<m;i++)
	{
		char str[128];
		scanf("%[^\n]\n",&str);
		int lw;
		lw=strlen(str);
		int tmp;
		scanf("%d\n",&tmp);
		int temp;
		tree *p=new tree;
		p=head;
		for (int j=0;j<lw;j++)
		{
			if(j==lw-1)
			{
				temp=p->num;
			}
			p=p->s[str[j]-'0'];
		}
		q[temp].mark+=tmp;
	}
	qsort(q,n,sizeof(q[0]),cmp);
	for (int i=0;i<n;i++)
	{
		cout<<q[i].st<<endl<<q[i].mark<<endl;
	}
	return 0;
}
int cmp(const void *a,const void *b)
{
	struct hehe*c=(struct hehe*)a;
	struct hehe *d=(struct hehe*)b;
	return d->mark - c->mark;
}