| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 890 人关注过本帖
标题:新鲜啊 我的用快排还超时 你们怎么看
取消只看楼主 加入收藏
心剑菩提
Rank: 1
等 级:新手上路
帖 子:249
专家分:0
注 册:2007-5-17
收藏
 问题点数:0 回复次数:2 
新鲜啊 我的用快排还超时 你们怎么看

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++;
}
}
}


搜索更多相关主题的帖子: 超时 
2007-10-31 18:12
心剑菩提
Rank: 1
等 级:新手上路
帖 子:249
专家分:0
注 册:2007-5-17
收藏
得分:0 

过了啊
谢谢
#include<stdio.h>
#include<stdlib.h>
int compar(const void *a,const void *b)
{
int *aa=(int *)a,*bb=(int *)b;
return *aa-*bb;
}
int main ()
{
int a[10001],b[10000],c[10000],sum,m,n,i,j,k,casenum=0;
while (scanf("%d",&n)!=EOF)
{
casenum=casenum+1;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
qsort (a,n,sizeof(int),compar);
k=0;
b[k]=1;
for(i=0;i<n-1;i++)
{
if(a[i]==a[i+1]) b[k]=b[k]+1;
else
{
k=k+1;
b[k]=1;
}
}
qsort (b,k+1,sizeof(int),compar);
m=0;
c[m]=1;
for(i=1;i<=k;i++)
{
if(b[i]==b[i-1]) c[m]=c[m]+1;
else
{
m=m+1;
c[m]=1;
a[m]=b[i];
}
}
a[0]=b[0];
printf("Case %d:\n",casenum);
for(i=0;i<=m;i++)
printf("%d %d\n",a[i],c[i]);
}
return 0;
}



前世五百次的回眸 才换来今生的擦肩而过
2007-11-01 10:36
心剑菩提
Rank: 1
等 级:新手上路
帖 子:249
专家分:0
注 册:2007-5-17
收藏
得分:0 
你们帮忙想一下我的凑钱问题还有什么更好的方法
感觉时间复杂度很大

[此贴子已经被作者于2007-11-2 13:16:32编辑过]


前世五百次的回眸 才换来今生的擦肩而过
2007-11-01 14:19
快速回复:新鲜啊 我的用快排还超时 你们怎么看
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016876 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved