题解:P17867 [FJCPC 2026] 哦 搞错了
Dwl20121022 · · 题解
思路
不难证明
由于要构造一个大小最大可以为
注:
base 的选取依赖于比它大的与比它小的定义域内的数分别能否容纳10 ^ 5 个数。
题目允许有一位误差,先尝试无误差。
当
当
注意,为了使得
:::success[Code]
#include <iostream>
#include <string>
using namespace std;
long long A[100005];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
string S;
cin >> S;
int N = S.length();
long long Base = 1LL << 50;
int cnt = 0;
for (char c : S) if (c == '1') cnt++;
string tgt = S;
if ((cnt & 1) == 0) tgt[N-1] = '0' + '1' - tgt[N - 1];
for (int i = 0; i < N; i++) {
long long val = i + 1;
if (tgt[i] == '1') A[i] = Base + val;
else A[i] = val;
}
for (int i = 0; i < N; i++) {
printf("%lld ", A[i]);
}
return 0;
}
:::