题目链接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相关推荐

  1. BZOJ 4059: [Cerc2012]Non-boring sequences ( )

    要快速在一段子序列中判断一个元素是否只出现一次 , 我们可以预处理出每个元素左边和右边最近的相同元素的位置 , 这样就可以 O( 1 ) 判断. 考虑一段序列 [ l , r ] , 假如我们找到了序 ...

  2. 2019 ACM - ICPC 上海网络赛 E. Counting Sequences II (指数型生成函数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  3. R语言生成对数线性间隔数据序列(Log-linearly Spaced Sequences)

    R语言生成对数线性间隔数据序列(Log-linearly Spaced Sequences) # Log-linearly Spaced Sequences # 类似python中的 np.arang ...

  4. Codeforces 447C - DZY Loves Sequences

    447C - DZY Loves Sequences 思路:dp 代码: #include<bits/stdc++.h> using namespace std; #define ll l ...

  5. 转义序列Escape Sequences及Linux echo命令多种颜色显示

    翻阅了很多中文的博文,多数文章是讲echo颜色的用法,本人实在不爱死背,追本溯源,真正看看转义序列是什么? 转义字符,学习过C语言的童鞋都知道,著名的printf函数中支持一些控制字符输出,例如\t ...

  6. Paper:《Generating Sequences With Recurrent Neural Networks》的翻译和解读

    Paper:<Generating Sequences With Recurrent Neural Networks>的翻译和解读 目录 Generating Sequences With ...

  7. 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 ...

  8. 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 ...

  9. Dreamoon Likes Sequences CodeForces - 1330D(组合数学+位运算)

    Dreamoon likes sequences very much. So he created a problem about the sequence that you can't find i ...

  10. CF思维联系– Codeforces-990C Bracket Sequences Concatenation Problem(括号匹配+模拟)

    ACM思维题训练集合 A bracket sequence is a string containing only characters "(" and ")" ...

最新文章

  1. java 重写构造函数,覆盖Java中的默认构造函数
  2. 台式电脑计算机无法启动 启动修复,遇到计算机无法启动时,该怎么修复?
  3. pythonopencv显示图像_OpenCV-Python 读取显示图像 | 五
  4. cf 1504 F. Flip the Cards
  5. Oracle 数据库导入导出 dmp文件
  6. Git如何进行分支合并
  7. Homework1_3015218130_许鹏程
  8. java载入器材_JAVA之了解类载入器Classloader
  9. Python语言程序设计基础_实验3 流程控制I_答案_通识教育必修课程_上海师范大学
  10. Windows超级管理器,电脑必备神器,内置超多实用小工具,帮你解决电脑相关问题!
  11. 分析了漫威电影后,才知道竟如此流弊
  12. [javascript] 实现展开全文和收起全文效果
  13. php执行who命令,Linux中的who命令实例介绍
  14. iphone11屏比例_iPhone 11屏幕和iPhone X哪个大 iPhone 11和iPhone X屏幕大小对比
  15. mysql触发器作用,好处和curl
  16. Maven-Maven反应堆
  17. OSPF中Stub、完全Stub、NSSA、完全NSSA区域
  18. 需要使用电话外呼系统的行业都有哪些?好处何在?
  19. Python解析英雄联盟数据,教你带妹上分啦!
  20. 蒸气压缩式空调制冷原理图解

热门文章

  1. dingo php,laravel 中安装 Dingo API 基本设置
  2. 【LaTeX在线编译器】
  3. Python和Numpy的加权抛硬币游戏的概率
  4. matlab 变量的定义变量名称,matlab定义变量名
  5. 智能农场 阳光温湿度 检测 远程控制开关 机智云
  6. web前端开发教学视频,web前端开发职业
  7. 生命是一个无解的谜——《我喜欢生命本来的样子》读后感作文2100字
  8. 手机APP测试——Perfecto
  9. Is Open Source Dying? Case Not Proven
  10. 机房动环监控系统厂家品牌