| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 599 人关注过本帖
标题:超时了!!!怎么弄啊????
只看楼主 加入收藏
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:9 
超时了!!!怎么弄啊????
描述
给定n个正整数,输出前m小的。
输入
两个整数n (0 < n <= 1000000)和 m  (0 < m <= 1000)
接下来的n行,每行有一个正整数
输出
只有一行,表示前m小的数,注意行末不要有多余的空格
样例输入
6 3
5
6
4
1
2
3
样例输出
1 2 3




#include<iostream>
using namespace std;
void sort(int a[],int n)
{
    int i,j,max;
    for(i=n-1;i>0;i--)
        for(j=0;j<i;j++)
            if(a[j]>a[j+1])
            {
                a[j] = a[j]^a[j+1];
                a[j+1] = a[j+1]^a[j];
                a[j] = a[j]^a[j+1];
            }   
}
int main()
{
    int i,m,n;
    int *p = new int[n];
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        scanf("%d",&p[i]);
    sort(p,n);
    for(i=0;i<m-1;i++)
        printf("%d ",p[i]);
    printf("%d\n",p[m-1]);
    delete []p;
    return 0;
}
搜索更多相关主题的帖子: include 正整数 
2011-11-15 22:36
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
排序改成快排,堆排都可以
2011-11-15 22:39
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 2楼 czz5242199
改成qsort吗?你试过没?
2011-11-15 22:44
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
这个还用试啊。。1000000的数据量(n^2)级排序肯定超时的啊
2011-11-15 22:46
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
#include<iostream>
#include<cstdlib>
using namespace std;
int cmp(const void *a,const void *b)
{
    return *(int *)a - *(int *)b;
}
int main()
{
    int i,m,n;
    int *p = new int[n];
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        scanf("%d",&p[i]);
    qsort(p,n,sizeof(p[0]),cmp);
    for(i=0;i<m-1;i++)
        printf("%d ",p[i]);
    printf("%d\n",p[m-1]);
    delete []p;
    return 0;
}
2011-11-15 23:03
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
大虾们,弄一个高效的算法吧。。。。。。。。
2011-11-15 23:09
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
把OJ的网址发下 我去试试

                                         
===========深入<----------------->浅出============
2011-11-16 12:51
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:20 
我在杭电上面找了个和这个类似的题目 直接维护一个最小堆就可以了  不过堆用的是STL里面的
http://acm.hdu. 这是亚洲赛区的网络赛题目
程序代码:
#include <stdio.h>
#include <queue>
using namespace std;
struct Node
{
    int a;
    bool operator<(const Node &node1)const
    {return node1.a<a;}
};

int main()
{
    int n,k;
    Node t;
    char c;
    while(EOF != scanf("%d%d",&n,&k))
    {
        getchar();
        priority_queue<Node> pq;
        while(n--)
        {
            int size = 0;
            scanf("%c",&c);
            getchar();
            if('I' == c)
            {
                scanf("%d",&t.a);
                getchar();
                if(pq.size() < k)
                {
                    pq.push(t);
                }
                else if(t.a>(pq.top()).a)
                {
                    pq.pop();
                    pq.push(t);
                }
            }
            else if('Q' == c)
            {
                printf("%d\n",(pq.top()).a);
            }
        }
    }
    return 0;
}



                                         
===========深入<----------------->浅出============
2011-11-16 15:41
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 8楼 laoyang103
额额 看不懂。。。我改成qsort排序后通过了。。但是效率好低诶。。。
2011-11-19 13:15
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
已经过了  拿杭电的改的 维护一个最大堆  代码在帖子里面
程序代码:
#include <stdio.h>
#include <queue>
using namespace std;
struct Node
{
    int a;
    bool operator<(const Node &node1)const
    {return node1.a>a;}
};
int a[1005];
int main()
{
    int n,k;
    Node t;
    priority_queue<Node> pq;
    while(EOF != scanf("%d%d",&n,&k))
    {
        while(!pq.empty())pq.pop();      
        while(n--)
        {
            scanf("%d",&t.a);
            if(pq.size() < k)
                pq.push(t);
            else if(t.a<(pq.top()).a)
            {
                pq.pop();
                pq.push(t);
            }
        }
        int i = 0,j;
        while(k--)
        {
            a[i++] = pq.top().a;
            pq.pop();
        }
        for(j = i-1;j>0;j--)
            printf("%d ",a[j]);
        printf("%d\n",a[j]);
    }
    return 0;
}



                                         
===========深入<----------------->浅出============
2011-11-19 23:36
快速回复:超时了!!!怎么弄啊????
数据加载中...
 
   



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

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