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

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
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
快速排序当然要比别的快.(O(nLOGn))
当规模大时时间上要缩短一点.

倚天照海花无数,流水高山心自知。
2007-11-01 13:12
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
这个用qsort慢,完全可以使用线性表来处理,复杂度为O(N)

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-11-01 13:23
心剑菩提
Rank: 1
等 级:新手上路
帖 子:249
专家分:0
注 册:2007-5-17
收藏
得分:0 
你们帮忙想一下我的凑钱问题还有什么更好的方法
感觉时间复杂度很大

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


前世五百次的回眸 才换来今生的擦肩而过
2007-11-01 14:19
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用心剑菩提在2007-11-1 14:19:41的发言:
你们帮忙想一下我的凑钱问题还有什么更好的方法
感觉时间复杂度很大

简单的DP,背包,复杂度为O(N^2)


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-11-02 19:58
zhangsi1
Rank: 2
来 自:安徽芜湖
等 级:论坛游民
帖 子:38
专家分:87
注 册:2012-10-4
收藏
得分:0 
卧龙孔明

等 级:贵宾
威 望:59
帖 子:3987
专家分:675
注 册:2006-10-13
第 6 楼   得分:0      以下是引用心剑菩提在2007-11-1 14:19:41的发言:
你们帮忙想一下我的凑钱问题还有什么更好的方法
感觉时间复杂度很大
wo too
2012-11-30 21:06
快速回复:新鲜啊 我的用快排还超时 你们怎么看
数据加载中...
 
   



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

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