洛谷 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]\) 之间的字符串是否 ...
随机推荐
- A Novel Cascade Binary Tagging Framework for Relational Triple Extraction(论文研读与复现)
A Novel Cascade Binary Tagging Framework for Relational Triple Extraction Zhepei Wei,Jianlin Su, Yue ...
- 【UniApp】-uni-app-动态计算字体大小(苹果计算器)
前言 本文主要介绍uni-app中动态计算字体大小的方法 原因呢就是在上一篇文章当中我发现输入的内容已经超过了展示区域 于是我就想到了动态计算字体大小的方法,这样就可以保证输入的内容不会超过展示区域 ...
- 这些 git 高级命令你知道几个
大家好,我是 dom 哥.今天给大家分享几个 git 的高级应用. git 是目前最流行的版本控制工具.git 玩的 6 不 6,轻则影响自己的开发幸福指数 ,重则影响下班时间 .本文介绍一些日常开发 ...
- eclipse工具使用
eclipse下载 官网下载:https://www.eclipse.org/downloads/packages/ 打开后,找到Eclipse IDE for Java Developers点击进入 ...
- MS17-010(永恒之蓝)漏洞分析与复现
一.漏洞简介1.永恒之蓝介绍:永恒之蓝漏洞(MS17-010),它的爆发源于 WannaCry 勒索病毒的诞生,该病毒是不法分子利用NSA(National Security Agency,美国国家安 ...
- STM32CubeMX教程12 DMA 直接内存读取
使用STM32CubeMX软件配置STM32F407开发板上串口USART1进行DMA传输数据,然后实现与实验"STM32CubeMX教程9 USART/UART 异步通信"相同的 ...
- 国内AI大模型 VS chatgpt (20)-- H265/H264有何不同,h265有什么优势?
H265/H264有何不同,h265有什么优势? 文心一言: H.264和H.265是两种不同的视频编码标准,它们在压缩质量和带宽需求方面有所不同. H.264是一种高效的视频压缩标准,它的编码单位是 ...
- 云图说|初识云数据库GaussDB(for Cassandra)
摘要:不用再为数据不一致苦恼,因为强一致的Cassandra来了,DBA们不用加班修数据了.GaussDB(for Cassandra)是一款基于华为自主研发的计算存储分离架构的分布式云数据库服务,是 ...
- 关于单元测试的那些事儿,Mockito 都能帮你解决
摘要:相信每一个程序猿在写Unit Test的时候都会碰到一些令人头疼的问题:如何测试一个rest接口:如何测试一个包含客户端调用服务端的复杂方法:如何测试一个包含从数据库读取数据的复杂方法...这些 ...
- 云图说 | 华为云医疗智能体EIHealth,AI赋能基因组研究
摘要: 华为云医疗智能体面为基因组研究,提供高性能.高可靠性.高性价比的基因测序计算.存储和AI能力. 本文分享自华为云社区<[云图说]第230期 医疗智能体:AI赋 ...