比赛 |
20111110 |
评测结果 |
AAAATTTTTT |
题目名称 |
韩国明星 |
最终得分 |
40 |
用户昵称 |
Truth.Cirno |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-11-10 11:15:18 |
显示代码纯文本
- //对于100%的数据,保证N<=100000 -8888<=Change<=8888 K<=100000.
- #include <cstdio>
- #include <cstdlib>
- #include <string>
- #include <cstring>
- using namespace std;
-
- int len[100001]={0},sco[100001]={0};
- char nam[100001][101]={{0}};
-
- void swapint(int& a,int& b)
- {
- int temp;
- temp=a;
- a=b;
- b=temp;
- }
-
- void swapallchar(int posa,int posb)
- {
- int i;
- char temp;
- if (len[posa]>len[posb])
- {
- for (i=0;i<=len[posb];i++)
- {
- temp=nam[posa][i];
- nam[posa][i]=nam[posb][i];
- nam[posb][i]=temp;
- }
- for (i=len[posb]+1;i<=len[posa];i++)
- nam[posb][i]=nam[posa][i];
- }
- else
- {
- for (i=0;i<=len[posa];i++)
- {
- temp=nam[posa][i];
- nam[posa][i]=nam[posb][i];
- nam[posb][i]=temp;
- }
- for (i=len[posa]+1;i<=len[posb];i++)
- nam[posa][i]=nam[posb][i];
- }
- }
-
- void qqsort1(int l,int r)
- {
- int ll,rr,temp;
- ll=l;
- rr=r;
- temp=len[rand()%(r-l+1)+l];
- while (ll<=rr)
- {
- while (len[ll]<temp)
- ll++;
- while (temp<len[rr])
- rr--;
- if (ll<=rr)
- {
- swapallchar(ll,rr);
- swapint(len[ll],len[rr]);
- ll++;
- rr--;
- }
- }
- if (l<rr)
- qqsort1(l,rr);
- if (ll<r)
- qqsort1(ll,r);
- }
-
- void check(int aimlen,int& l,int& r)
- {
- int mid;
- mid=(l+r)/2;
- while (l<r)
- {
- if (len[mid]==aimlen)
- break;
- else if (len[mid]<aimlen)
- l=mid+1;
- else if (len[mid]>aimlen)
- r=mid-1;
- mid=(l+r)/2;
- }
- l=mid;
- r=mid;
- while (len[l]==len[mid])
- l--;
- while (len[r]==len[mid])
- r++;
- l++;
- r--;
- }
-
- void qqsort2(int l,int r)
- {
- int ll,rr,temp;
- ll=l;
- rr=r;
- temp=sco[rand()%(r-l+1)+l];
- while (ll<=rr)
- {
- while (sco[ll]>temp)
- ll++;
- while (temp>sco[rr])
- rr--;
- if (ll<=rr)
- {
- swapallchar(ll,rr);
- swapint(sco[ll],sco[rr]);
- ll++;
- rr--;
- }
- }
- if (l<rr)
- qqsort2(l,rr);
- if (ll<r)
- qqsort2(ll,r);
- }
-
- int main(void)
- {
- freopen("star.in","r",stdin);
- freopen("star.out","w",stdout);
- int i,j,n,k,l,r,change,aimlen;
- char aim[101];
- scanf("%d\n",&n);
- for (i=1;i<=n;i++)
- {
- scanf("%[^\n]\n",&nam[i]);
- len[i]=strlen(nam[i]);
- }
- qqsort1(1,n);
- scanf("%d\n",&k);
- for (i=1;i<=k;i++)
- {
- scanf("%[^\n]\n%d\n",&aim,&change);
- aimlen=strlen(aim);
- l=1;
- r=n;
- check(aimlen,l,r);
- for (j=l;j<=r;j++)
- if (strcmp(aim,nam[j])==0)
- {
- sco[j]+=change;
- break;
- }
- }
- qqsort2(1,n);
- for (i=1;i<=n;i++)
- printf("%s\n%d\n",nam[i],sco[i]);
- fclose(stdin);
- fclose(stdout);
- return(0);
- }