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

loj

Luogu

题解时间

真的有点猛的思维题。

首先有一个十分简单的思路:

花费 $ 2N $ 确定一个为 $ 1 $ 的数。

之后每次随机选择一对没有确定的数 $ x,y $ 与 $ 1 $ 比较,再将 $ x,y $ 相互比较,总能确定其中一个数的值。

这样是 $ 7N $ 。

而另一方面,这道题也是正解来自部分分。

考虑子任务3:

很明显首先一次比较确定是先0后1还是先1后0,

之后二分确定分界的位置即可,花费是 $ 3logN $ 。

观察正解数据范围,正好是 $ 5N+3logN $ 。

考虑能不能向上面的子任务转化。

我们发现 $ 7N $ 暴力仅使用后 $ 5N $ 的操作依然可以确定为0的数,最终留下一个0000......11111的序列,进而得解。

具体实现比较复杂。

#include<bits/stdc++.h>
// #include"shop.h"
using namespace std;
typedef long long lint;
int query(int *S, int nS, int *T, int nT);
int lst1[2],lst2[2];
int sta[100011],stp;
int cmp(const int &a,const int &b){lst1[0]=a,lst2[0]=b;return query(lst1,1,lst2,1);}
int cmp(const int &a,const int &b,const int &c){lst1[0]=a,lst1[1]=b,lst2[0]=c;return query(lst1,2,lst2,1);}
void fix(int &a,int &b){if(!cmp(a,b)) swap(a,b);}
void ThirdAvenue(int task_id,int n,int K,int ans[])
{
int l=0,r=0,mid=0,k=0;
if(cmp(0,n-1))
{
l=0,r=n-2;while(l<=r){mid=l+r>>1;cmp(mid,mid+1,n-1)?(k=mid+1,l=mid+1):(r=mid-1);}
for(int i=0;i<k;i++) ans[i]=0;for(int i=k+1;i<n;i++) ans[i]=1;
ans[k]=K^((n-1-k)&1);
}else
{
l=1,r=n-1;while(l<=r){mid=l+r>>1;cmp(mid-1,mid,0)?(r=mid-1):(k=mid,l=mid+1);}
for(int i=0;i<k;i++) ans[i]=1;for(int i=k+1;i<n;i++) ans[i]=0;
ans[k]=K^(k&1);
}
}
void EnergySynergyMatrix(int task_id,int n,int K,int ans[])
{
int x=0,y=1;for(int i=2,z=i;i<n;i++,z=i)
{
fix(x,z);if(cmp(x,z,y)) ans[x]=0,swap(x,z);
else sta[stp++]=y,swap(y,z);
}fix(x,y),ans[y]=1;if(!stp){ans[x]=K^1;return;}sta[stp++]=y;
int l=0,r=stp-2,mid=0,k=0;while(l<=r){mid=l+r>>1;cmp(sta[mid],sta[mid+1],y)?(k=mid+1,l=mid+1):(r=mid-1);}
for(int i=0;i<k;i++) ans[sta[i]]=0;for(int i=k+1;i<stp;i++) ans[sta[i]]=1;
int z=sta[k];fix(x,z);
if(cmp(x,z,y)) ans[x]=0,ans[z]=K^((stp-1-k)&1);
else ans[x]=!(K^((stp-1-k)&1)),ans[z]=1;
}
void find_price(int task_id,int n,int K,int ans[])
{
if(task_id==3) return ThirdAvenue(task_id,n,K,ans);
else return EnergySynergyMatrix(task_id,n,K,ans);
}

loj2985「WC2019」I 君的商店(二分,思维)的更多相关文章

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

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

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

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

  3. 【LOJ】#2983. 「WC2019」数树

    LOJ2983. 「WC2019」数树 task0 有\(i\)条边一样答案就是\(y^{n - i}\) task1 这里有个避免容斥的方法,如果有\(i\)条边重复我们要算的是\(y^{n - i ...

  4. loj3161「NOI2019」I 君的探险(随机化,整体二分)

    loj3161「NOI2019」I 君的探险(随机化,整体二分) loj Luogu 题解时间 对于 $ N \le 500 $ 的点,毫无疑问可以直接 $ O(n^2) $ 暴力询问解决. 考虑看起 ...

  5. 「ZJOI2018」胖(ST表+二分)

    「ZJOI2018」胖(ST表+二分) 不开 \(O_2\) 又没卡过去是种怎么体验... 这可能是 \(ZJOI2018\) 最简单的一题了...我都能 \(A\)... 首先我们发现这个奇怪的图每 ...

  6. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

    #2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  7. 【loj2985】【WC2019】I君的商店

    题目 交互题: 有\(n\)个物品,每个物品的价格为0或者1; 给出为1的物品的个数奇偶性k,并保证至少有一个价格为1: 每次可以询问一个集合S的另一个集合T的价值和的大小,交互库会返回>=或者 ...

  8. LOJ#2983. 「WC2019」数树

    传送门 抄题解 \(Task0\),随便做一下,设 \(cnt\) 为相同的边的个数,输出 \(y^{n-cnt}\) \(Task1\),给定其中一棵树 设初始答案为 \(y^n\),首先可以发现, ...

  9. LOJ#2983. 「WC2019」数树 排列组合,生成函数,多项式,FFT

    原文链接www.cnblogs.com/zhouzhendong/p/LOJ2983.html 前言 我怎么什么都不会?贺忙指导博客才会做. 题解 我们分三个子问题考虑. 子问题0 将红蓝共有的边连接 ...

随机推荐

  1. Solution -「洛谷 P4320」道路相遇

    \(\mathcal{Description}\)   Link.   给定一个 \(n\) 个点 \(m\) 条边的连通无向图,并给出 \(q\) 个点对 \((u,v)\),询问 \(u\) 到 ...

  2. Linux编译安装升级bash5.1

    线上服务器有次做漏洞扫描时,被扫描出有bash漏洞.平时还是比较少遇到有bash的漏洞,好在编译升级比较简单. 测试环境系统:CentOS.Ubuntu 一.下载官网最新bash版本 bash官网下载 ...

  3. 使用docker部署awx-1.7.1.0(ansible图形化界面)

    文章目录 关于环境 下载awx 下载安装所需依赖 安装docker-compose 配置inventory文件 出现的报错 TASK [local_docker : Run migrations in ...

  4. 初识面向对象(Day17-Day18)

    人狗大战的游戏 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍 ...

  5. 『无为则无心』Python面向对象 — 53、对Python中封装的介绍

    目录 1.继承的概念 2.继承的好处 3.继承体验 4.单继承 5.多继承 1.继承的概念 在Python中,如果两个类存在父子级别的继承关系,子类中即便没有任何属性和方法,此时创建一个子类对象,那么 ...

  6. 金融数据分析还能这样做?快试试这个BI工具小白也能学会!

    说起银行.保险.股票投资等这些金融行业,大多数人都认为它们都是依靠数据驱动的企业,毕竟大数据的诞生本来就是为了金融信息流通而服务的,但是事实真的是这样吗? 事实并非如此,真正在金融行业做数据分析的人, ...

  7. 习惯用excel却满足不了数据分析的需求怎么办?本文给您方法

    Excel 可以说是如今最常用的做分析统计的工具了,简单易用且功能强大,但是excel难以满足一些高端的数据分析需求,主要存在的问题体现在数据共享.数据权限.数据量等方面. 那如果有一款工具既不用你花 ...

  8. 报表软件测评来啦!Smartbi电子表格使用感受

    最近因为工作需求,需要用到一些报表工具软件,看到Smartbi比较方便,可以直接在excel中进行配置,所以安装体验了一下. 下载 Smartbi有多个版本,我主要是在excel中使用,所以下载了一个 ...

  9. 案例十:shell编写nginx服务启动程序

    使用源码包安装的Nginx没办法使用"service nginx start"或"/etc/init.d/nginx start"进行操作和控制,所以写了以下的 ...

  10. 【C# 集合】HashTable .net core 中的Hashtable的实现原理

    上一篇我介绍了Hash函数 这篇我来说一下Hash函数在 HashTable中的应用. HashTable的特性: 1.装载因子:.net core 0.72 ,java 0.75 2.冲突解决方案: ...