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

题解:CF2133C The Nether

挺好玩的交互题。

思路

首先,我们一定需要知道 DAG 中最长路径的起点,这可以通过 \(n\) 次询问来找到。即对于每一个点 \(i\) 满足 \(1\le i\le n\) 我们都去查询从 \(i\) 开始,经过整个 DAG 可以得到的最长路是多少,同时使用一个 vector 记录长度为 \(len\) 的点有哪些。

设查询到的最长路径的长度为 \(maxn\),最长路径的起点为 \(u\),那么现在考虑从最长路径为 \(maxn-1\) 点一直查询到最长路径为 \(1\) 的点。在查询时维护一个点集 \(S\) 表示最长路径里的点,一开始 \(S=\{u\}\),然后在每次查询时都把点集里的点和即将要查询的点 \(v\) 输出,如果得到的结果比只通过点集里的点走出的最长路要长的话,就说明点 \(v\) 在最长路径上,于是也把点 \(v\) 加入点集 \(S\)。在这部分查询中,我们只会遍历 vector 中的元素一遍,也就是只会有 \(n\) 次询问,满足题意。

最后,点集 \(S\) 里的点便是最长路径上的点,将其顺序输出即可。

注意要特判一下 \(maxn\)\(1\) 的情况。

代码

赛时丑陋代码:

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define i128 __int128
#define inf (1ll << 62)
#define PII pair<int, int>
#define pb push_back
#define fi first
#define se second
using namespace std;void solve() {int n;cin >> n;int node, maxn = 0;vector<vector<int>> pos(n + 1);for (int i = 1; i <= n; i++) {cout << "? " << i << " " << n << " ";for (int j = 1; j <= n; j++) cout << j << " ";cout << "\n";cout.flush();int length;cin >> length;if (maxn < length) {maxn = length;node = i;}pos[length].pb(i);}if (maxn == 1) {cout << "! 1 1\n";cout.flush();return;}vector<int> path(maxn);int last = 1;for (int i = maxn - 1; i >= 1; i--) {for (auto j : pos[i]) {cout << "? " << node << " " << maxn - i + 1 << " " << node << " ";for (int k = maxn - 1; k > i; k--) cout << path[k] << " ";cout << j << "\n";cout.flush();int length;cin >> length;if (length > last) path[i] = j;}last++;}cout << "! " << maxn << " " << node << " ";for (int i = maxn - 1; i >= 1; i--) cout << path[i] << " ";cout << "\n";cout.flush();
}int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;cin >> t;while (t--) {solve();}return 0;
}
http://www.rkmt.cn/news/3381.html

相关文章:

  • 实变函数1
  • 一元二次方程难题1
  • C#学习第十 一天 022 事件最后一章
  • 元推理无需数据训练,只需数据检索和验证,成本极大降低,且校验后的数据就是数据资产和规范
  • 集训总结(五)
  • 使用Android(Kotlin)+ ML Kit:移动端英文数字验证码识别实战
  • Typescript中的泛型
  • windows软件入门指南
  • 网络爬虫(web crawler) - 指南
  • css样式与选择器
  • 《提问的艺术》笔记:(2025/9/12)
  • 使用helm安装APISIX
  • 决策单调性
  • 实用指南:Git分支管理:从创建到合并冲突解决(二)
  • 20250912
  • [ARC198C] Error Swap
  • 向“光”而行 | 相聚2025 ASML中国日,携手奔赴“芯”辰大海
  • JavaDay3
  • U3D动作游戏开发读书笔记--2.2 编辑器本身的基础知识
  • 临时代码存储
  • 地平线与哈啰合作 加速L4自动驾驶研发
  • 华为智驾赋能「小Q7」,一汽奥迪Q6L e-tron刷新豪华纯电SUV认知
  • 菱形图形输出
  • 9-12
  • 20250909
  • 9.11日总结
  • 02020305 .NET Core核心基础组件05-开发自己的配置提供者(本课没听懂,后续再补)
  • ABC_419_F - All Included
  • 漏洞解析--文件包含漏洞究竟怎么用?
  • CF182C