CF264D - Colorful Stones 题解
题解概述:
定义符号AB表示序列A是序列B的子序列,A!B反之。
设操作序列为I,则有AI,B!I,CI,D!I。
可得出条件①B!C且D!A,所以我们只要讨论满足这个条件的情况。
分情况讨论:
- c1=c2,则可以进行操作c1,得到的状态仍满足条件①;
- c1!=c2,且B'!~C,此时可以进行操作c1;
- c1!=c2,且D'!~A,此时可以进行操作c2;
- c1!=c2,且D'A,B'C,此时无法进行操作,此情况无解;
我们还发现第4种情况下,B=...xyxy,D=...yxyx,且B,D长度相等。
另外,当B以xy结尾,D以yx结尾时,此情况一定无解。
这就证明了当满足条件①时,无解当且仅当B以xy结尾,D以yx结尾。
这样就可以对于数对(x,y)的每一个x,求出对应y的范围(一段区间),然后把其中以yx结尾的y减去(用前缀和实现),就可以得到每一个x的答案了。
总复杂度O(n)。
代码:
#include<bits/stdc++.h>
using namespace std;
#define N 2000007
#define ll long long
int a[N],b[N],s[3][3][N];
char ch[N];
int tar(char c)
{
if(c=='R')return 0;
if(c=='B')return 1;
return 2;
}
int main()
{
//freopen("stone.in","r",stdin);
//freopen("stone.out","w",stdout);
int n,m,i,j,l,r;
ll ans=0;
scanf("%s",ch+1);
n=strlen(ch+1);
for(i=1;i<=n;i++)
a[i]=tar(ch[i]);
scanf("%s",ch+1);
m=strlen(ch+1);
for(i=1;i<=m;i++)
b[i]=tar(ch[i]);
for(int x=0;x<=2;x++)
for(int y=0;y<=2;y++)
{
for(i=2;i<=m;i++)
if(b[i-1]==x&&b[i]==y)
s[x][y][i]=1;
for(i=1;i<=m;i++)
s[x][y][i]+=s[x][y][i-1];
}
l=1,r=1;
while(r<m&&b[r]!=a[1])r++;
ans=r-l+1;
for(i=2;i<=n;i++)
{
if(l<=m&&a[i-1]==b[l])l++;
if(l>m)break;
if(r<m)
{
r++;
while(r<m&&b[r]!=a[i])r++;
}
if(l>r)continue;
int x=a[i-1],y=a[i];
ans+=r-l+1;
if(x!=y)ans-=s[y][x][r]-s[y][x][l-1];
}
printf("%lld\n",ans);
return 0;
}
总结:这个问题通过设出操作序列I,通过子序列的模型来描述题目条件,然后排除一些显然不合法的情况,确立一个有解的基本条件,再在这个条件下递归地讨论一种情况合不合法,最终发现无解的情况比较特殊,于是得到了一个易于判断的无解的充要条件,问题解决。
CF264D - Colorful Stones 题解的更多相关文章
- 洛谷CF264D Colorful Stones(子序列匹配,思维)
洛谷题目传送门 神仙思维题. 对于两个字符串的匹配问题,似乎之前蒟蒻写的HAOI2010最长公共子序列题解中提到的建网格图模型是一种套路? 给一个稍微强一点的样例(把字母换成了ABC) AABCB B ...
- codechef Jewels and Stones 题解
Soma is a fashionable girl. She absolutely loves shiny stones that she can put on as jewellery acces ...
- codeforces 264D Colorful Stones
题目 题目来自于rng_58Orz. 算法 讨论某个状态\((x,y)\)是否可达,\(x\)是狐狸到达的石头,\(y\)是猫的. 题解说,如果满足以下条件,那么它就是可到达状态: \(t[0..y] ...
- 2017 ACM-ICPC亚洲区域赛北京站J题 Pangu and Stones 题解 区间DP
题目链接:http://www.hihocoder.com/problemset/problem/1636 题目描述 在中国古代神话中,盘古是时间第一个人并且开天辟地,它从混沌中醒来并把混沌分为天地. ...
- CF1119A Ilya and a Colorful Walk 题解
Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\),试求出两个不相等的数之间的距离的最大值. 数据范围:\(3\leqslant n\leqslant 3 ...
- CF433B Kuriyama Mirai's Stones 题解
Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\).有 \(m\) 次询问,询问有以下两种: \(1~l~r\),求 \(\sum\limits_{i=l ...
- Codeforces Round #162 (Div. 2) A~D 题解
A. Colorful Stones (Simplified Edition) time limit per test 2 seconds memory limit per test 256 mega ...
- HDU 全国多校第四场 题解
题解 A AND Minimum Spanning Tree 参考代码: #include<bits/stdc++.h> #define maxl 200010 using namespa ...
- [SinGuLaRiTy] 组合数学题目复习
[SinGuLaRiTy] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [CQBZOJ 2011] 计算系数 题目描述 给定一个多项式( ...
随机推荐
- 容斥原理--计算并集的元素个数 URAL 1091
在计数时,必须注意没有重复,没有遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计 ...
- win 10 上解压安装 MySQL 8
win 10 上解压安装 MySQL 8 # 进入到mysql的bin目录底下操作: # 初始化mysql mysqld --initialize --console # 安装mysql服务 mysq ...
- Redis学习之zskiplist跳跃表源码分析
跳跃表的定义 跳跃表是一种有序数据结构,它通过在每个结点中维持多个指向其他结点的指针,从而达到快速访问其他结点的目的 跳跃表的结构 关于跳跃表的学习请参考:https://www.jianshu.co ...
- python网络爬虫(1)——安装scrapy框架的常见问题及其解决方法
Scrapy是为了爬取网站数据而编写的一款应用框架,出名,强大.所谓的框架其实就是一个集成了相应的功能且具有很强通用性的项目模板. 其实在Linux和 Mac安装,就简单的pip命令即可: pip i ...
- centos安装sftp服务
一.创建sftp服务数据目录及相关测试用户 [root@localhost ~]# mkdir -pv /data/sftp/ #sftp数据目录 [root@localhost ~]# chown ...
- 参加AWS技术峰会的收获与思考
7月31日,我参加了AWS 技术峰会2019北京站的会议. 从厦门到帝都,奔赴千里,只为一场技术盛宴,我想记录一些收获和思考,才能不负此行. 大会议程全天,上午是主题演讲和行业解决方案展示,下午是技术 ...
- 异步编程的类型系统:promise & future & closure & observable----异步编程类型的结构和操作
异步编程类型的结构和操作. 上下文维护. A promise represents the eventual result of an asynchronous operation. The prim ...
- SharpImage图像特效和合成类库介绍
SharpImage是用于.NET(C#.VB)的专业图像特效以及图像合成类库.借助它,您可以快速实现Photoshop滤镜效果以及图层合成. 1.内置50+种图像特效滤镜.(如亮度.对比度.负片.图 ...
- MySQL中的存储过程、游标和存储函数
MySQL中的存储过程首先来看两个问题: 1.什么是存储过程? 存储过程(Stored Procedure)是在数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存 ...
- Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)
Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...