Time Limit:1000MS Memory Limit:65536K
Total Submit:86 Accepted:8
Description
当H大学后勤集团发现选购的货物中有假货时,已经太迟了。假货已经被存入仓库之中,幸好真货都有唯一的标识符,而造假者似乎并未认识到这一点:他们造出的假货几乎完全仿制了真货的包装,包括标识符。
然而不幸的是,从一大堆数中挑出重复的数字是个很困难的工作,现在请你写一段程序,帮助H大后勤集团从将近10000件货物中,挑出可能的假货。
Input
输入:
输入包括很多组,每组占2行。
每组的第一行有一个数字N,表示货物的总数。
接下来的一行中有N个不超过1000000的整数,表示货物的编号。
Output
输出:
每组输出包含3行:
第一行 输出Case n: n表示是第几组测试数据
接下来每行输出2个数a b按a从小到大的顺序
表示有b个重复a次的货物编号
Sample Input
3
1 1 2
7
2 2 2 3 3 4 4
Sample Output
Case 1:
1 1
2 1
Case 2:
2 2
3 1
User Id:xuwanxin
Memory:1120K Time:1015MS
Language:GCC Result:Time Limit Exceed
#include <stdlib.h>
int compar(const void *a,const void *b)
{
int *aa=(int *)a,*bb=(int *)b;
if(*aa>*bb) return 1;
if(*aa==*bb) return 0;
if(*aa<*bb) return -1;
}
int main()
{
int y,n,i,j,a[10000],b[10000],t,num,casenum=1;
while(scanf("%d",&n))
{
for(i=0;i<n;i++)
b[i]=1;
y=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]==a[i-1])
y++;
}
if(y==n-1)
{
printf("Case %d:\n",casenum);
printf("%d 1\n",n);
}
else
{
num=0;
for(i=0;i<n-1;i++)
{
if(a[i]==a[i+1])
b[num]++;
else
num++;
}
qsort(b,num,sizeof(int),compar);
t=1;
printf("Case %d:\n",casenum);
for(i=0;i<num;i++)
{
if(b[i]==b[i+1])
t++;
else
{
printf("%d %d\n",b[i],t);
t=1;
}
}
casenum++;
}
}
}