CodeForces 1840G In Search of Truth

洛谷传送门

CF 传送门

每次询问获得的信息只有当前所在位置的数字。考虑这样一件事情,如果我们询问了 b1,b2,...,bk 之后,走到了询问 b1 前所在的数字,就说明 ni=1kbi。可以考虑构造一个步数序列 a1,a2,...,am,如果能满足任何一个 x[1,106] 都存在 1lrm 使得 i=lrai=x,那么就做完了。

先考虑 G1 2023 次询问怎么做。发现是 2n 级别,启发我们类似 BSGS 地,构造 a1=a2==a1000=1,a1001=a1002==a2000=1000。所用询问次数为 2000可以通过 G1

但是 G2 只能询问 1000 次。发现此时无论如何都不能构造出满足条件的 m1000 的步数序列。我们还发现一件事情,就是所到达位置的数字一定 n。那我们是不是可以先在这个圆上随机游走一会,得到 n 的一个紧一点的下界呢?发现这样是可行的。具体地,设置一个 B,先随机游走 9982B 次,得到经过的数字的最大值 k,然后构造 a1=a2==aB=1,aB+1=k,aB+2=aB+3==a2B+1=B2 即可。总共使用 999 次询问(不知道为什么最多用 999 次,用 1000 次就不行)。

可以发现出错的情况就是,随机 9982B 次随不到 [nB(B+1),n] 的数。取 B=339,出错概率 <1017可以通过 G2

code
// Problem: G2. In Search of Truth (Hard Version)
// Contest: Codeforces - Codeforces Round 878 (Div. 3)
// URL: https://codeforces.com/contest/1840/problem/G2
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mems(a, x) memset((a), (x), sizeof(a))
using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;
inline int ask(int x) {
if (x > 0) {
printf("+ %d\n", x);
} else {
printf("- %d\n", -x);
}
fflush(stdout);
scanf("%d", &x);
return x;
}
const int maxn = 1010;
int n = 339, a[maxn], b[maxn];
mt19937 rnd(time(NULL));
void solve() {
int k = 0;
scanf("%d", &k);
for (int _ = 0; _ < 998 - n * 2; ++_) {
a[0] = ask(rnd() % 1000000000 + 1);
k = max(k, a[0]);
}
for (int i = 1; i <= n; ++i) {
a[i] = ask(1);
}
b[0] = ask(k);
for (int i = 1; i <= n; ++i) {
b[i] = ask(n);
}
int ans = 1e9;
for (int i = 0; i <= n; ++i) {
for (int j = i + 1; j <= n; ++j) {
if (a[i] == a[j]) {
ans = min(ans, j - i);
}
if (b[i] == b[j]) {
ans = min(ans, (j - i) * n);
}
}
}
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= n; ++j) {
if (a[i] == b[j]) {
ans = min(ans, n - i + j * n + k);
}
}
}
printf("! %d\n", ans);
fflush(stdout);
}
int main() {
int T = 1;
// scanf("%d", &T);
while (T--) {
solve();
}
return 0;
}
posted @   zltzlt  阅读(76)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示