洛谷:P5635 【CSGRound1】天下第一

时间限制200ms         内存限制256.00MB         难易度:普及/提高−

【题目背景】

天下第一的 cbw 以主席的身份在 8102 年统治全宇宙后,开始了自己休闲的生活,并邀请自己的好友每天都来和他做游戏。由于 cbw 想要显出自己平易近人,所以 zhouwc 虽然是一个蒟蒻,也有能和 cbw 玩游戏的机会。

【题目描述】

游戏是这样的:

给定两个数 x,y,与一个模数 p。

cbw 拥有数 x,zhouwc 拥有数 y。

第一个回合:x←(x+y) mod p。

第二个回合:y←(x+y) mod p。

第三个回合:x←(x+y) mod p。

第四个回合:y←(x+y) mod p。

以此类推....

如果 x 先到 0,则 cbw 胜利。如果 y 先到 0,则 zhouwc 胜利。如果 x,y 都不能到 0,则为平局。

cbw 为了捍卫自己主席的尊严,想要提前知道游戏的结果,并且可以趁机动点手脚,所以他希望你来告诉他结果。

【输入格式】

有多组数据。

第一行:T 和 p 表示一共有 T 组数据且模数都为 p。

以下 T 行,每行两个数 x,y 。

【输出格式】

共 T 行

1 表示 cbw 获胜,2 表示 zhouwc 获胜,error 表示平局。

【输入输出样例】

输入 #1

1 10
1 3

输出 #1

error

输入 #2

1 10
4 5

输出 #2

1

【说明/提示】

1≤T≤200。

1≤x,y,p≤10000。

【算法分析】

 这道题真水,直接暴力开干。
首先我们可以按照题意写两个函数用来每个回合的操作用if语句判断x和y谁先到0。
对于error,我们可以先记录x和y的初始值,如果在进行回合操作中出现了x和y的值等于它们的初始值,即出现了循环,x和y都无法到0。

【参考代码】

#include<bits/stdc++.h>
using namespace std;
int hh1(int x,int y,int p) //奇数回合的操作。
{
    return x=(x+y)%p;
}
int hh2(int x,int y,int p) //偶数回合的操作。
{
    return y=(x+y)%p;
}
int main()
{
    int t,p;
    cin>>t>>p;
    int x,y;
    for(int i=0;i<t;i++)
    {
        cin>>x>>y;
        int xx=x,yy=y; //记录x,y的值,后面用来判断平局。
        for(int j=1;;j++)
        {
            x=hh1(x,y,p); //第1,3,5……回合。
            if(x==0) //如果x先到0,则cbw胜利。
            {
                cout<<"1"<<endl;
                break;
            }
            y=hh2(x,y,p); //第2,4,6……回合。
            if(y==0) //如果y先到0,则zhouwc胜利。
            {
                cout<<"2"<<endl;
                break;
            }
            if(x==xx&&y==yy) //如果x和y回到了初始值,即出现了循环,x,y都不能到0,判为平局。
            {
                cout<<"error"<<endl;
                break;
            }
        }
    }
    return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值