当前位置: 首页 > news >正文

打卡信奥刷题(3224)用C++实现信奥题 P8320 『JROI-4』Sunset

P8320 『JROI-4』Sunset

题目背景

写不出优美的文字,索性不放背景了。【背景待填充】

由于这只是个 C,出题人打算良心点,于是加了几个0 00(指交互次数)(确信)——验题人注。

题目描述

这是一道交互题。

落日可以抽象成一个序列{ a n } \{a_n\}{an}.

{ a n } \{a_n\}{an}是一个1 ∼ n 1\sim n1n的排列。

你还有一个数列{ d n } \{d_n\}{dn},为当前a aa数列的前缀最大值。

换言之,
d i = max ⁡ j = 1 i { a j } d_i=\max_{j=1}^i \{a_j\}di=j=1maxi{aj}

注意:根据前文的定义,{ d n } \{d_n\}{dn}可能随着{ a n } \{a_n\}{an}数列的改变而改变。

您可以进行两种不同的操作:

  • 指定一个i ii,询问对于当前的a aa数列,d 1 ∼ i d_{1\sim i}d1i中有几个不同的值。
  • 指定一个i ii,使得a i ← 0 a_i\leftarrow 0ai0.

请使用不超过5500 55005500次操作求出原排列

保证交互库是静态的,即交互库不会在交互过程中改变a aa数列。

输入格式

本题多测,第一行一个整数T TT,表示测试组数,接下来T TT行每行一个整数n nn,表示本组数据下数列的长度。

本题使用 IO 交互模式。

交互格式

  • ? 1 i询问d 1 ∼ i d_{1\sim i}d1i中有几个不同的值,交互库会返回一个正整数x xx表示答案。

  • ? 2 i使a i = 0 a_i=0ai=0

  • ! a1 a2 a3 ... an输出答案。

请注意:在每组数据中,请保证前两种操作的次数总和不超过5500 55005500

需要注意的是,在每一次操作后,需要调用以下函数刷新缓存:

  • 对于 C/C++:fflush(stdout);
  • 对于 C++:std::cout << std::flush;
  • 对于 Java:System.out.flush();
  • 对于 Python:stdout.flush();
  • 对于 Pascal:flush(output);

对于其他语言,请自行查阅对应语言的帮助文档。

输出格式

见「交互格式」。

输入输出样例 #1

输入 #1

1 3 1 2 3 2

输出 #1

? 1 1 ? 1 2 ? 1 3 ? 2 2 ? 1 3 ! 1 2 3

说明/提示

样例仅供理解交互过程,可能不符合逻辑。

【样例解释】

初始的序列a aa1 2 3d dd1 2 3.

在对交互库输出了形如? 2 2的命令后,序列a aa变为1 0 3d dd变为1 1 3,此时d 1 ∼ d 3 d_1\sim d_3d1d3中有2 22种不同的值,分别是1 , 3 1,31,3.


可供选手参考的资料:OI Wiki-交互题|猜数(IO交互版)


数据范围

  • 对于10 % 10\%10%的数据,T = 1 T=1T=1
  • 对于30 % 30\%30%的数据,n ≤ 70 n\le 70n70
  • 对于另外20 % 20\%20%的数据,保证数列a aa随机生成;
  • 对于全部数据:T ≤ 10 , 1 ≤ n ≤ 500 T \leq 10,1\leq n\leq 500T10,1n500

C++实现

#include<bits/stdc++.h>usingnamespacestd;constintN=510;vector<int>v;intans[N];intask(intx){if(x==1)return1;printf("? 1 %d\n",x);fflush(stdout);intt;scanf("%d",&t);returnt;}intra;intgetmx(intl,intr){if(l==r)returnl;intmid=l+r>>1;intt=ra,tt=ask(mid);if(t==tt){ra=tt;returngetmx(l,mid);}else{ra=t;returngetmx(mid+1,r);}}intmain(){intt,n;scanf("%d",&t);while(t--){scanf("%d",&n);for(inti=n;i;--i){ra=ask(n);intk=getmx(1,n);ans[k]=i;printf("? 2 %d\n",k);fflush(stdout);}printf("!");for(inti=1;i<=n;++i)printf(" %d",ans[i]);puts("");fflush(stdout);}return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

http://www.jsqmd.com/news/773017/

相关文章:

  • FastAPI CORS 跨域
  • 3DS FBI Link终极指南:Mac上最便捷的3DS文件传输工具
  • 从Windows 11到Nano Server:一张图看懂.NET 6与.NET 7的跨平台支持矩阵
  • 别再乱用 String 了!底层原理、常量池、拼接陷阱全解析
  • 2026年5月国内正规市场地位证明机构实测排行与能力解析 - 速递信息
  • 2026年最新市场地位认证技术维度解析与专业机构能力评估 - 速递信息
  • 使用OpenClaw构建AI智能体时配置Taotoken作为提供商
  • MPC-BE开源媒体播放器技术架构深度解析
  • ros2 从零开始19 使用 Node Interfaces 模板类(C++)
  • 2026 年孟德尔·格林伯格分享 OurCar 开发经验:解决家庭共享汽车难题!
  • QQ自定义在线状态改在线源码
  • FastAPI 静态文件
  • 【2026实战】双栈协同:Python+Go混合架构完整实战
  • 解密TlbbGmTool:如何高效管理天龙八部单机版游戏数据的3个核心问题
  • XSLT 实例
  • VS3000芯片深度体验:除了传4K,它的USB和网络功能在视频会议里到底有多香?
  • 高频脉冲电源选购:高性价比靠谱产品筛选策略解析
  • Java 代码质量度量指标:评估代码质量的标准
  • FastAPI 安全认证
  • ComfyUI Manager:AI绘画插件的智能管家,5分钟打造高效创作环境
  • Fast-GitHub加速插件:3步解决国内GitHub访问难题的终极方案
  • 全面解决Kohya_ss安装问题的10个专业技巧:从环境配置到高效训练
  • runprompt:基于Dotprompt格式的命令行LLM提示词工程化与自动化工具
  • Botty终极指南:5步配置暗黑2重制版24小时自动化MF脚本
  • 读源码像读小说?试了 DeepWiki 和 Zread,我再也不想裸读 GitHub 了
  • Moodle自动化工具:零配置API客户端与AI助手集成实战
  • 终极ComfyUI-Manager完全指南:快速部署与高效管理自定义节点
  • Java后端面试:核心基础考点,String、StringBuilder、StringBuffer 区别详解
  • 别再死记硬背了!用Verilog手把手带你理解CRC校验的电路核心(附串行/并行实现代码)
  • 节后系统恢复中的技术操作:批量处理、数据一致性与人机协作