题目

交互题;

有\(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. mac上使用git命令上传项目工程源码至Github/gitee

    原文连接:(http://www.studyshare.cn/blog/details/1164/0 ) 一.安装git工具 1.官网下载地址:点击下载  安装步骤略,mac安装工具双击拖动即可. 2 ...

  2. 线程并发工具类之CountDownLatch的使用及原理分析

    原文链接:http://www.studyshare.cn/blog/details/1149/1 java开发工具下载地址及安装教程大全,点这里.更多技术文章,在这里. 一.定义 CountDown ...

  3. 2019-07-25 php错误级别及设置方法

    在php的开发过程里,我们总是会有一系列的错误警告,这些错误警告在我们开发的过程中是十分需要的,因为它能够提示我们在哪里出现了错误,以便修改和维护.但在网站开发结束投入使用时,这些报错我们就要尽量避免 ...

  4. Oracle PLSQL数据导出csv的案例

    之前项目运维人员碰到一个问题,需要写一个存储过程,把数据导出为csv文件,查了一些资料,帮他写成了一个PLSQL,今天拿出来分享一下,不足之处,欢迎指教. 数据背景:  用到两张表,一张存放单位组织名 ...

  5. 财政FINAUNCE英文FINAUNCE金融

    中文名金融 外文名Finance.Finaunce 概括为货币的发行与回笼 从事金融机构有银行.信托投资公司 目录 1 基本定义 2 关于概念 ? 概念新解 ? 概念现状 ? 熊德平新解 3 金融特征 ...

  6. kubeadm部署高可用K8S集群(v1.14.2)

    1. 简介 测试环境Kubernetes 1.14.2版本高可用搭建文档,搭建方式为kubeadm 2. 服务器版本和架构信息 系统版本:CentOS Linux release 7.6.1810 ( ...

  7. Oracle 11g新特性direct path read引发的系统停运故障诊断处理

    黎俊杰 | 2016-07-28 14:37 声明:部分表名为了脱敏而用XX代替 1.故障现象 (1)一个业务系统输入用户名与密码后无法进入首页,表现为一直在运行等待,运行缓慢 (2)整个系统无法正常 ...

  8. CentOS安装MySQL8.x

    MySQL的安装 (4,5,6可省略) 声明:CentOS版本为7.6,安装的MySQL版本为8.0.17 1. 首先要卸载掉本机自带的mysql相关,包括MariaDB. rpm -pa | gre ...

  9. centos安装zookeeper,并集群配置

    所有机器操作都一样! 注:zookeeper配置集群时 需把防火墙关掉 或者暴露配置文件里配置的端口, 并且在dataDir目录下要有myid文件 1 下载 wget https://mirrors. ...

  10. kali 攻击wordpress + trunkey linux wordpress 安装方法

    Kali-linux攻击WordPress和其他应用程序   今天越来越多的企业利用SAAS(Software as a Service)工具应用在他们的业务中.例如,他们经常使用WordPress作 ...