题目

交互题;

有\(n\)个物品,每个物品的价格为0或者1;

给出为1的物品的个数奇偶性k,并保证至少有一个价格为1;

每次可以询问一个集合S的另一个集合T的价值和的大小,交互库会返回>=或者<=;

一次交互的代价为|S|+|T|,总阈值为M;

问每个物品的价值;

\(n \le 10^5 \ , \ M = 500100 \ , \ K=0/1\); 

题解

  • 利用\(2N\)次找出最大的数,即1

    接下来对于\(x \le y\),如果\(x+y\le 1\) ,则\(x=0\),否则\(y=1\)

    复杂度:\(O(7N)\) ;

  • 随便找一个\(z\),比较\(x+y\)和\(z\):

    若\(x+y \le z\) , 则\(x = 0\)

    若\(x+y \ge z\),则\(y \ge z\),用\(y\)去替代\(z\)

    最后会的到很多0和一条单调递增的链,同时最后\(max(x,z) = 1\),得到一个1;

    根据sub3的做法在链上二分,利用奇偶性判断\(mid\)位置的答案;

    复杂度:\(O(5N+ 3log \ N)\) ;

    #include "shop.h"
    #include<bits/stdc++.h>
    using namespace std;
    const int N=100010;
    int st[N],top,q1[N],t1,q2[N],t2;
    bool cmp1(int a,int b){
    q1[0]=a,q2[0]=b;
    return query(q1,1,q2,1);
    }
    bool cmp2(int a,int b,int c){
    q1[0]=a,q1[1]=b;q2[0]=c;
    return query(q1,2,q2,1);
    }
    void swp(int&a,int&b){if(!cmp1(a,b))swap(a,b);}
    void find_price(int id,int n,int k,int ans[]){
    top=0;
    if(n==1){ans[0]=k;return;}
    if(n==2){
    int x=0,y=1;swp(x,y);
    if(k)ans[y]=1,ans[x]=0;
    else ans[x]=ans[y]=1;
    return ;
    }
    if(id==3){
    if(!cmp1(0,n-1)){
    int l=1,r=n-1;
    while(l<r){
    int mid=l+r>>1;
    if(cmp2(mid-1,mid,0))r=mid;
    else l=mid+1;
    }
    --l;
    for(int i=0;i<l;++i)ans[i]=1;
    for(int i=l+1;i<n;++i)ans[i]=0;
    k^=l&1;ans[l]=k;
    return ;
    }
    int l=0,r=n-2;
    while(l<r){
    int mid=l+r>>1;
    if(cmp2(mid,mid+1,n-1))l=mid+1;
    else r=mid;
    }
    for(int i=0;i<l;++i)ans[i]=0;
    for(int i=l+1;i<n;++i)ans[i]=1;
    k^=(n-1-l)&1;ans[l]=k;
    return ;
    }
    int x=0,y,z=1;
    for(int i=2;i<n;++i){
    y=i;swp(x,y);
    if(cmp2(x,y,z)){ans[x]=0;x=y;}
    else {st[++top]=z;z=y;}
    }
    swp(x,z);ans[z]=1;
    if(!top){ans[x]=!k;return;}
    st[++top]=z;
    int l=1,r=top-1;
    while(l<r){
    int mid=l+r>>1;
    if(cmp2(st[mid],st[mid+1],z))l=mid+1;
    else r=mid;
    }
    for(int i=1;i<l;++i)ans[st[i]]=0;
    for(int i=l+1;i<=top;++i)ans[st[i]]=1;
    y=st[l];k^=(top-l)&1;swp(x,y);
    if(cmp2(x,y,z)){ans[x]=0;ans[y]=k;}
    else {ans[y]=1;ans[x]=!k;}
    return ;
    }

【loj2985】【WC2019】I君的商店的更多相关文章

  1. WC2019 I 君的商店

    交互题 一个 01 序列,告诉你其中 1 有奇数个还是偶数个,每次可以给定两个集合 $A$,$B$,系统会告诉你 $A \leq B$ 或者 $B \leq A$ 求序列 交互次数要求 $5n + O ...

  2. loj2985「WC2019」I 君的商店(二分,思维)

    loj2985「WC2019」I 君的商店(二分,思维) loj Luogu 题解时间 真的有点猛的思维题. 首先有一个十分简单的思路: 花费 $ 2N $ 确定一个为 $ 1 $ 的数. 之后每次随 ...

  3. 【LOJ】#2985. 「WC2019」I 君的商店

    LOJ#2985. 「WC2019」I 君的商店 一道很神仙的题啊QAQ 居然是智商题--不是乱搞或者是大数据 我们可以用2N问出一个最大值是1 然后对于任意两个值\(x + y\)和\(a\)比较 ...

  4. LOJ #2985. 「WC2019」I 君的商店

    传送门 搬题解QwQ 首先最大值一定为 \(1\),直接扫一遍两两比较 \(O(2N)\) 求出最大值 设最大值位置为 \(a\),对于任意两个没有确定的位置 \(x,y\) 询问 \([a,x+y] ...

  5. 游记-NOI2019

    Day -18 被各路julao们轮番吊打-- Day -12 鸽子F发布了笔试题库,然而并没有 "MLE全场记零分" 的操作 Day -8 广二体育馆机器装配完毕,误闯开幕式表演 ...

  6. NOI2019 游记——一切都是最好的安排

    有幸运有遗憾 一切都是最好的安排. Day-3 临近NOI了,机房都在狂奶某某同学进队稳了 HE省队垫底,THUSC面试都没进 作为一个有自知之明的人 也就指望着能拼进前100,至少也拿个银牌. 心态 ...

  7. 【NOI 2019】同步赛 / 题解 / 感想

    非常颓写不动题怎么办…… 写下这篇博客警示自己吧…… 游记 7.16 我并不在广二参加 NOI,而是在距离广二体育馆一公里远的包间打同步赛(其实就是给写不动题找个理由) 上午身体不舒服,鸽了半天才看题 ...

  8. NOI2019退役记

    Day0 时光荏苒,日月如梭.人生中第二次也是最后一次全国赛开始了. 坐6h高铁+1h大巴来到gzez,热死.室友是A类的Gloid和C类的仓鼠,我寝室是为数不多(或许只有1个)的凑齐了ABC三种类别 ...

  9. 大熊君{{bb}}移动开发之旅(第一季)

    一,开篇概述 Hi,大家好!大熊君又和大家见面了,从这篇文章开始我要和大家聊聊移动开发的话题,这部分文章共8季,分别从不同角度来讲解什么是移动开发?移动开发涉及到什么方面的技术点以及移动开发中的常见问 ...

随机推荐

  1. redis 5.0 CLUSTERDOWN The cluster is down

    安装 redis 集群,设置值报错,错误信息:redis 5.0  CLUSTERDOWN The cluster is down. 这个是由于安装错误导致的,需要重新进行 修复一下. 命令如下: [ ...

  2. hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法

    1 当使用left join左连连接,sql语句为 select t from SecondPage t left join t.rightNavbar n where 1=1 页面中出现了部分空行的 ...

  3. Docker 安装 MySQL 学习笔记

    https://www.runoob.com/docker/docker-install-mysql.html #docker search mysql #docker pull mysql:5.6 ...

  4. 2019-07-24 require 和 include的区别

    require 和 include 都是文件引入的常用用法.那他们有什么区别吗? 首先我们创建一个需要引入的文件叫做test.php,里面写上简单的一行代码: echo "我是要被引入的文件 ...

  5. 【初识算法】- AC算法

    原文地址:https://www.cnblogs.com/jily/p/6250716.html 一.原理 AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符 ...

  6. linux 中常遇到的问题

    1.上传文件是速度为零 xshell连接对应的Ubuntu服务器上在Ubuntu服务器上安装lrzszsudo apt install lrzsz xshell连接对应的centos服务器上 yum  ...

  7. Linux正则表达式、shell基础、文件查找及打包压缩

    Linux正则表达式.shell基础.文件查找及打包压缩 一.正则表达式 Linux正则表达式分为2类: 1.基本正则表达式(BRE) 2.扩展正则表达式(ERE) 两者的区别: 1.使用扩展正则表达 ...

  8. beta版本——第六次冲刺

    第六次冲刺 (1)SCRUM部分☁️ 成员描述: 姓名 李星晨 完成了哪个任务 修改注册时时候弹窗提醒不正确的问题 花了多少时间 0.5h 还剩余多少时间 1.5h 遇到什么困难 没有 这两天解决的进 ...

  9. 第一次使用Git(常用的dos命令整理)

    在使用git的过程中,有许多dos命令也要会用才行 Git 工具分类 命令行 bash.cmd.power shell GUI Git GUI.GitHub Desktop IDE 集成 Visual ...

  10. mac 使用 brew 安装 nginx 及各种命令

    一.安装 brew install nginx 或 sudo brew install nginx 二.启动 brew services start nginx 或 sudo brew service ...