CF1428F-Fruit Sequences
题目链接https://codeforces.com/contest/1428/problem/F
参考题解https://www.cnblogs.com/zkyJuruo/p/13833960.html
OI爷,永远滴神!
思路
对于01字符串从右向左遍历,如果当前s[i]=0s[i]=0s[i]=0,那么对序列没有任何贡献,如果s[i]=1s[i]=1s[i]=1,如果出现连续的1,设在第i位该值为h[i]h[i]h[i],那么从当前位到上一次出现h[i]h[i]h[i]之间的值,需要全部加上1 。例举一个样例就是110011,如果此时i=2i=2i=2,那么从[2,4][2,4][2,4]这一段范围,它的结果就会+3,而[5,6][5,6][5,6]的代价还是不变的。如果i=1i=1i=1,那么从[1,5][1,5][1,5]的范围之内代价都会+1,结果就是+5。由此看来就只要看当前出现的h[i]h[i]h[i]的这个值,在上一次所出现的位置在哪里,那么代价就会增加h[i]−ih[i]-ih[i]−i,如果不存在这样的位置,那么代价就相当于直接加上n−i+1n-i+1n−i+1。
开一个pos数组记录每一个h[i]最后出现的位置。因为在连续求1的过程中,其最后的位置恰好是反一反的,例如110011,h[5]=2,h[6]=1,但是在遍历到位置2的时候,h[2]=1所对应1应该是第5位,h[1]=2所对应的位置应该是第6位,所以在发现s[i]=0 && s[i+1]=1的时候,要把pos数组的一部分reverse一下。
代码
#include<bits/stdc++.h>
using namespace std;typedef long long LL;
#define int LL
typedef pair<int, int> PII;
const int inf = 0x3f3f3f3f;
const int N = 5e5 + 10;
const int mod = 1e9 + 7;char s[N];
int pos[N], h[N];void solve() {int n;scanf("%lld%s", &n, s + 1);int res = 0, sum = 0;for(int i = n; i; i--) {h[i] = s[i] == '0' ? 0 : h[i + 1] + 1;if(s[i] == '1') {if(!pos[h[i]]) sum += n - i + 1;else sum += pos[h[i]] - i;pos[h[i]] = i;}else if(s[i] == '0' && s[i + 1] == '1') {int x = h[i + 1];reverse(pos + 1, pos + 1 + x);}res += sum;// printf("i = %d sum = %d\n", i, sum);}printf("%lld\n", res);
}signed main() {// freopen("in.txt", "r", stdin);// int t; cin >> t; while(t--)solve();return 0;
}
CF1428F-Fruit Sequences相关推荐
- BZOJ 4059: [Cerc2012]Non-boring sequences ( )
要快速在一段子序列中判断一个元素是否只出现一次 , 我们可以预处理出每个元素左边和右边最近的相同元素的位置 , 这样就可以 O( 1 ) 判断. 考虑一段序列 [ l , r ] , 假如我们找到了序 ...
- 2019 ACM - ICPC 上海网络赛 E. Counting Sequences II (指数型生成函数)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- R语言生成对数线性间隔数据序列(Log-linearly Spaced Sequences)
R语言生成对数线性间隔数据序列(Log-linearly Spaced Sequences) # Log-linearly Spaced Sequences # 类似python中的 np.arang ...
- Codeforces 447C - DZY Loves Sequences
447C - DZY Loves Sequences 思路:dp 代码: #include<bits/stdc++.h> using namespace std; #define ll l ...
- 转义序列Escape Sequences及Linux echo命令多种颜色显示
翻阅了很多中文的博文,多数文章是讲echo颜色的用法,本人实在不爱死背,追本溯源,真正看看转义序列是什么? 转义字符,学习过C语言的童鞋都知道,著名的printf函数中支持一些控制字符输出,例如\t ...
- Paper:《Generating Sequences With Recurrent Neural Networks》的翻译和解读
Paper:<Generating Sequences With Recurrent Neural Networks>的翻译和解读 目录 Generating Sequences With ...
- AtCoder Regular Contest 092 Two Sequences AtCoder - 3943 (二进制+二分)
Problem Statement You are given two integer sequences, each of length N: a1,-,aN and b1,-,bN. There ...
- Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences
B. Jzzhu and Sequences time limit per test 1 second memory limit per test 256 megabytes input standa ...
- Dreamoon Likes Sequences CodeForces - 1330D(组合数学+位运算)
Dreamoon likes sequences very much. So he created a problem about the sequence that you can't find i ...
- CF思维联系– Codeforces-990C Bracket Sequences Concatenation Problem(括号匹配+模拟)
ACM思维题训练集合 A bracket sequence is a string containing only characters "(" and ")" ...
最新文章
- java 重写构造函数,覆盖Java中的默认构造函数
- 台式电脑计算机无法启动 启动修复,遇到计算机无法启动时,该怎么修复?
- pythonopencv显示图像_OpenCV-Python 读取显示图像 | 五
- cf 1504 F. Flip the Cards
- Oracle 数据库导入导出 dmp文件
- Git如何进行分支合并
- Homework1_3015218130_许鹏程
- java载入器材_JAVA之了解类载入器Classloader
- Python语言程序设计基础_实验3 流程控制I_答案_通识教育必修课程_上海师范大学
- Windows超级管理器,电脑必备神器,内置超多实用小工具,帮你解决电脑相关问题!
- 分析了漫威电影后,才知道竟如此流弊
- [javascript] 实现展开全文和收起全文效果
- php执行who命令,Linux中的who命令实例介绍
- iphone11屏比例_iPhone 11屏幕和iPhone X哪个大 iPhone 11和iPhone X屏幕大小对比
- mysql触发器作用,好处和curl
- Maven-Maven反应堆
- OSPF中Stub、完全Stub、NSSA、完全NSSA区域
- 需要使用电话外呼系统的行业都有哪些?好处何在?
- Python解析英雄联盟数据,教你带妹上分啦!
- 蒸气压缩式空调制冷原理图解