标题:北航1731,怎么就超时?
只看楼主
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
结帖率:95.24%
已结贴  问题点数:20 回复次数:18 
北航1731,怎么就超时?
圣诞节礼物
时间限制:1000 ms  |  内存限制:65536 KB
描述
圣诞节快到了,Jimmy 买了好多礼物准备送给他的朋友们,他想把价格为 S1 的礼物送给第 1 个朋友,价格为 S2 的礼物送给第 2 个朋友.....以此类推,他想把价格为 Si 的礼物送给第 i 个朋友。但是他买的礼物太多了,以至于他忘了是否存在价格为 Si 的礼物。幸运的是 Jimmy 把购物清单留了下来 。
现在告诉你 Jimmy 购买的 n 件礼物的价格,以及他想要送的 m 件礼物的价格,他想知道他能否从买的 n 件礼物中挑出那 m 件送给他的朋友们。如果能的话就告诉他“YES”, 否则告诉他“NO”。


输入
输入包含多组数据。
对于每组数据,第一行为两个正整数 n 和 m (0 < n , m <= 100000),分别为买的礼物的件数和想要送的礼物件数。第二行 n 个正整数,为买的 n 件礼物的价格。第三行 m 个正整数,第 i 个数代表想要送给第 i 个朋友的礼物的价格。(价格都在231以内)
当 n = m = 0 时输入结束。

输出
每一组数据输出一行,如果能则输出“YES”,否则输出“NO”。


样例输入
10 4
1 2 3 4 5 6 7 8 9 10
2 3 5 90
10 3
1 2 3 4 5 78 33 22 2 1
2 2 4
0 0
样例输出
NO
YES

题目连接http://www.

[ 本帖最后由 laoyang103 于 2011-9-17 11:13 编辑 ]
搜索更多相关主题的帖子: Jimmy 礼物 
2011-09-17 10:39
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
程序代码:
#include <stdio.h>
int main()
{
    int i,j,k;
    int m,n,v;
    while(scanf("%d%d",&n,&m) && (m||n))
    {
        int a[100000] = {0};
        for(i = 0;i<n;i++)
        {
            scanf("%d",&v);
            a[v]++;
        }
        for(i = 0;i<m;i++)
        {
            scanf("%d",&v);
            if(a[v])
                a[v]--;
            else
                break;
        }
        if(i == m)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}
这是我代码  直接用的哈希表 时间复杂度位m+n怎么就超时

[ 本帖最后由 laoyang103 于 2011-9-17 10:40 编辑 ]

                                         
===========深入<----------------->浅出============
2011-09-17 10:39
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:0 
回复 2楼 laoyang103
把题目完整链接帖出来,

我感觉楼主的代码已经很快了, 是不是服务器出了问题??
我帮你重新提交一次看看,

[ 本帖最后由 BlueGuy 于 2011-9-17 11:13 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2011-09-17 11:06
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
得分:0 
还真超时呀!
2011-09-17 11:16
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
for(i = 0;i<m;i++)
        {
            scanf("%d",&v);
            if(a[v])
                a[v]--;
            else
                break;
        }

错这了- -
2011-09-17 12:06
nextleave
Rank: 2
等 级:论坛游民
帖 子:52
专家分:92
注 册:2011-9-12
得分:0 
楼上说是怎么错了啊.我认为那个if(a[v])后面直接加分号就可以了,不需要进行自减操作.
2011-09-17 12:12
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
很简单, 没输入完你就break了
2011-09-17 12:13
nextleave
Rank: 2
等 级:论坛游民
帖 子:52
专家分:92
注 册:2011-9-12
得分:0 
真是无语了...只要遇到一个不符合条件的肯定要终止循环了...还继续比较做甚?
2011-09-17 12:20
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 8楼 nextleave
那你就继续无语吧,我说给能看懂的人的
2011-09-17 13:41
nextleave
Rank: 2
等 级:论坛游民
帖 子:52
专家分:92
注 册:2011-9-12
得分:0 
回复 9楼 草狼
你的QQ是多少,我倒要请教一下.
2011-09-17 13:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-350132-1-1.html




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

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