栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

CF1103B Game with modulo

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CF1103B Game with modulo

题目大意

未知一个数 a a a,让你每次猜两个数 x x x 和 y y y,若 ( x   m o d   a ) ≥ ( y   m o d   a ) (xbmod a)ge (ybmod a) (xmoda)≥(ymoda) 返回 x,否则返回 y。

让你猜测次数少于 60 60 60 次的时候猜出数 a a a。

解题思路

我们可以先二分猜一个 x x x,如果 ( 2 x   m o d   a ) ≥ ( x   m o d   a ) (2xbmod a) ≥ (x bmod a) (2xmoda)≥(xmoda) , 那么我们就能确定 x < = a < = 2 x x <= a <= 2x x<=a<=2x。

找到 a a a 的范围后,可以再来一个二分求出 a a a。

具体见代码。

CODE
#include 

#define int long long

using namespace std;

string s;

int len;

signed main()
{
    cin >> s;
    while (s.size() != 3 && s.size() != 7)
    {
        int l = 0, r = 1;
        do
        {
            printf("? %lld %lldn", l, r);
            cin >> s;
            if (s[0] == 'y')
            {
                l = r;
                r <<= 1;
            }
        } while (s[0] == 'y');
        while (l + 1 < r)
        {
            int mid = (l + r) >> 1;
            printf("? %lld %lldn", mid, l);
            cin >> s;
            if (s[0] == 'x')
                l = mid;
            else
                r = mid;
        }
        printf("! %lldn", l + 1);
        cin >> s;
    }
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/628871.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号