比赛 |
20120720 |
评测结果 |
AWWWTTTTTT |
题目名称 |
忠诚点数榜 |
最终得分 |
10 |
用户昵称 |
Truth.Cirno |
运行时间 |
1.350 s |
代码语言 |
C++ |
内存使用 |
6.01 MiB |
提交时间 |
2012-07-20 11:51:35 |
显示代码纯文本
#include <cstdio>
#include <cstring>
using namespace std;
struct strings
{
char s[12];
}name[250001];
int ntoa[250001],aton[250001],a[250001];
int main(void)
{
freopen("lp.in","r",stdin);
freopen("lp.out","w",stdout);
int i,j,k,pos,len,num,c,n,sco,namenum=0,atont;
char ch;
bool found;
strings str;
scanf("%d\n",&n);
for (i=0;i<n;i++)
{
scanf("%c%s",&ch,&str.s);
if (ch=='+')
{
scanf("%d\n",&sco);
found=false;
for (j=1;j<=namenum;j++)
if (strcmp(str.s,name[j].s)==0)
{
found=true;
a[ntoa[j]]=sco;
num=a[ntoa[j]];
atont=aton[ntoa[j]];
for (k=ntoa[j]-1;k>=1;k--)
{
if (num<=a[k])
break;
}
pos=k+1;
for (k=ntoa[j];k>pos;k--)
{
a[k]=a[k-1];
aton[k]=aton[k-1];
ntoa[aton[k]]++;
}
a[pos]=num;
aton[pos]=atont;
ntoa[j]=pos;
break;
}
if (!found)
{
namenum++;
name[namenum]=str;
ntoa[namenum]=namenum;
aton[namenum]=namenum;
a[namenum]=sco;
num=a[namenum];
atont=aton[namenum];
for (k=namenum-1;k>=1;k--)
{
if (num<=a[k])
break;
}
pos=k+1;
for (k=namenum;k>pos;k--)
{
a[k]=a[k-1];
aton[k]=aton[k-1];
ntoa[aton[k]]++;
}
a[pos]=num;
aton[pos]=atont;
ntoa[namenum]=pos;
}
}
else if (ch=='?')
{
scanf("\n");
if (str.s[0]>='0'&&str.s[0]<='9')
{
len=strlen(str.s);
num=0;
for (j=0;j<len;j++)
num=num*10+str.s[j]-'0';
printf("%s",name[aton[num]].s);
for (j=num+1,c=2;j<=namenum&&c<=10;j++,c++)
{
printf(" %s",name[aton[j]].s);
}
printf("\n");
}
else
{
for (j=1;j<=namenum;j++)
if (strcmp(name[j].s,str.s)==0)
{
printf("%d\n",ntoa[j]);
break;
}
}
}
}
return(0);
}