codeforces 264D Colorful Stones
题目
题目来自于rng_58
Orz。
算法
讨论某个状态\((x,y)\)是否可达,\(x\)是狐狸到达的石头,\(y\)是猫的。
题解说,如果满足以下条件,那么它就是可到达状态:
- \(t[0..y]\)不是\(s[0..x-1]\)的子串。
- \(s[0..x]\)不是\(t[0..y-1]\)的字串。
- \(s\)和\(t\)串的形式不能是这样的:\(s=......ab,t=......ba\)。
第三个条件很容易忽略!
建议多看几次rng_58
的题解,我觉得题解思考的方式很新奇Orz:
- 考虑非常显然的必要条件
- 考虑如何通过必要条件来构造一个合法的序列
- 发现途中有必要条件忽略的情况!
- 完善条件,然后得出必要充分条件
代码
通过上面的分析,我们就可以乱搞了:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long i64;
template <class T>
void tension(T &a, const T &b) {
if (b < a) a = b;
}
const int MAXN = (int) 1e6 + 3;
int n, m;
char s[MAXN], t[MAXN];
void init(char* const s, int n, char* const t, int m, int* const ret) {
for (int i = 1; i <= n; i ++) {
ret[i] = ret[i - 1] + 1;
while (ret[i] < m && t[ret[i]] != s[i])
ret[i] ++;
tension(ret[i], m);
}
}
int main() {
scanf("%s\n%s\n", s + 1, t + 1);
static int p1[MAXN], p2[MAXN];
n = strlen(s + 1);
m = strlen(t + 1);
init(s, n, t, m, p1);
init(t, m, s, n, p2);
#define hash(x) (x == 'R' ? 0 : (x == 'G' ? 1 : 2))
static int sum[MAXN][3][3];
for (int i = 2; i <= m; i ++) {
for (int j = 0; j < 3; j ++)
for (int k = 0; k < 3; k ++) {
if (hash(t[i - 1]) == j && hash(t[i]) == k)
sum[i][j][k] = sum[i - 1][j][k] + 1;
else
sum[i][j][k] = sum[i - 1][j][k];
}
}
i64 ans = 0;
int L = 1;
for (int i = 1; i <= n; i ++) {
int R = p1[i];
while (L <= m && p2[L] < i) L ++;
ans += max(R - L + 1, 0);
if (L <= R && i > 1) {
int j = hash(s[i - 1]);
int k = hash(s[i]);
if (j != k) {
ans -= sum[R][k][j];
ans += sum[L - 1][k][j];
}
}
}
cout << ans << endl;
return 0;
}
codeforces 264D Colorful Stones的更多相关文章
- Codeforces - 1081C - Colorful Bricks - 简单dp - 组合数学
https://codeforces.com/problemset/problem/1081/C 这道题是不会的,我只会考虑 $k=0$ 和 $k=1$ 的情况. $k=0$ 就是全部同色, $k=1 ...
- 洛谷CF264D Colorful Stones(子序列匹配,思维)
洛谷题目传送门 神仙思维题. 对于两个字符串的匹配问题,似乎之前蒟蒻写的HAOI2010最长公共子序列题解中提到的建网格图模型是一种套路? 给一个稍微强一点的样例(把字母换成了ABC) AABCB B ...
- Codeforces.1110E.Magic Stones(思路 差分)
题目链接 听dalao说很nb,做做看(然而不小心知道题解了). \(Description\) 给定长为\(n\)的序列\(A_i\)和\(B_i\).你可以进行任意多次操作,每次操作任选一个\(i ...
- CodeForces 909D Colorful Points
题解: 暴力,模拟. 把字符串压缩一下,相同的处理成一位,记录下个数,然后暴力模拟即可. #include <bits/stdc++.h> using namespace std; con ...
- CodeForces - 965D Single-use Stones
题面在这里! 如果你强行把问题建模,可以发现这是一个裸的增广路,又因为这是区间连边,所以跑一个 点数O(N)边数O(N log N)的线段树优化建边的网络流即可,不知道能不能过23333 但其实这个问 ...
- CF264D - Colorful Stones 题解
题面 官方题解 模拟赛题解 题解概述: 定义符号A~B表示序列A是序列B的子序列,A!~B反之. 设操作序列为I,则有A~I,B!~I,C~I,D!~I. 可得出条件①B!~C且D!~A,所以我们只要 ...
- Codeforces Round #162 (Div. 2)
A. Colorful Stones (Simplified Edition) 模拟. B. Roadside Trees (Simplified Edition) 每次转移时,只需要爬到\(min( ...
- Codeforces Round #162 (Div. 2) A~D 题解
A. Colorful Stones (Simplified Edition) time limit per test 2 seconds memory limit per test 256 mega ...
- HDOJ 4248 A Famous Stone Collector DP
DP: dp[i][j]前i堆放j序列长度有多少行法, dp[i][j]=dp[i-1][j] (不用第i堆), dp[i][j]+=dp[i-1][j-k]*C[j][k] (用第i堆的k个石头) ...
随机推荐
- [译]SSRS 报表版本控制
问题 如今商务智能应用广泛,对我们的商业愈加重要. 对新报表和的各种需求不断攀升. 自 SQL Server 2008 R2的 Reporting Services (SSRS) 开始,微软视图为减轻 ...
- 利用GDataXML解析XML文件
1.导入GDataXMLNode.h 和 GDataXMLNode.m文件 2.导入libxml2库文件 3.工程target下Bulid Settings 搜索search 找到Hearder S ...
- C#用正则表达式 获取网页源代码标签的属性或值
1.有url获取到网页源代码: using System.Web; using System.IO; using System.Net; private void GetHtmlinfo(string ...
- 建立dblink,clob
建立dblink的方法, 如果有个测试库A,要访问生产库里的数据,那么可以直接在测试库A里建立一个dblink,然后数据库A就可以直接访问测试库B的数据了. -- 删除已有的dblink drop d ...
- 用jmeter进行多用户并发压力测试 [转]
近日manager要求对项目进行压力测试,开始对jmeter进行了研究.jmeter是Apache一个开源项目,可对各种项目进行测试,甚至包括junit. 测试要求如下,多用户同时登陆web应用程序, ...
- codeforces 629D. Babaei and Birthday Cake
题目链接 大意就是给出一个序列, 然后让你从中找出一个严格递增的数列, 使得这一数列里的值加起来最大. 用线段树, 先将数列里的值离散,然后就是线段树单点更新, 区间查询最值. 具体看代码. #inc ...
- [LeetCode]题解(python):020-Valid Parentheses
题目来源: https://leetcode.com/problems/valid-parentheses/ 题意分析: 这道题输入一段只包括括号的字符串,判断这个字符串是否已经配对.配对的规则是,每 ...
- Chrome Firefox 自定义背景色
Chrome有个自定义背景色的文件 Custom.css 默认里面什么字都没写 html, body {background-color: #e0dcc0!important;} 这个颜色 ...
- 第二节 EAN 8 码 / EAN 13 码
EAN码的全名为欧洲商品条码(European Article Number),源於西元1977年,由欧洲十二个工业国家所共同发展出来的一种条码.目前已成为一种国际性的条码系统.EAN条码系统的管理是 ...
- 告别IE给我们的web开发带来的困扰(使用chrome frame v8引擎)
茶爸爸个人微信:benyzhous,公众号:cha-baba欢迎骚扰 由于客户所有机器必须使用IE6浏览器,导致我们在开发项目过程中遇到非常多的样式与性能问题,在偶然的一次使用360软件管家搜索chr ...