news 2026/5/8 16:27:41

打卡信奥刷题(3229)用C++实现信奥题 P8430 [COI 2020] Zagrade

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(3229)用C++实现信奥题 P8430 [COI 2020] Zagrade

P8430 [COI 2020] Zagrade

题目背景

本题为交互题

众所周知,中央情报局的工作是收集,处理和分析国家安全信息。现在他们拥有了大量的计算机密码,并且正在开发一些相当复杂的工具,来破坏受密码保护的系统。

现在,您的任务是破坏中央情报局服务器的安全性。自然,他们很清楚人们在输入密码的时候通常会输入什么东西,因此尝试输入123456,1q2w3e4rWelcome肯定是没有用的。幸运的是,我们发现了某些可能对您有用的信息。

题目描述

现在已知中央情报局服务器的主密码由n nn个字符(n nn为偶数)构成,其中一半是左括号,一半是右括号。一些记性不好的服务器管理员会忘记这个主密码,所以服务器提供了找回密码的工具。管理员最多可以使用Q QQ次这个工具,每次使用时都会询问这个密码l llr rr位的括号串是否合法。

对于一个括号串合法的定义:

  • ()是一个合法的括号串。
  • A是一个合法的括号串,那么(A)也是一个合法的括号串。
  • AB都是合法的括号串,那么AB也是合法的括号串。

现在你需要写出一个程序来模拟管理员找回密码的过程。

在进行交互之前,您的程序应该从输入中读取偶数n nn和整数Q QQ,这两个数字的含义见题目描述。

之后,您的程序可以通过向标准输出输出来发送查询请求。每个查询必须在单独的行中打印,并采用? a b,其中1 ≤ a ≤ b ≤ n 1 \leq a \leq b \leq n1abn。每个查询之后,您的程序应清空缓冲区并从标准输入中读取答案。

当你推理出密码时,请在标准输出中输出:! x1 x2 x3 …… xn的形式,之后你的程序应清空缓冲区并正常终止程序运行。

输入格式

第一行两个整数n , Q n,Qn,Q

接下来若干行,每行对于每个查询给出答案。

输出格式

若干行,表示查询。

最后一行表示最后得出的答案。

输入输出样例 #1

输入 #1

6 9 1 0 0 1 1

输出 #1

? 1 6 ? 1 2 ? 2 4 ? 2 5 ? 3 4 ! ((()))

说明/提示

样例解释

? 1 6对应的是整个串,当然是合法的。
? 1 2对应的是((不合法。
? 2 4对应的是(()不合法。
? 2 5对应的是(())合法。
? 3 4对应的是()合法。

数据规模与约定

本题采用捆绑测试

  • Subtask 1(14 pts):1 ≤ n ≤ 1000 1\leq n\leq 10001n1000Q = n 2 4 Q=\frac{n^2}{4}Q=4n2,保证整个括号序列合法。
  • Subtask 2(7 pts):1 ≤ n ≤ 1000 1\leq n\leq 10001n1000Q = n 2 4 Q=\frac{n^2}{4}Q=4n2
  • Subtask 3(57 pts):1 ≤ n ≤ 100000 1\leq n\leq 1000001n100000Q = n − 1 Q=n-1Q=n1,保证整个括号序列合法。
  • Subtask 4(12 pts):1 ≤ n ≤ 100000 1\leq n\leq 1000001n100000Q = n − 1 Q=n-1Q=n1

对于100 % 100\%100%的数据,1 ≤ n ≤ 100000 1\leq n\leq 1000001n100000n − 1 ≤ Q n-1\leq Qn1Q

说明

翻译自 Croatian Olympiad in Informatics 2020 D Zagrade。

C++实现

#include<cstdio>#include<iostream>usingnamespacestd;intn,f[100010],top,i,s;charans[100010];main(){cin>>n>>i;for(i=1;i<=n;i++){top++;f[top]=i;if(top>1){cout<<"? "<<f[top-1]<<" "<<f[top]<<endl;cin>>s;if(s==1){ans[f[top-1]]='(';ans[f[top]]=')';top=top-2;}}}for(i=1;i*2<=top;i++)ans[f[i]]=')';for(;i<=top;i++)ans[f[i]]='(';cout<<"! "<<ans+1<<endl;}

后续

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

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

Flutter拖拽批量选择drag_selectable_listview

&#x1f680; Flutter 实现“拖拽批量选择 ListView”&#xff0c;我封装成了一个通用组件 在 Flutter 开发中&#xff0c;有一个非常常见但官方不支持的交互&#xff1a; &#x1f449; 像文件管理器一样&#xff0c;通过“拖拽”批量选择列表项 Demo 比如&#xff1a; 多选…

作者头像 李华
网站建设 2026/5/8 16:24:54

用LM386给Arduino Nano做个迷你音箱:从PWM输出到清晰放音的全流程

用LM386打造Arduino Nano迷你音箱&#xff1a;从电路设计到音质优化的完整指南 当你用Arduino Nano播放音乐时&#xff0c;是否曾被PWM输出的刺耳音质困扰&#xff1f;市面上的音频模块要么太贵&#xff0c;要么体积庞大。其实只需要一颗售价不到5元的LM386芯片&#xff0c;就能…

作者头像 李华
网站建设 2026/5/8 16:24:51

告别数据错位!STM32串口通信中结构体内存对齐的完整解决方案(附代码)

STM32串口通信中的结构体内存对齐陷阱与实战解决方案 在嵌入式开发中&#xff0c;串口通信是最基础也最常用的外设接口之一。许多开发者习惯将接收到的数据流直接映射到结构体&#xff0c;这种看似优雅的做法却隐藏着一个深坑——内存对齐问题。当你在STM32上使用memcpy将字节数…

作者头像 李华