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 ...
随机推荐
- nginx&http 第四章 ngx http代理 && 转载
Nginx访问上游服务器的流程大致分以下几个阶段:启动upstream.连接上游服务器.向上游发送请求.接收上游响应(包头/包体).结束请求. upstream相关的两个重要数据结构ngx_http_ ...
- 图解 Spring 循环依赖,写得太好了!
Spring如何解决的循环依赖,是近两年流行起来的一道Java面试题. 其实笔者本人对这类框架源码题还是持一定的怀疑态度的. 如果笔者作为面试官,可能会问一些诸如"如果注入的属性为null, ...
- Java 合并多个文件内容到一个文件(递归遍历某个文件夹下所有文件)
这段代码通过Java I/O流API实现将多个文件合并到一个文件中,输出为文本文件,提供一个支持语法高亮的网站,http://www.codeinword.com/ 适合粘贴代码到word文档,小巧实 ...
- 蓝鲸平台开启consul.conf UI界面
#第一步: vi /data/bkce/etc/supervisor-consul.conf 修改参数: command=/usr/bin/consul agent -config-file=/dat ...
- python学习-pickle模块(序列化)
简介 1 python-pickle模块 该pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议. "Pickling"是将Python对象层次结构转换为字节 ...
- metasploit数据库使用学习
metasploit为了方便,自动将当前工作区的内容放入数据库 首先就是工作区 -a 增加工作区,-d删除工作区 不同工作区的内容会分开储存到数据库 default工作区 test工作区 db_imp ...
- 金九银十已到!Cookie 和 Session的这些知识你必须知道,面试必问!
前言 会话:一次会话中包含多次请求和响应 注:一次会话表示浏览器第一次给服务器发送请求,会话建立,直到有一方断开为止 功能:在一次会话的多次请求间共享数据 方式: (1) 客户端会话技术:Cookie ...
- SpringBoot整合MyBatis,HiKari、Druid连接池的使用
SpringBoot整合MyBatis 1.创建项目时勾选mybatis.数据库驱动. mysql驱动默认是8.x的版本,如果要使用5.x的版本,创建后到pom.xml中改. 也可以手动添加依赖 ...
- 下载器Folx扩展程序支持哪些浏览器
Folx使用多线程的下载方式大大提升了下载的速度,可以完全替代浏览器自带的下载工具,使下载文件的管理更加简单高效.但是,必须给浏览器安装Folx扩展程序,才能使用Folx下载页面链接. Folx在偏好 ...
- LeetCode周赛#205
5508. 数的平方等于两数乘积的方法数 #模拟 #哈希表 题目链接 题意 给你两个整数数组nums1 和 nums2 ,请你返回根据以下规则形成的三元组的数目(类型 1 和类型 2 ): 类型 1: ...