AGC043 B题题解
有的时候,碰到一道题,要给自己先设立部分分,再去想如何把部分分推广到一般情况。这题就是绝佳的例子。
不妨将ai用ai−1替代,这样就变成了ai∈{0,1,2}了。
我们给自己设立的部分分是ai∈{0,1}时怎么做。
我们会发现xi,j≡xi−1,j+xi−1,j+1(mod了。于是我们在\bmod 2意义下计算出x_{n, 1}即可。
用简单的归纳法即可得到x_{n, 1} \equiv \sum_{i = 1}^{n} {{{n - 1} \choose {i - 1}} a_i} (\bmod 2)。
我们接下来的工作是研究这个做法如何推广。我们发现这个做法能够计算出x_{n, 1} \mod 2的值。如果发现它模2余1,就可以唯一确定它是1。否则我们要辨别它到底是0还是2。
如果x_{1, 1}, ... x_{n, 1}中有一个1的话,分析x_{i, 1}, ..., x_{i, n + 1 - i}这些数。如果它有一些1且不全是1的话,那么x_{i + 1, 1}, ..., x_{i + 1, n - i}这一行也必定有1。如果每一行都满足这一行的数必定有1的话,那么x_{n, 1} = 1,与我们之前的假设矛盾。因此我们一定有一行全是1,这样才能生成一个没有1的一行。在这一行之后所有数都变成0了,所以x_{n, 1} = 0。
否则我们又可以假设x_{1, 1}, ..., x_{n, 1}全部不为1,将它们通通除以2后再使用部分分的算法即可!、
时间复杂度为O(n),可以轻松通过此题。
代码如下:
#include <bits/stdc++.h>
#define debug(x) cerr << #x << " " << (x) << endl
using namespace std;
const int N = 1000005;
template <class T>
void read (T &x) {
int sgn = 1;
char ch;
x = 0;
for (ch = getchar(); (ch < '0' || ch > '9') && ch != '-'; ch = getchar()) ;
if (ch == '-') ch = getchar(), sgn = -1;
for (; '0' <= ch && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
x *= sgn;
}
template <class T>
void write (T x) {
if (x < 0) putchar('-'), write(-x);
else if (x < 10) putchar(x + '0');
else write(x / 10), putchar(x % 10 + '0');
}
char str[N];
int n, a[N];
int main () {
read(n), n--;
scanf("%s", str);
for (int i = 0; i <= n; i++) a[i] = str[i] - '1';
int ans = 0;
for (int i = 0; i <= n; i++) {
if ((n & i) == i) ans = (ans + a[i]) % 2;
}
if (!ans) {
bool flag = true;
for (int i = 0; i <= n; i++) {
if (a[i] == 1) flag = false;
}
if (flag) {
int x = 0;
for (int i = 0; i <= n; i++) a[i] >>= 1;
for (int i = 0; i <= n; i++) {
if ((n & i) == i) x = (x + a[i]) % 2;
}
if (x) ans = 2;
}
}
write(ans), putchar('\n');
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· 程序员常用高效实用工具推荐,办公效率提升利器!
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 【译】WinForms:分析一下(我用 Visual Basic 写的)