• [CF1103B]Game with modulo


    题目大意:交互题,有一个数$a(aleqslant10^9)$,需要猜出它的值,一次询问为你两个数字$x,y(x,yin[0,2 imes10^9])$:

    1. 若$xmod ageqslant ymod a$,返回字符$x$
    2. 若$xmod a< ymod a$,返回字符$y$

    你最多询问$60$次

    题解:$60$,差不多是$2log_2n$。

    令$x=ka+b(kinmathbb{N},0leqslant b<a)$,$2x=(2k+[2bgeqslant a])a+(2bmod a)$。若$xmod ageqslant2xmod a$,即$bgeqslant (2bmod a)$。当$k=0$时,$x<aleqslant2x$。

    这样就有了$a$的一个范围,然后在这个区间内二分,这题似乎我以前的二分写法不可以,需要$ain[l,r]$时才有二分性,并且$mid ot=l$,不然询问返回都是$x$

    卡点:翻译中没有$x,yin[0,2 imes10^9]$,导致我写了个简单一点的二分。发现后各种换二分方法。。。

    C++ Code:

    #include <cstdio>
    char op[20];
    int main() {
    	scanf("%s", op);
    	while (*op == 's') {
    		int l = 0, r = 1;
    		while (true) {
    			printf("? %d %d
    ", l, r);
    			fflush(stdout), scanf("%s", op);
    			if (*op == 'x') break;
    			l = r, r <<= 1;
    		}
    		++l;
    		if (l != r) {
    			while (l < r) {
    				int mid = l + r >> 1;
    				if (mid == l) ++mid;
    				printf("%d %d
    ", l, r);
    				printf("? %d %d
    ", mid, l);
    				fflush(stdout), scanf("%s", op);
    				if (*op == 'y') r = mid;
    				else l = mid + 1;
    			}
    		}
    		printf("! %d
    ", l);
    		fflush(stdout), scanf("%s", op);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    ubuntu segmentation fault 段错误
    css配合js模拟的select下拉框
    让IE6下支持固定定位
    max-height,min-height在IE下不支持的解决方法
    图片居中
    完美运动框架,随意调用,兼容性好
    JS创建Ajax的XMLHttpRequest对象的通用方法
    JS兼容性问题(FF与IE)
    css样式
    html之marquee详解[转]
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/10351602.html
Copyright © 2020-2023  润新知