洛谷 P9916 「RiOI-03」Just a Q. (Easy ver.) 题解
前言
Div.2 Rank \(13\) 获奖了,题目也好评。
解法
题目链接:\(\color{Purple}\texttt{P9916「RiOI-03」Just a Q. (Easy ver.)}\)。
从 Subtask \(3\) 出发,考虑构造 \(\prod(a_i+1)\) 这种形式,因为它可以便利地在加入一个新数维护当前乘积的正负性,进而推出该数的正负性;加入一个新数时只需枚举遍历过的每一个子集,对该子集加入该数后形成的集合作询问并存储,可以过 Subtask \(3\)。如果把 \(a_1+1\) 换成 \(a_1\)(即一开始不询问那个空集)那么就能把询问次数除以 \(2\),可以过 Subtask \(4\)。
正解需要一个 trick:先前一个一个数的做法询问次数很多,考虑把一些数一起询问。具体地,使用二分,令 \(m\) 为二分中点,每次将 \(q_{[l,m)}\)(这里 \(m=\left\lceil\frac{l+r}{2}\right\rceil\))绑在一起进行询问。如果 \(Q=0\),那么仿照上面 Subtask \(4\) 对 \(a_1\) 的处理方法把当前集合清空并仅加入 \([l,m)\),正负性直接询问;否则考虑这一段的乘积正负性只需将其询问的最终结果的符号 \(\mathrm{sgn}(Q')\) 与上一次的结果的符号 \(\mathrm{sgn}(Q)\) 比较,如果相同则这一段乘积为正,否则为负。
原来的集合可以用 std::vector 存储 std::pair 实现。
放代码:
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
char ask(vector<pii> a){
vector<int> v; char c;
for(auto [l,r]:a)
for(int j=l;j<=r;j++)
v.emplace_back(j);
cout<<"? "<<v.size()<<' ';
for(int i:v)cout<<i<<' ';
cout<<endl,cin>>c;
return c;
} // 单次询问
int main(){
ios::sync_with_stdio(false);
int t; cin>>t;
while(t--){
int n,k; cin>>n>>k>>n;
int l=1,r=n; bool f=true; char s='+';
vector<vector<pii> > a;
while(l<r){
int m=l+r+1>>1; char c;
if(f){
s='+',a={{make_pair(l,m-1)}};
c=ask(a[0]),f=false;
} // Q=0 时
else{
vector<vector<pii> > b;
for(auto i:a){
vector<pii> v=i;
v.emplace_back(l,m-1);
b.emplace_back(v);
c=ask(v);
} // 遍历并询问
a.insert(a.end(),b.begin(),b.end());
// 将产生的新集合加入 a 中
}
if(c==s)l=m; // 贡献为正,负数在右
else if(c==48)r=m-1,f=true;
else s=c,r=m-1; // 贡献为非正数,负数在左
}
cout<<"! "<<l<<endl;
}
return 0;
}
洛谷 P9916 「RiOI-03」Just a Q. (Easy ver.) 题解的更多相关文章
- [洛谷P3701]「伪模板」主席树
题目大意:太暴力了,就不写了,看这儿 题解:对于每个$byx$的人,从源点向人连边,容量为此人的寿命. 对于每个手气君的人,从人向汇点连边,容量为此人的寿命. 对于每个$byx$的人与手气君的人,如果 ...
- LOJ 3119: 洛谷 P5400: 「CTS2019 | CTSC2019」随机立方体
题目传送门:LOJ #3119. 题意简述: 题目说的很清楚了. 题解: 记恰好有 \(i\) 个极大的数的方案数为 \(\mathrm{cnt}[i]\),则答案为 \(\displaystyle\ ...
- LOJ 3120: 洛谷 P5401: 「CTS2019 | CTSC2019」珍珠
题目传送门:LOJ #3120. 题意简述: 称一个长度为 \(n\),元素取值为 \([1,D]\) 的整数序列是合法的,当且仅当其中能够选出至少 \(m\) 对相同元素(不能重复选出元素). 问合 ...
- 洛谷 P4710 「物理」平抛运动
洛谷 P4710 「物理」平抛运动 洛谷传送门 题目描述 小 F 回到班上,面对自己 28 / 110 的物理,感觉非常凉凉.他准备从最基础的力学学起. 如图,一个可以视为质点的小球在点 A(x_0, ...
- 洛谷比赛 「EZEC」 Round 4
洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...
- 题解-洛谷P6788 「EZEC-3」四月樱花
题面 洛谷P6788 「EZEC-3」四月樱花 给定 \(n,p\),求: \[ans=\left(\prod_{x=1}^n\prod_{y|x}\frac{y^{d(y)}}{\prod_{z|y ...
- 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码
洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...
- 洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码
洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里 ...
- LOJ 2743(洛谷 4365) 「九省联考 2018」秘密袭击——整体DP+插值思想
题目:https://loj.ac/problem/2473 https://www.luogu.org/problemnew/show/P4365 参考:https://blog.csdn.net/ ...
- 洛谷 P7879 -「SWTR-07」How to AK NOI?(后缀自动机+线段树维护矩乘)
洛谷题面传送门 orz 一发出题人(话说我 AC 这道题的时候,出题人好像就坐在我的右侧呢/cy/cy) 考虑一个很 naive 的 DP,\(dp_i\) 表示 \([l,i]\) 之间的字符串是否 ...
随机推荐
- 聊聊GLM基座模型的理论知识
概述 大模型有两个流程:预训练和推理. 预训练是在某种神经网络模型架构上,导入大规模语料数据,通过一系列的神经网络隐藏层的矩阵计算.微分计算等,输出权重,学习率,模型参数等超参数信息. 推理是在预训练 ...
- 流畅的orm让我发现我抵触的是mybatis而不是java
流畅的orm让我发现我抵触的是mybatis而不是java 背景介绍 开发.net 也快10年了,到第三年的时候我已经渐渐瓶颈了,于是我在网上找各种资料但是大部分c#资料全是皮毛资料,稍微深一点点就再 ...
- Oracle-lsnrctl监听进程控制
LSNRCTL> help The following operations are available An asterisk (*) denotes a modifier or extend ...
- 一款基于.NET Core的快速开发框架、支持多种前端UI、内置代码生成器
前言 经常看到有小伙伴在技术群里问有没有什么好用且快速的开发框架推荐的,今天就给大家分享一款基于MIT License协议开源.免费的.NET Core快速开发框架.支持多种前端UI.内置代码生成器. ...
- 为什么说数字孪生和GIS高度互补?它们各自从对方那里获得了什么?
在数字化时代,数字孪生和GIS作为两项重要技术,它们的融合正日益受到人们的关注和认可.数字孪生是将实体世界与数字世界紧密结合的技术,可以创建实时的虚拟副本,对物理系统进行模拟.优化和预测.而GIS则是 ...
- Kernel Memory 入门系列:自定义处理流程
Kernel Memory 入门系列:自定义处理流程 在整个文档预处理的流程中,涉及到很多的处理步骤,例如:文本提取,文本分片,向量化和存储.这些步骤是Kernel Memory中的默认提供的处理方法 ...
- Windows Server 2019/2016 配置自动更新和更换大陆更新服务器
文章原地址: 运行 > gpedit.msc -> 计算机配置 -> 管理模板 -> Windows 组件 -> Windows 更新 下面中右侧三个选项是本篇教程中会介 ...
- C语言之小明的加减法
1.题目内容: 叛逆期的小明什么都喜欢反着做,连看数字也是如此(负号除外),比如: 小明会把1234它看成4321:把-1234看成-4321:把230看成032 (032=32):把-230看成-0 ...
- puppeteer的简单使用
引言 对于编写应用程序,尤其是要部署上线投入生产使用的应用,QA是其中重要的一环,在过去的工作经历中,我参与的项目开发,大多是由测试同学主要来把控质量的,我很少编写前端方面的测试代码,对于测试工具的使 ...
- 文心一言 VS 讯飞星火 VS chatgpt (47)-- 算法导论6.1 5题
五.一个已排好序的数组是一个最小堆吗? 文心一言: 一个已排好序的数组不一定是一个最小堆.最小堆是一种特殊的二叉树,它满足以下性质:对于任意节点 x,其父节点 y 的值都小于等于 x 的值.而一个已排 ...