C.0689-The 2019 ICPC China Shaanxi Provincial Programming Contest
We call a string as a 0689-string if this string only consists of digits '0', '6', '8' and '9'. Given a 0689-string $s$ of length $n$, one must do the following operation exactly once: select a non-empty substring of $s$ and rotate it 180 degrees.
More formally, let $s_i$ be the $i$-th character in string $s$. After rotating the substring starting from $s_l$ and ending at $s_r$ 180 degrees ($1 \le l \le r \le n$), string $s$ will become string $t$ of length $n$ extracted from the following equation, where $t_i$ indicates the $i$-th character in string $t$: $$t_i = \begin{cases} s_i & \text{if } 1 \le i < l \text{ or } r < i \le n \\ \text{'0'} & \text{if } l \le i \le r \text{ and } s_{l+r-i} = \text{'0'} \\ \text{'6'} & \text{if } l \le i \le r \text{ and } s_{l+r-i} = \text{'9'} \\ \text{'8'} & \text{if } l \le i \le r \text{ and } s_{l+r-i} = \text{'8'} \\ \text{'9'} & \text{if } l \le i \le r \text{ and } s_{l+r-i} = \text{'6'} \\ \end{cases}$$
What's the number of different strings one can get after the operation?
We hereby explain the first sample test case.
Substring | Result | Substring | Result | |
---|---|---|---|---|
0 | 0689 | 68 | 0899 | |
6 | 0989 | 89 | 0668 | |
8 | 0689 | 068 | 8909 | |
9 | 0686 | 689 | 0689 | |
06 | 9089 | 0689 | 6890 |
It's easy to discover that we can get 8 different strings after the operation.
题意:给定一个含有0689的串,你可以中心旋转子串,询问旋转任意子串产生的不同的串一共最多哟多少种?
我们假设从前往后统计,能么0和后面非0位置的串都可以统计,如果两个0之间有非0,能么会在非0的时候进行统计,这样就不重不漏了,同理8也是,但是6和9不行,9和6也不行,但是6和6以及自身还有9和9以及自身都是可以的
1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = (int)1e6 + 5; 5 int t; 6 char str[MAXN]; 7 long long num[MAXN][5]; 8 9 int main() { 10 scanf("%d", &t); 11 while (t--) { 12 scanf("%s", str + 1); 13 int n = strlen(str + 1); 14 for (int i = 1; i <= n + 1; i++) num[i][1] = num[i][2] = num[i][3] = num[i][4] = 0; 15 for (int i = n; i >= 1; i--) { 16 num[i][1] = num[i + 1][1] + (str[i] == '0'); 17 num[i][2] = num[i + 1][2] + (str[i] == '8'); 18 num[i][3] = num[i + 1][3] + (str[i] == '6'); 19 num[i][4] = num[i + 1][4] + (str[i] == '9'); 20 } 21 long long ans = 1; 22 for (int i = 1; i <= n; i++) { 23 if (str[i] == '0') { 24 ans += num[i + 1][2]; 25 ans += num[i + 1][3]; 26 ans += num[i + 1][4]; 27 } 28 if (str[i] == '8') { 29 ans += num[i + 1][1]; 30 ans += num[i + 1][3]; 31 ans += num[i + 1][4]; 32 } 33 if (str[i] == '6') { 34 ans += num[i + 1][1]; 35 ans += num[i + 1][2]; 36 ans += num[i][3]; 37 } 38 if (str[i] == '9') { 39 ans += num[i + 1][1]; 40 ans += num[i + 1][2]; 41 ans += num[i][4]; 42 } 43 } 44 if (num[1][3] == n || num[1][4] == n) ans--; 45 printf("%lld\n", ans); 46 } 47 return 0; 48 }
C.0689-The 2019 ICPC China Shaanxi Provincial Programming Contest的更多相关文章
- B.Grid with Arrows-The 2019 ICPC China Shaanxi Provincial Programming Contest
BaoBao has just found a grid with $n$ rows and $m$ columns in his left pocket, where the cell in the ...
- 计蒜客 39272.Tree-树链剖分(点权)+带修改区间异或和 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest E.) 2019ICPC西安邀请赛现场赛重现赛
Tree Ming and Hong are playing a simple game called nim game. They have nn piles of stones numbered ...
- 计蒜客 39280.Travel-二分+最短路dijkstra-二分过程中保存结果,因为二分完最后的不一定是结果 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest M.) 2019ICPC西安邀请赛现场赛重现赛
Travel There are nn planets in the MOT galaxy, and each planet has a unique number from 1 \sim n1∼n. ...
- 计蒜客 39279.Swap-打表找规律 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest L.) 2019ICPC西安邀请赛现场赛重现赛
Swap There is a sequence of numbers of length nn, and each number in the sequence is different. Ther ...
- 计蒜客 39270.Angel's Journey-简单的计算几何 ((The 2019 ACM-ICPC China Shannxi Provincial Programming Contest C.) 2019ICPC西安邀请赛现场赛重现赛
Angel's Journey “Miyane!” This day Hana asks Miyako for help again. Hana plays the part of angel on ...
- 计蒜客 39268.Tasks-签到 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest A.) 2019ICPC西安邀请赛现场赛重现赛
Tasks It's too late now, but you still have too much work to do. There are nn tasks on your list. Th ...
- The 2019 ACM-ICPC China Shannxi Provincial Programming Contest (西安邀请赛重现) J. And And And
链接:https://nanti.jisuanke.com/t/39277 思路: 一开始看着很像树分治,就用树分治写了下,发现因为异或操作的特殊性,我们是可以优化树分治中的容斥操作的,不合理的情况只 ...
- The 2018 ACM-ICPC China JiangSu Provincial Programming Contest快速幂取模及求逆元
题目来源 The 2018 ACM-ICPC China JiangSu Provincial Programming Contest 35.4% 1000ms 65536K Persona5 Per ...
- The 2018 ACM-ICPC China JiangSu Provincial Programming Contest J. Set
Let's consider some math problems. JSZKC has a set A=A={1,2,...,N}. He defines a subset of A as 'Meo ...
随机推荐
- BEC listen and translation exercise 41
Its advantages are that it can be used for outside activities So my recommendation I'm afraid would ...
- python字符串相关操作
字符串搜索相关搜索指定字符串,没有返回-1:str.find('t')指定起始位置搜索:str.find('t',start)指定起始及结束位置搜索:str.find('t',start,end)从右 ...
- bzoj 4103: 异或运算 可持久化Trie
题目大意: 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值\(A_{ij} = x_i \text{ xor } y_j ...
- Eclipse或MyEclipse中给第三方jar包添加源码步骤
0.目的 向web项目中添加mybatis源码. 1.项目结构如下 将mybatis的jar包添加到工程中 2.解压下载的mybatis压缩包(下载地址 https://github.com/myba ...
- 江苏省大学生程序设计竞赛(JSCPC)赛后感
仔细的算了一下,这是我第6次参加与acm有关的比赛了,每一次的经历,在我看来都是一次对自己能力的认识与评估,身边学计算机专业的同龄人对这项比赛的热爱,专注,勇气以及所获得的成就让要好好努力,更要加倍付 ...
- <正则吃饺子>:关于java中垃圾回收技术的简单学习总结
知识介绍来自网络,后面会根据继续学习进行补充和适当的修改,谢谢!原文地址:http://www.importnew.com/26821.html#comment-578355 java中的垃圾回收机制 ...
- 使用DOS指修改文件名
需求:将文件名中的特殊字符#和~去掉 文件夹路径如下: 开始->运行->在对话框中输入字母“cmd”,进入dos模式 输入命令行“cd c:\test”然后回车,再输入命令行“dir /b ...
- 详解MYSQL各种优化原理
说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *.不使用NULL字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原 ...
- R语言最好的IDE——RStudio
转自http://www.dataguru.cn/article-1602-1.html 看到很多的R语言教材,介绍的编辑器或者IDE都是很简陋的那些,就没有见到有人提到RStudio.对于不使用Em ...
- Spring入门第二十四课
Spring对JDBC的支持 直接看代码: db.properties jdbc.user=root jdbc.password=logan123 jdbc.driverClass=com.mysql ...