AT4379 [AGC027E] ABBreviate

分别记 aaa、bbb 为 111、222。

则操作 sisjs_i \ s_jsi​ sj​ 即合并为 (si+sj)mod3(s_i+s_j) \bmod 3(si​+sj​)mod3。

值为 000 表示无法合并成一个;否则可以。

考虑通过若干次操作得到的一个字符串 ttt。

那么将全串从前往后贪心尽量取最短的段合并并与 ttt 匹配,最后剩下的串一定模 333 余 000 或是空串。

那么贪心从前往后匹配即可,具体见代码。

时间复杂度 O(n)\mathcal O(n)O(n)。

#include<bits/stdc++.h>using namespace std;typedef long long ll;#define ha putchar(' ')
#define he putchar('\n')inline int read()
{int x = 0, f = 1;char c = getchar();while (c < '0' || c > '9'){if (c == '-')f = -1;c = getchar();}while (c >= '0' && c <= '9')x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();return x * f;
}inline void write(int x)
{if(x < 0){putchar('-');x = -x;}if(x > 9)write(x / 10);putchar(x % 10 + 48);
}const int mod = 1e9 + 7;int n, f[100005], nxt[100005][3], s[100005], ans;char c[100005];signed main()
{scanf("%s", c + 1);n = strlen(c + 1);bool flg = 0;for(int i = 1; i < n; ++i)if(c[i] == c[i + 1]) {flg = 1; break;}if(!flg) {return puts("1"), 0;}for(int i = 1; i <= n; ++i) s[i] = (s[i - 1] + (c[i] == 'a' ? 1 : 2)) % 3;for(int i = 0; i < 3; ++i) nxt[n][i] = n + 1;for(int i = n; i >= 1; --i){for(int j = 0; j < 3; ++j) nxt[i - 1][j] = nxt[i][j];nxt[i - 1][s[i]] = i;}f[0] = 1;for(int i = 0; i < n; ++i){for(int j = 0; j < 3; ++j)if(s[i] != j) f[nxt[i][j]] = (f[nxt[i][j]] + f[i]) % mod;if(s[i + 1] == s[n]) ans = (ans + f[i + 1]) % mod;}write(ans), he;return 0;
}

AT4379 [AGC027E] ABBreviate相关推荐

  1. ARC110E Shorten ABC

    ARC110E Shorten ABC 考虑操作的本质,将 AAA.BBB.CCC 分别记作 111.222.333. 操作 sis_isi​ 和 si+1s_{i+1}si+1​ 即合并为 si⊕s ...

  2. vim高级主题之缩写(iab, ab, abbreviate)

    这几天对vim的学习就快到了狂热的地步,简直忘了学习vim是为了编程,没有办法,就是喜欢,就是希望这种狂热的感觉. 缩写(abbreviations): 缩写在插入,替换和命令行模式中使用.如果你输入 ...

  3. Unix Linux大学教程(三):过滤器、正则表达式、vi

    第16章  过滤器:简介和基本操作 删除数据列用colrm:colrm  [startcol [endcol]]  如果没有endcol则删除从startcol至行末尾所有的列. 第17章  过滤器: ...

  4. 编写更少量的代码:使用apache commons工具类库

    Commons-configuration Commons-FileUploadCommons DbUtilsCommons BeanUtils Commons CLI Commons CodecCo ...

  5. how-to-get-a-job-in-deep-learning

    http://blog.deepgram.com/how-to-get-a-job-in-deep-learning/ How to Get a Job In Deep Learning 22 SEP ...

  6. OpenJudge/Poj 2001 Shortest Prefixes

    1.链接地址: http://bailian.openjudge.cn/practice/2001 http://poj.org/problem?id=2001 2.题目: Shortest Pref ...

  7. 【 English 】计算机常用英文单词

    1. file n. 文件:v. 保存文件        2. command n. 命令,指令        3. use v. 使用,用途        4. program n. 程序      ...

  8. StringUtils常用方法+StringUtils详细介绍

    StringUtils用法+StringUtils详细介绍 博文来源:http://yijianfengvip.blog.163.com/blog/static/1752734322012122219 ...

  9. 向左向右向后转python,将图像(png和jpg)转换为多维列表并在python中向后转换

    I use PIL in order to convert imagse to monochrome and afterwards to a list of lists, but I am not s ...

最新文章

  1. vi/vim 命令手册(初级篇)
  2. 2021宁夏英语高考成绩查询,2021宁夏高考成绩官方查询时间及入口
  3. WEB文件上传之apache common upload使用(一)
  4. vue前期知识点笔记
  5. typedef 的四个用途和两大陷阱
  6. Codeigniter基础
  7. rhel5下的DNS服务器架设
  8. 3_Long Short Term Memory (LSTM)
  9. 全球首发!计算机视觉Polygon Mesh Processing总结7——Remeshing Local Structure
  10. linux怎么用网络yum源,Linux配置本地网络YUM源
  11. Spring-boot + Mybatis-plus 3.0-gamma 配置记录
  12. 小白都能了解的聚类算法之四(谱聚类)
  13. 蓝墨云班课网页版下载资源文件
  14. conda多环境切换与安装
  15. 快速入门mybatis(查询、添加日志、插入)
  16. 上承文化、下启智慧:智慧城市建设的遂宁样本
  17. WIN10如何使用Free Pascal 解决乱码等不兼容问题
  18. 设计师应该拥有的 50 个很有用的 CSS 代码
  19. LOL云顶开心果、阿米、夜猫
  20. 李彦宏开产品发布会被当众泼水,百度AI怎么了?

热门文章

  1. 移动端点击a标签后默认蓝色背景如何去除
  2. 下载 | 数学分析八讲(修订版)
  3. KaLi Linux 安装sougou输入法
  4. android 从服务端获取的图片怎么适配不同分屏幕的手机,移动端的适配|切图|标注...
  5. 数学基础知识-排列与组合
  6. c++ sort 转载
  7. 洛谷 P2888 [USACO07NOV] 牛栏Cow Hurdles
  8. 微信朋友圈广告html,微信小视频制作广告效果 微信朋友圈广告制作(有广告的小视频发朋友圈[方法而已])...
  9. 前端面试那些事【dt/dd、audio、onerror、标签、类、ID选择器、伪类选择器......
  10. asp.net 获取汉字字符串的拼音首字母,含多音字