题目

交互题;

有\(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. windows操作系统更改 <远程桌面> 端口号

    windows远程桌面连接默认使用的是3389端口,为了避免被他人扫描从而暴力破解远程服务器或者病毒入侵.可以将默认端口修改为其它端口,如8888,11111等.最好修改为10000以后的端口,这样可 ...

  2. 关于MVC接收Ajax调用无法访问的问题

    例如:下面代码有两个int类型的参数,如果Ajax调用时没有在data属性中为其赋值,AJAX会出500异常. public JsonResult GetList(int pageIndex, int ...

  3. Tomcat组件梳理—Digester的使用

    Tomcat组件梳理-Digester的使用 再吐槽一下,本来以为可以不用再开一个篇章来梳理Digester了,但是发现在研究Service的创建时,还是对Digester的很多接口或者机制不熟悉,简 ...

  4. tf.nn.softmax_cross_entropy_with_logits()函数的使用方法

    import tensorflow as tf labels = [[0.2,0.3,0.5], [0.1,0.6,0.3]]logits = [[2,0.5,1], [0.1,1,3]] a=tf. ...

  5. 2019 同程旅游java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.同程等公司offer,岗位是Java后端开发,因为发展原因最终选择去了同程,入职一年时间了,之前面试了很多家公 ...

  6. head 与 tail

    head head [-n] 数字『文件』 显示前面n行 例如 head -n 3 test 显示 test 文件的前 3 行,也可以写作 head -3 test 比较有趣的是 -n 后面的数字,可 ...

  7. MyCat - 数据库中间插件

    什么是MyCat 是目前最流行的分布式数据库中间插件 为什么使用MyCat 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经 ...

  8. 【开发工具】- Myeclipse10.7破解方法

    1.下载myeclipse 10,如果没有,可以使用链接:https://pan.baidu.com/s/1l9juqD4ALMuepVL6e5kgjA 密码:kpx6:当然时间久了可能链接失效,如有 ...

  9. Android Scroller详解

    在学习使用Scroller之前,需要明白scrollTo().scrollBy()方法. 一.View的scrollTo().scrollBy() scrollTo.scrollBy方法是View中的 ...

  10. Building Objective-C static libraries with categories

    Q: How do I fix "selector not recognized" runtime exceptions when trying to use category m ...