AGC043 B题题解
有的时候,碰到一道题,要给自己先设立部分分,再去想如何把部分分推广到一般情况。这题就是绝佳的例子。
不妨将\(a_i\)用\(a_i - 1\)替代,这样就变成了\(a_i \in \{ 0, 1, 2\}\)了。
我们给自己设立的部分分是\(a_i \in \{ 0, 1 \}\)时怎么做。
我们会发现\(x_{i, j} \equiv x_{i - 1, j} + x_{i - 1, j + 1} (\bmod 2)\)了。于是我们在\(\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;
}
AGC043 B题题解的更多相关文章
- ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)
目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严 ...
- 10.9 guz模拟题题解
感谢@guz 顾z的题题解 考试共三道题,其中 第一题help共10个测试点,时间限制为 1000ms,空间限制为 256MB. 第二题escape共20个测试点,时间限制为1000ms2000ms, ...
- 【ZROI 537】贪心题 题解
[ZROI 537]贪心题 题解 Link Solution 最大的一边直接放到一起贪心即可 着重讲小的一边 已知对于二分图匹配,其答案即为最大流 令时间集合为 \(T = {1,2,3,\dots, ...
- Codeforces Round #612 (Div. 2) 前四题题解
这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...
- Hello2020(前四题题解)
Hello,2020!新的一年从快乐的掉分开始…… 我在m3.codeforces.com这个镜像网站中一开始还打不开D题,我…… 还有话说今天这场为什么那么多二分. 比赛传送门:https://co ...
- Codeforces Round #524 (Div. 2)(前三题题解)
这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...
- Educational Codeforces Round 53 (Rated for Div. 2) (前五题题解)
这场比赛没有打,后来补了一下,第五题数位dp好不容易才搞出来(我太菜啊). 比赛传送门:http://codeforces.com/contest/1073 A. Diverse Substring ...
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)
这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...
- Codeforces Round #519 by Botan Investments(前五题题解)
开个新号打打codeforces(以前那号玩废了),结果就遇到了这么难一套.touristD题用了map,被卡掉了(其实是对cf的评测机过分自信),G题没过, 700多行代码,码力惊人.关键是这次to ...
随机推荐
- linux c 线程间同步(通信)的几种方法--互斥锁,条件变量,信号量,读写锁
Linux下提供了多种方式来处理线程同步,最常用的是互斥锁.条件变量.信号量和读写锁. 下面是思维导图: 一.互斥锁(mutex) 锁机制是同一时刻只允许一个线程执行一个关键部分的代码. 1 . ...
- 最长回文子串的Manacher算法
对于一个比较长的字符串,O(n^2)的时间复杂度是难以接受的.Can we do better? 先来看看解法2存在的缺陷. 1) 由于回文串长度的奇偶性造成了不同性质的对称轴位置,解法2要对两种情况 ...
- 基于 Nebula Operator 的 K8s 自动化部署运维
摘要:Nebula Operator 是 Nebula Graph 在 Kubernetes 系统上的自动化部署运维插件.在本文,你将了解到 Nebula Operator 的特性及它的工作原理. 从 ...
- OLTP与OLAP分析与比较
(本文转载自Super_Mu的博客https://www.cnblogs.com/hhandbibi/p/7118740.html) 1.OLTP与OLAP的介绍 数据处理大致可以分成两大类:联机事务 ...
- TCP/IP模型简介和/etc/hosts文件说明
软件=协议的实现. IP决定了主机的位置.端口号决定了进程的位置. 两台主机上的通讯实际是两台主机上两个具体进程的通讯. TCP/IP模型分四层: TCP/IP模型:应用层---传输层----网络层- ...
- 分库分表神器 Sharding-JDBC,几千万的数据你不搞一下?
今天我们介绍一下 Sharding-JDBC框架和快速的搭建一个分库分表案例,为讲解后续功能点准备好环境. 一.Sharding-JDBC 简介 Sharding-JDBC 最早是当当网内部使用的一款 ...
- Windows常用的网络命令
命令 说明 ipconfig 查看网络配置的信息 ping 测试网络是否连通 tracert 网络诊断工具,可以列出分组经过的路由节点 net 有添加用户.开启服务等功能 netstat 显示协议统计 ...
- 深度分析ReentrantLock源码及AQS源码,从入门到入坟,建议先收藏!
一.ReentrantLock与AQS简介 在Java5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile.Java5.0增加了一种新的机制:Reentra ...
- 掌握这些springboot的配置方式,让你工作效率翻个倍!
springboot的多种配置方式 java配置主要靠java类和一些注解,比较常用的注解有: @Configuration :声明一个类作为配置类,代替xml文件 @Bean :声明在方法上,将方法 ...
- pip install 一个本地包时提示error: Microsoft Visual C++ 14.0 is required.
错误如下: error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Too ...