#计数#A 古老谜题
From NOIP2020 模拟赛 B 组 Day4
题目
给定一个长度为\(n\)的01序列\(a\),
问有多少个三元组\((l,p,r),1\leq l<p<r\leq n\)
满足\(a_p=1且s[l,p]=s[p,r](1的个数)\)
分析
由于确定\([l,r]\)就能确定\(p\),且实际上的限制条件为
\(s[l,r]\bmod 2=1且r-l>2\)
枚举右端点。
- 若当前位置为1,若前缀1的个数为奇数,实际上的贡献为之前前缀1的个数为偶数的位置,反之亦然
考虑用双指针维护区间1的个数必须超过2才能产生贡献 - 若当前位置为0,那就不只是上面的统计,有可能是两段连续的0夹着一个1,这个单独统计一下即可
代码
#include <cstdio>
#define rr register
using namespace std;
const int N = 1000011;
long long ans;
int a[N], n, tot, s1, s2, even, odd, now, last;
signed main() {
freopen("puzzle.in", "r", stdin);
freopen("puzzle.out", "w", stdout);
scanf("%*d%d", &n);
for (rr int i = 1; i <= n; ++i) {
rr char c = getchar();
while (c != 48 && c != 49) c = getchar();
a[i] = c ^ 48;
}
for (rr int r = 1, l = 0; r <= n; ++r) {
s1 += a[r];
while (s1 - s2 - a[l] > 2) s2 += a[l++], (s2 & 1) ? ++even : ++odd;
if (a[r]) {
(s1 & 1) ? ans += (now = odd) : ans += (now = even);
last = tot, tot = 0;
} else
++tot, ans += now + last;
}
return !printf("%lld", ans);
}
#计数#A 古老谜题的更多相关文章
- JVM虚拟机知识点
java -version 显示JDK 版本 Java HotSpot Client:1.5版本之后,热点探测,对加载的class文件做标记,对于频繁使用的class即时编译JIT本地缓存,不再重新进 ...
- 《algorithm puzzles》——谜题
这篇文章开始正式<algorithm puzzles>一书中的解谜之旅了! 狼羊菜过河: 谜题:一个人在河边,带着一匹狼.一只羊.一颗卷心菜.他需要用船将这三样东西运至对岸,然而,这艘船空 ...
- (20)Cocos2d-x中的引用计数(Reference Count)和自动释放池(AutoReleasePool)
引用计数 引用计数是c/c++项目中一种古老的内存管理方式.当我8年前在研究一款名叫TCPMP的开源项目的时候,引用计数就已经有了. iOS SDK把这项计数封装到了NSAutoreleasePool ...
- 【vijos】1770 大内密探(树形dp+计数)
https://vijos.org/p/1770 不重不漏地设计状态才能正确的计数QAQ 虽然可能最优化是正确的,但是不能保证状态不相交就是作死.... 之前设的状态错了... 应该设 f[i][0] ...
- java实现汉诺塔计数
** 汉诺塔计数** 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下 ...
- 计数排序(counting-sort)——算法导论(9)
1. 比较排序算法的下界 (1) 比较排序 到目前为止,我们已经介绍了几种能在O(nlgn)时间内排序n个数的算法:归并排序和堆排序达到了最坏情况下的上界:快速排序在平均情况下达到该上界. ...
- Objective-C内存管理之引用计数
初学者在学习Objective-c的时候,很容易在内存管理这一部分陷入混乱状态,很大一部分原因是没有弄清楚引用计数的原理,搞不明白对象的引用数量,这样就当然无法彻底释放对象的内存了,苹果官方文档在内存 ...
- 最小生成树计数 bzoj 1016
最小生成树计数 (1s 128M) award [问题描述] 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一 ...
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- [LeetCode] Count and Say 计数和读法
The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...
随机推荐
- Fpga开发笔记(二):高云FPGA发开发软件Gowin和高云fpga基本开发过程
前言 本篇安装高云的开发软件Gowin,并且描述了一个基于高云fpga的程序的开发环境和完整的下载运行过程. Gowin软件 概述 Gowin 软件是广东高云半导体股份有限公司的 FPGA ...
- ioutil.ReadDir读取目录下的内容
func dirents(dir string) []os.FileInfo{ entries, err := ioutil.ReadDir(dir) // 读取目录并返回排好序的文件以及子目录名 i ...
- ubuntu18.04下安装MySQL5.7
更新源 sudo apt update 安装mysql sudo apt install mysql-server 使用sudo mysql进入数据设置root账户的密码和权限 sudo mysql ...
- python如何多版本共存
1. 先正常安装多个python版本,比如我电脑里面是安装的3.10以及3.12 2. 安装的时候建议不要选择系统盘,可以用两个目录安装,例如: d:\py310\... d:\py312\... 3 ...
- PostgreSQL、KingBase 数据库 ORDER BY LIMIT 查询缓慢案例
好久没写博客了,最近从人大金仓离职了,新公司入职了蚂蚁集团,正在全力学习 OcenaBase 数据库的体系结构中. 以后分享的案例知识基本上都是以 OcenaBase 分布式数据库为主了,呦西. 昨天 ...
- 搞清楚Promise.all的异常处理
参考资料: https://www.jianshu.com/p/356f10ee476d https://blog.csdn.net/aaqingying/article/details/122966 ...
- pdf 等所有文件通过blog强制下载函数 downloadFileFromBlobByToken
downloadFileFromBlobByToken pdf 等所有文件通过blog强制下载函数 downloadFileFromBlobByToken import { getToken } fr ...
- end_of_line = lf 选择行尾序列 .editorconfig - 老项目不动代码存盘 文件变动 CRLF 的问题 vscode
end_of_line = lf 选择行尾序列 .editorconfig - 老项目不动代码存盘 文件变动 CRLF 的问题 缘由 vscode 老项目代码,没有变动,ctrl + s后 文件有变化 ...
- be动词 系动词 连缀动词 Linking Verb
be动词 系动词 连缀动词 Linking Verb be 原型 am 第一人称单数形式 is 第三人称单数形式 are 第二人称单数和复数形式 been 过去分词 being 现在分词 was 第一 ...
- day11-面向对象02
面向对象02 7.继承 继承的本质是对某一批类的抽象,从而实现对现实世界更好地建模 extends的意思是"扩展".子类是父类的扩展. Java类中只有单继承,没有多继承!(一个儿 ...