| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 512 人关注过本帖
标题:北京大学onlinejudge 1061青蛙的约会,怎么我测试的结果都和AC的代码一样还 ...
只看楼主 加入收藏
Graces
Rank: 1
等 级:新手上路
帖 子:7
专家分:6
注 册:2010-12-10
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:7 
北京大学onlinejudge 1061青蛙的约会,怎么我测试的结果都和AC的代码一样还Wrong Answer??
这是链接   http://

这是我的代码!!不知道算法哪里错了???
#include<stdio.h>
void main()
{
long x,y,m,n,L,tries=1;                         /*tries是跳的次数*/
scanf("%ld%ld%ld%ld%ld",&x,&y,&m,&n,&L);
while(((x-y+(m-n)*tries)%L!=0)&&(tries<L))           /*跳的次数==L时,每只青蛙刚好都回到出发的位置(以后再跳就是循环而已),
 tries++;                                                                      要是还没和另一只青蛙相聚,他们就没法见面*/
if(tries<L)
 printf("%ld",tries);
else
 printf("Impossible");
}
我把成功的代码随机运行很多数据,放在我的代码程序运行,答案是一样的啊!!但是OJ就是说我Wrong Answer
求赐教!!

[ 本帖最后由 Graces 于 2011-1-1 23:59 编辑 ]
搜索更多相关主题的帖子: 北京大学 
2011-01-01 23:03
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:0 
可以运行的呀
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-01-01 23:23
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
几个数据正确,不说明的程序总是正确,还有很多你还没有考虑过的情况

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2011-01-01 23:26
Graces
Rank: 1
等 级:新手上路
帖 子:7
专家分:6
注 册:2010-12-10
收藏
得分:0 
首先我确定我的算法没错,只能是OJ的其他限制了,如果我的思想哪里错,请指明,我随机且测试了大量的数据,基本确定我的代码的运行结果没有错!!我很郁闷
请大家说说我的思想哪里错,我用这个思路不AC不爽啊,不想用复杂的算法,我喜欢简洁的感觉!!
哪里有问题???

[ 本帖最后由 Graces 于 2011-1-2 00:03 编辑 ]
2011-01-01 23:53
Graces
Rank: 1
等 级:新手上路
帖 子:7
专家分:6
注 册:2010-12-10
收藏
得分:0 
这是AC的程序,是我网上找的
#include <stdio.h>

int main(int argc, char* argv[])
{
    int x, y, m, n, L, dd, dv, ltimes, tmp, first;
    scanf("%d%d%d%d%d", &x, &y, &m, &n, &L);

    x %= L;
    y %= L;
    m %= L;
    n %= L;

    if(m>n)
    {
        dd = (x<y) ? y-x : L-(x-y);
        dv = m-n;
    }
    else if(m<n)
    {
        dd = x>y ? x-y : L-(y-x);
        dv = n-m;
    }
    else
    {
        printf("Impossible\n");
        return 0;
    }

    tmp = dd;
    ltimes = 0;
    first = 1;

    while(1)
    {
        if(tmp%dv == 0)
        {
            ltimes += (tmp/dv);
            printf("%d\n", ltimes);
            break;
        }

        if( (!first) && (tmp >= dd) && (((tmp-dd)%dv) == 0))
        {
            printf("Impossible\n");
            break;
        }

        ltimes += tmp/dv+1;
        tmp = L + (tmp%dv-dv);
        first = 0;
    }

    return 0;
}
2011-01-01 23:54
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
以下是引用Graces在2011-1-1 23:53:43的发言:

首先我确定我的算法没错,只能是OJ的其他限制了,如果我的思想哪里错,请指明,我随机且测试了大量的数据,基本确定我的代码的运行结果没有错!!我很郁闷
请大家说说我的思想哪里错,我用这个思路不AC不爽啊,不想用复杂的算法,我喜欢简洁的感觉!!
哪里有问题???

你的算法如果真没错,那你就是少考虑一个很隐蔽的问题:数值越界
这种越界能直接让你的程序结果不正确

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2011-01-02 00:20
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:20 
根据题目的数据范围,你这个表达式
(x-y+(m-n)*tries)
极可能在特殊的x,y,m,n下结果超出long的范围

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2011-01-02 00:22
Graces
Rank: 1
等 级:新手上路
帖 子:7
专家分:6
注 册:2010-12-10
收藏
得分:0 
回复 7楼 御坂美琴
果然是在把long改成long long提交后成功,但是超时!!
哎,遗憾啊,谢谢解答!!
2011-01-03 23:33
快速回复:北京大学onlinejudge 1061青蛙的约会,怎么我测试的结果都和AC的代码一 ...
数据加载中...
 
   



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

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