首页 > 其他分享 >CF2036G Library of Magic

CF2036G Library of Magic

时间:2024-11-16 21:30:25浏览次数:1  
标签:tmp Magic 询问 long 异或 Library oplus bit CF2036G

Problem

给出1~n每个数2个,共2n个,然后拿走3个不相等的数,可以进行最多150次询问,可以得到值为l-r的所有数的异或和,请你最后给出这3个数。其中\(3\le n\le10^{18}\)

Solve

不建议做法:

分治,不断给1~n区间分块
原因:需要进行的询问在不优化的情况下能达到200左右,需要不断找地方优化,且存在一些毒瘤情况

正解

设答案为a,b,c且有序
可以尝试进行二分,不断询问1~x的异或和来得到a和c,最后可以询问a至c之间来得到b
可是不难发现这种方案会被形如\(a\oplus b\oplus c=0\)的数据hack掉,怎么办呢?

重点

设\(base(x)\)为x的二进制位数。如果\(a\oplus b\oplus c=0\),那么有:$$base(a)<base(b)=base(c)$$
证明:
如果三个bit异或结果为0,那么有偶数个bit为1
因为最高位不为0,所以最高位至少有2个bit为1,另一个最小的为0
又因为a<b<c,所以base(a)<base(b)=base(c)

有了这个,我们可以发现\(a<2^p\le b\)(因为一个位数多,一个位数少)
我们可以枚举这个P,不断询问\(1\sim 2^p-1\),直到结果不为0,此时的结果就是a
这样二分的范围就有单调性了,为\(a+1\sim n\)

Code

#include<bits/stdc++.h>
using namespace std;
long long T,n;
long long gx(long long l,long long r){
    cout<<"xor "<<l<<" "<<r<<endl;
    long long tmp=0;
    cin>>tmp;
    return tmp;
}
int main(){
    cin>>T;
    int test=0;
    while(T--){
        test++;
        cin>>n;
        long long tmp=gx(1,n);
        if(tmp){
            long long l=1,r=n,ans;
            while(l<r){
                long long mid=(l+r)/2;
                if(gx(1,mid)){
                    r=mid;
                }else{
                    l=mid+1;
                }
            }
            ans=l;
            l=1,r=n;
            while(l<r){
                long long mid=(l+r)/2;
                if(gx(1,mid)==tmp){
                    r=mid;
                }else{
                    l=mid+1;
                }
            }
            long long tmp1=gx(ans,l)^ans^l;
            cout<<"ans "<<ans<<" "<<tmp1<<" "<<l<<endl;
        }else{
            long long sum=1,ans1=0,ans2=0,ans3=0,l,r=n;
            for(int i=0;i<=__lg(n)+1;i++){
                sum*=2;
                ans1=gx(1,sum-1);
                if(ans1){
                    break;
                }
            }
            l=ans1+1;
            while(l<r){
                long long mid=(l+r)/2;
                if(gx(1,mid)==tmp){
                    r=mid;
                }else{
                    l=mid+1;
                }
            }
            ans3=l;
            ans2=gx(ans1,ans3)^ans1^ans3;
            cout<<"ans "<<ans1<<" "<<ans2<<" "<<ans3<<endl;
        }
    }
    return 0;
}

标签:tmp,Magic,询问,long,异或,Library,oplus,bit,CF2036G
From: https://www.cnblogs.com/yiweixxs/p/18549821

相关文章

  • 从PE结构到LoadLibrary
    从PE结构到LoadLibraryPE是Windows平台主流可执行文件格式,.exe,.dll,.sys,.com文件都是PE格式32位的PE文件称为PE32,64位的称为PE32+,PE文件格式在winnt.h头中有着详细的定义,PE文件头包含了一个程序在运行时需要的所有信息,包括了如何将文件加载到内存、开辟多大的堆栈......
  • Z-Library入口网站 zlibrary国内可访问镜像地址(长期更新)
    Z-Library(简称z-lib,前身为BookFinder)是一个影子图书馆和开放获取文件分享计划,用户可在此网络下载期刊文章以及各种类型的书籍。截止2022年6月12日,该网站共收录了10,456,034本书和84,837,646篇文章。不过似乎很多用户还不知道,仍在使用一些不安全的仿冒山寨网站,甚至钓鱼网站。......
  • Z-Library 入口官方国内最新可用网址(2024持续更新)
    Z-Library(简称Z-Lib,前身为BookFinder)是全球最大的电子图书馆之一,拥有1046万本书和8484万篇文章。Z-Library从2009年开始提供免费的电子书,至今遭遇了多次封锁,从2024年5月份也停止了国内的任何宣传渠道。所以便出现了很多Z-Library虚假域名(钓鱼网站),本文持续更新最新的Z-Library官......
  • Z-Library电子图书馆官方地址入口 国内最新可用镜像网址入口 客户端(持续更新)
    Z-Library:自由获取知识的电子图书馆Z-Library(简称Z-Lib)。曾用名BookFinder。是一个提供广泛学术资源的影子图书馆网站。用户可以在此下载期刊、文章以及各类书籍。其藏书量超过1000万本书籍和8000万篇文章。尽管因版权问题。Z-Library在2022年11月3日遭到封S。但它通过新的官方......
  • Z-library电子图书馆入口/最新可用镜像网址 (2024持续更新)
    Z-Library(简称Z-Lib,前身为BookFinder)是一个影子图书馆网站,用户可在上面下载期刊、文章以及各类书籍,其共收录了超过1000w本书籍和8000w篇文章。因为版权问题,网站曾于2022年11月3日遭到封锁,但是强大的Z-Library有新的官方网址和镜像(不过镜像网站不太稳定),获得了重生。......
  • Z-library数字图书馆镜像地址/官网入口及客户端app (长期更新)
    Z-Library是一家电子图书馆,被誉为全球最大的科学图书和学术文献免费资源之一。它创办于2009年,截至2022年10月1日,已收录超过1129万本图书和8483万篇学术文章。从各种知名文学著作,理工学科,人文艺术、到学术论文等应有尽有!支持PDF、epub、mobi等多种格式图书资源下载绝对是你找书的不......
  • Z-library数字图书馆镜像网址入口及客户端/app (持续更新)
    Z-Library(简称z-lib,前身为BookFinder)是一个影子图书馆和开放获取文件分享计划,用户可在此网络下载期刊文章以及各种类型的书籍。截止2022年6月12日,该网站共收录了10,456,034本书和84,837,646篇文章。zlibrary电脑客户端/安卓appzlibrary(windows/mac/安卓/ipad)安装包下载:https......
  • WebMagic 抓取,selenium模拟点击操作,模拟将抓取的数据入库
    动态页面爬虫前的准备:https://www.cnblogs.com/maohuidong/p/18517953java添加maven依赖:<dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.4</version></dependency><......
  • PostgreSQL configure: error: readline library not found
    前言安装PostgreSQL时报错,以下复制代码configure:error:readlinelibrarynotfoundIfyouhavereadlinealreadyinstalled,seeconfig.logfordetailsonthefailure.Itispossiblethecompilerisn'tlookingintheproperdirectory.Use--without-readline......
  • Z-library数字图书馆镜像地址及客户端/app(持续更新)
    Z-library数字图书馆镜像地址及客户端/app(持续更新)Z-Library(简称Z-Lib,前身为BookFinder)是一个著名的数字图书馆。Z-Library拥有庞大的藏书量,涵盖学术文献、各类书籍等多种类型。资源丰富且免费,为全球读者和学术研究者提供了极大便利,支持多种检索方式,能高效找到目标资料。......