UOJ Easy Round #11 科考工作 Sol
感谢 @mfeitveer 提供的思路。
昨天没听懂,今天想明白了。
大概是这样的,把众数取出来,然后把整个数组减掉众数(任意一个都行)。
拎出来众数以外的数,进行随机打乱。
然后枚举 ,计算前缀和模 的余数,存储起来。
如果发现出现过相同的余数(设为 ),那么 内的元素就模 余 。
把众数补上去(因为减掉之后为 )了,如果合法就输出答案。
反复随机打乱即可 AC()。
#include <bits/stdc++.h>
using namespace std;
const int N = 6e5 + 10;
int n, _n, a[N], cnt[N], Map[N];
vector <pair <int, int> > g;
namespace fast_io {
int it, ed, ot, t; char stk[20], bf[N + 50], ob[N + 50];
#define gc (it == ed && (ed = (it = 0) + fread(bf, 1, N, stdin), it == ed))? EOF : bf[it++]
template <typename T> inline void read(T &x) {
x = 0; char ch = gc; int f = 1;
for (; !isdigit(ch); ch = gc) if (ch == '-') f = -1;
for (; isdigit(ch); ch = gc) x = x * 10 + (ch ^ 48); x *= f; return ;
} template <typename T, typename ...Args>
inline void read(T &x, Args &...args) { read(x), read(args...); }
inline void fls() { fwrite(ob, 1, ot, stdout), ot = 0; }
template <typename T> inline void write(T x, char opt) {
while (x > 9) stk[++t] = 48 ^ (x % 10), x /= 10;
for (ob[ot++] = 48 ^ x; t; ob[ot++] = stk[t--]);
ob[ot++] = opt; if (ot > N) fls(); return ;
}
} using fast_io::read; using fast_io::write;
int main() {
read(n); _n = 2 * n - 1;
for (int i = 1; i <= _n; ++i) read(a[i]), ++cnt[a[i]];
int d = n; for (int i = 0; i < n; ++i) if (cnt[i] > cnt[d]) d = i;
if (cnt[d] >= n) {
for (int i = 1, ct = 0; i <= _n; ++i) {
if (a[i] == d) write(i, ' '), ++ct;
if (ct == n) break;
}
fast_io::fls(); return 0;
}
for (int i = 1; i <= _n; ++i) if (a[i] ^ d) g.push_back({i, (a[i] - d + n) % n});
while (1) {
int sum = 0, ct = 0;
for (auto [id, val]: g) {
(sum += val) %= n, ++ct; int &kel = Map[sum];
if (kel) {
if (!(ct - kel + cnt[d] >= n && ct - kel <= n)) continue;
vector <int> res; for (int i = kel; i < ct; ++i) res.emplace_back(g[i].first);
for (int i = 1; i <= _n; ++i) {
if (res.size() == n) break;
if (a[i] ^ d) continue; res.emplace_back(i);
}
for (auto to: res) write(to, ' ');
fast_io::fls(); return 0;
}
kel = ct;
}
random_shuffle(g.begin(), g.end());
for (int i = 0; i < n; ++i) Map[i] = 0;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现