比赛 |
20120420 |
评测结果 |
AAAWWWW |
题目名称 |
昵称 |
最终得分 |
42 |
用户昵称 |
Citron酱 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-04-20 09:13:35 |
显示代码纯文本
#include <cstdio>
#include <string>
#include <cstdlib>
#define I_F "nickname.in"
#define O_F "nickname.out"
const long MAXn=100000;
const short MAXl=100+1;
const short P=20;
long n;
std::string s[MAXn];
void Input();
void Sort(const long&, const long&);
void Output();
int main()
{
int m;
freopen(I_F,"r",stdin);
freopen(O_F,"w",stdout);
for (scanf("%d",&m); m>0; --m)
{
Input();
Sort(0,n-1);
Output();
}
return 0;
}
void Input()
{
char t[MAXl];
scanf("%ld",&n);
for (long i=0; i<n; i++)
{
scanf("%s",&t);
s[i]=t;
for (short j=0; j<s[i].length(); j++)
if (s[i][j]<'a')
s[i][j]=s[i][j]-'A'+'a';
}
}
void Sort(const long &l, const long &r)
{
if (r-l>P)
{
std::string x=s[l+rand()%(r-l+1)];
long i=l, j=r;
do
{
while (s[i]<x) ++i;
while (s[j]>x) --j;
if (i<=j)
s[i++].swap(s[j--]);
} while (i<j);
}
else
{
bool flag=true;
for (long i=l; i<r && flag; i++)
{
flag=false;
for (long j=r; j>i; j--)
if (s[j-1]>s[j])
s[j-1].swap(s[j]);
}
}
}
void Output()
{
printf("%s ",s[0].c_str());
long t=1;
for (long i=1; i<n; i++)
if (s[i]!=s[i-1])
{
printf("%ld\n%s ",t,s[i].c_str());
t=1;
}
else
++t;
printf("%ld\n",t);
}