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 ...
随机推荐
- 关于Windows与Linux下32位与64位开发中的数据类型长度的一点汇总
32位与64位的数据类型长度是不一样的,而且windows和linux也有些许区别,下面把64位下的数据长度列表如下(无符号unsigned和有符号的长度一样): linux64 ...
- Python语言及其应用 第2章
- loj515贪心只能过样例
bitset练习题... 位运算真的是玄学... 一开始真的“只能过样例” 后来发现把左移写成了小于号 鬼知道我在想什么/手动微笑 loj第一题 #include<iostream> #i ...
- DP小合集
1.Uva1625颜色的长度 dp[i][j]表示前一个串选到第i个 后一个串选到第j个 的最小价值 记一下还有多少个没有结束即dp2 记一下每个数开始和结束的位置 #include<cstdi ...
- SQL Server DBA十大必备工具使生活轻松
[IT168 技术]曾经和一些DBA和数据库开发人员交流时,问他们都用过一些什么样的DB方面的工具,大部分人除了SSMS和Profile之外,基本就没有使用过 其他工具了;诚然,SSMS和Profil ...
- ACM学习历程—HDU5587 Array(数学 && 二分 && 记忆化 || 数位DP)(BestCoder Round #64 (div.2) 1003)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5587 题目大意就是初始有一个1,然后每次操作都是先在序列后面添加一个0,然后把原序列添加到0后面,然后 ...
- Java中CountDownLatch类的使用
0.CountDownLatch作用 1) Java api中的解释:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 2) CountDownLatch可以使J ...
- POJ2442:Sequence
浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 题目传送门:http://poj.org/problem?id=2442 我们先简化题意,假设只有两 ...
- BZOJ5443:[CEOI2018]Lottery
我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:https://www.lydsy.com/JudgeOnline/probl ...
- 理解Promise
一.Propmise基本用法 Promise用于发送一个异步完成的结果,是替代回调函数的另一种选择.可以把Promise理解为一种异步函数. 以下函数通过一个Promise来异步地返回一个结果 fun ...