| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 609 人关注过本帖
标题:请大家来帮我理解下这个题意
取消只看楼主 加入收藏
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
结帖率:77.78%
收藏
已结贴  问题点数:20 回复次数:7 
请大家来帮我理解下这个题意
福建农大 ACM 1013,题目中的样例输入和输出我有点读不懂,希望大家帮我解释一下。
我认为第一种情况答案应该是 Impossible,第二种情况应该是 4 13。
请大家指出我的理解错在哪

Description

有一天,小王要求小明和小娟帮他洗牌,小王先分别给小明和小娟L张牌(不含大鬼牌)。接着小王又将两张大鬼牌分别插在小明牌的第x张牌(从上往下数,最上面的为第一张牌)和小娟牌第y张牌。小明的洗牌方法是每秒将最上面的的m张牌放在最下面,小娟是每秒将最下面的n张牌方在最上面,小王要想知道最少要经过几秒小明牌里的大鬼牌和小娟的大鬼牌会出现在同一个位置(即同时都是在第K张牌)。

Input

输入只包括一行5个整数x,y,m,n,L,其中x≠y ,0

Output

输出最少要经过几秒小明牌里的大鬼牌和小娟的大鬼牌会出现在同一个位置,以及出现的位置K,如果永远不可能碰面则输出一行"Impossible"

Sample Input


4 5 8 2 22
7 5 6 2 15
Sample Output


16 14
Impossible


[ 本帖最后由 voidx 于 2011-8-6 20:38 编辑 ]
搜索更多相关主题的帖子: 福建 
2011-08-06 18:38
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
大家来帮帮我撒
2011-08-06 20:28
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 3楼 lz1091914999
我现在的问题是读不懂题目中给出的样例~能不能先帮我解释一下
2011-08-06 21:08
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
这个可以直接做个模拟的过程来解,不过效率比较低。

能不能先帮我看看那两个样例到底是怎么回事,我怎么想也想不明白,拜托了

按照题目描述,我的理解是这样的:

样例:7 5 6 2 15
洗牌过程( t 表示时间,单位为秒):
t    x    y
0    7    5
1    1    7
2    10   9
3    4    11
4    13   13

那么这个样例的输出应该是: 4 13

可是题目中给出的却是 Impossible ~~

不明白啊~

[ 本帖最后由 voidx 于 2011-8-6 21:18 编辑 ]
2011-08-06 21:14
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
啊 ~~~~~~~ 我靠~~~~~~~~
我愚蠢~~~~~~~~~~~~~~~~~~~~~
l 要 +1

我真是个猪
2011-08-06 21:40
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 13楼 lz1091914999
判断 impossible 的一个简单的方法是 记录初始状态,如果某次迭代后与初始状态相同,则 impossible。
2011-08-06 23:04
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
程序代码:
#include <stdio.h>

int main(int argc, char* argv[]) {
    int x, y, m, n, l;
    int a, b, k, t;
    
    while (scanf("%d %d %d %d %d", &x, &y, &m, &n, &l) == 5) {
        l++;
        m = l - m;
        a = x - y;
        b = m - n;
    
        if (b < 0) {
            a = -a;
            b = -b;
        }

        if (b == 0) {
            printf("Impossible\n");
            continue;
        }
        
        for (k = (a > 0 ? 1 : 0), t = (k * l - a) % b; t != 0 && k <= b; k++, t = (t + l % b) % b);    // 这个循环什么情况下会死循环?

        if (t == 0) {
            t = (k * l - a) / b;
            printf("%d %d\n", t, (t * m + x) % l);
        } else {
            printf("Impossible\n");
        }
    }
    return 0;
}


[ 本帖最后由 voidx 于 2011-8-6 23:25 编辑 ]
2011-08-06 23:23
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
这样的代码都 WA ,而且看了一下,到目前为止只有管理员提交的两个代码通过了,还是,放弃好了

程序代码:
#include <stdio.h>

int main(int argc, char* argv[]) {
    int _x, _y, x, y, m, n, l, t;
    
    scanf("%d %d %d %d %d", &_x, &_y, &m, &n, &l);
    l++;
    m = l - m;
    x = (_x + m) % l;
    y = (_y + n) % l;
    for (t = 1; x != y && (x != _x || y != _y); t++) {
        x = (x + m) % l;
        y = (y + n) % l;
    }
    
    if (x == y) {
        printf("%d %d", t, x);
    } else {
        printf("Impossible");
    }
        
    return 0;
}
2011-08-07 00:25
快速回复:请大家来帮我理解下这个题意
数据加载中...
 
   



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

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