加加又赛赛
相信大家都听说过 5k 保龄了,那么 5k 保龄了是怎么回事呢?其实 5k 保龄了是因为他是唐氏儿,对拍之后把 freopen 删掉了,小编也很惊讶,但事实就是这样。大家对 5k 保龄了还有什么看法,欢迎在评论区与小编讨论哦~
A
考虑贪心,每个月把能买的钻石全买下来,最后把多余的“退掉”(视为当时没买)。
维护
考虑第
线段树维护
B
把所有字符串排序,
用分讨或者别的什么方法容易证明这是偏序。
C
Nim-K 博弈:有
结论:把每堆石子的数量的二进制表示
证明参考原版 Nim 游戏,还是比较简单的。
不能让绿龙选出一个“异或”和为 0 的子集,也就是说选出的人的
则问题转化为选出一个子集使得
朴素实现难以通过,维护三进制向量时可以维护 0、1、2 的位置集合的状压值,少一个
顶针要代码,那就放一下代码:
#include <cstdio>
#include <algorithm>
#define int long long
using namespace std;
int n, q;
struct S
{
int p0, p1, p2, v;
int operator[](int x) { return p0 >> x & 1 ? 0 : p1 >> x & 1 ? 1 : 2; }
S operator*(int k) { return k == 1 ? S{p0, p1, p2, v} : S{p0, p2, p1, v}; }
S operator-(S b) { return S{p0 & b.p0 | p1 & b.p1 | p2 & b.p2, p1 & b.p0 | p2 & b.p1 | p0 & b.p2, p2 & b.p0 | p0 & b.p1 | p1 & b.p2, v}; }
} p[150];
void I(S u)
{
for (int i = 60; i >= 0; --i)
if (u[i])
{
if (!p[i][i])
{
p[i] = u, q += u.v;
return;
}
if (u.v > p[i].v)
q += u.v - p[i].v, swap(p[i], u);
u = u - p[i] * (u[i] * p[i][i] % 3);
}
}
signed main()
{
freopen("a.in", "r", stdin);
freopen("a.out", "w", stdout);
scanf("%lld", &n);
for (int i = 1, x, y, _ = 0; i <= n; ++i)
{
scanf("%lld%lld", &x, &y), x ^= _;
S u = {0, 0, 0};
for (int i = 0; i <= 60; ++i)
if (x >> i & 1)
u.p1 |= 1ll << i;
else
u.p0 |= 1ll << i;
u.v = y, I(u);
printf("%lld\n", _ = q);
}
return 0;
}
“异或”的引号的作用是什么?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具