news 2026/5/7 22:58:00

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 22:29:50

强大的SQL计算利器-SPL

强大的SQL计算利器-SPL 现代应用开发中&#xff0c;通常只用SQL实现简单的数据存取动作&#xff0c;而主要的计算过程和业务逻辑直接在应用程序中实现&#xff0c;主要原因在于&#xff1a; 过于复杂的SQL很难调试、编写、阅读、修改。SQL有方言特征&#xff0c;大量使用SQL后&…

作者头像 李华
网站建设 2026/5/7 22:27:16

三分钟搞定缠论分析:ChanlunX让技术分析变得如此简单

三分钟搞定缠论分析&#xff1a;ChanlunX让技术分析变得如此简单 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否曾经被缠论的复杂性所困扰&#xff1f;看着那些复杂的笔、段、中枢分析&#xff0c…

作者头像 李华
网站建设 2026/5/7 22:26:30

树莓派Pico在‌wsl环境移植nuttx

参考 rp2040/index.html rp2040.rst 下载文件解压并重命名 # nuttx https://ghproxy.net/https://github.com/apache/nuttx/archive/refs/tags/nuttx-12.13.0.zip # apps https://ghproxy.net/https://github.com/apache/nuttx-apps/archive/refs/tags/nuttx-12.13.0.zip #…

作者头像 李华
网站建设 2026/5/7 22:23:57

基于IEEE 14节点标准模型的复合微电网模型,微电网包括柴油发电机、光伏模型、电池储能系统、电弧炉等非线性负载附Simulink仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。 &#x1f34e;完整代码获取 定制创新 论文复现点击&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &…

作者头像 李华