【loj2985】【WC2019】I君的商店
题目
交互题;
有\(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君的商店的更多相关文章
- WC2019 I 君的商店
交互题 一个 01 序列,告诉你其中 1 有奇数个还是偶数个,每次可以给定两个集合 $A$,$B$,系统会告诉你 $A \leq B$ 或者 $B \leq A$ 求序列 交互次数要求 $5n + O ...
- loj2985「WC2019」I 君的商店(二分,思维)
loj2985「WC2019」I 君的商店(二分,思维) loj Luogu 题解时间 真的有点猛的思维题. 首先有一个十分简单的思路: 花费 $ 2N $ 确定一个为 $ 1 $ 的数. 之后每次随 ...
- 【LOJ】#2985. 「WC2019」I 君的商店
LOJ#2985. 「WC2019」I 君的商店 一道很神仙的题啊QAQ 居然是智商题--不是乱搞或者是大数据 我们可以用2N问出一个最大值是1 然后对于任意两个值\(x + y\)和\(a\)比较 ...
- LOJ #2985. 「WC2019」I 君的商店
传送门 搬题解QwQ 首先最大值一定为 \(1\),直接扫一遍两两比较 \(O(2N)\) 求出最大值 设最大值位置为 \(a\),对于任意两个没有确定的位置 \(x,y\) 询问 \([a,x+y] ...
- 游记-NOI2019
Day -18 被各路julao们轮番吊打-- Day -12 鸽子F发布了笔试题库,然而并没有 "MLE全场记零分" 的操作 Day -8 广二体育馆机器装配完毕,误闯开幕式表演 ...
- NOI2019 游记——一切都是最好的安排
有幸运有遗憾 一切都是最好的安排. Day-3 临近NOI了,机房都在狂奶某某同学进队稳了 HE省队垫底,THUSC面试都没进 作为一个有自知之明的人 也就指望着能拼进前100,至少也拿个银牌. 心态 ...
- 【NOI 2019】同步赛 / 题解 / 感想
非常颓写不动题怎么办…… 写下这篇博客警示自己吧…… 游记 7.16 我并不在广二参加 NOI,而是在距离广二体育馆一公里远的包间打同步赛(其实就是给写不动题找个理由) 上午身体不舒服,鸽了半天才看题 ...
- NOI2019退役记
Day0 时光荏苒,日月如梭.人生中第二次也是最后一次全国赛开始了. 坐6h高铁+1h大巴来到gzez,热死.室友是A类的Gloid和C类的仓鼠,我寝室是为数不多(或许只有1个)的凑齐了ABC三种类别 ...
- 大熊君{{bb}}移动开发之旅(第一季)
一,开篇概述 Hi,大家好!大熊君又和大家见面了,从这篇文章开始我要和大家聊聊移动开发的话题,这部分文章共8季,分别从不同角度来讲解什么是移动开发?移动开发涉及到什么方面的技术点以及移动开发中的常见问 ...
随机推荐
- TCP协议学习笔记
TCP协议数据格式 TCP协议在互联网ISO协议的传输层. 在互联网传输过程中,互联网包在数据链路层,是传输数据的最基础的包.一个互联网的包包含IP包,即互联网包 = 互联网信息包头(至少20字节)+ ...
- 在Centos7中创建.net core 项目,并用Apache做代理服务器部署.net core项目
这一篇实例记录一次用Centos7创建并部署.net core项目的过程,希望能帮到用到的小伙伴. Kestrel 是 ASP.NET Core 项目模板中包括的默认 Web 服务器,Kestrel可 ...
- UIView与CALayer的区别,很详细(基础教学拓展)转
研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,写那篇东西的人,其 ...
- 【Python】模块和包
模块 模块的概念 1. 每一个以扩展名 `py` 结尾的 `Python` 源代码文件都是一个 模块 2. 模块名 同样也是一个 标识符,需要符合标识符的命名规则 3. 在模块中定义的 全局变量 .函 ...
- MySQL Replication--TABLE_ID与行格式复制
BINLOG中的TABLE_ID 在ROW格式的二进制中,事件信息中没有列的信息,需要通过Table_Map将表名对于的表信息加载到cache中,然后根据事件信息中的列下标来定位到数据列,每次表信息加 ...
- JS正则表达式提取数字
/** * [参数str] * @type {var String} * return 30 */ var str = "ren民BI30kuai" console.log(str ...
- Linux操作系统-CentOS6启动流程和服务管理
Linux操作系统-CentOS6启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux组成 1>.Linux: kernel+rootfs ker ...
- 使用Cloudera Manager添加Sentry服务
使用Cloudera Manager添加Sentry服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.通过CM添加Sentry服务 1>.点击添加服务进入CM服务安装向 ...
- node基础学习——http基础知识-02-http响应数据流
<一> 发送服务器端响应流 在createServer()方法的参数值回调函数或服务器对象的request事件函数中的第二个参数值为一个http.ServerResponse对象,可以利用 ...
- 微信小程序~扫码
为了让用户减少输入,我们可以把复杂的信息编码成一个二维码,利用宿主环境wx.scanCode这个API调起微信扫一扫,用户扫码之后,wx.scanCode的success回调会收到这个二维码所对应的字 ...