51nod1313 完美串
第一行一个整数K,1<=K<=3000.
第二行一个字符串S,1<=len(S)<=3000,且只由'R','G','B'三种字符组成。
一个整数,即不同的四元组(a,b,c,d)的个数。
容斥+dp,
ans=([a,b]存在k个连续的'G',[c,d]任意的方案数)+([c,d]存在k个连续的'G',[a,b]任意的方案数)-([a,b],[c,d]都存在k个连续的'G'的方案数)+([a,b],[c,d]都不存在k个连续的'G',但拼起来之后存在k个连续的'G'的方案数)
#include<cstdio>
#include<cstring>
char s[];
int n,k;
long long ans=;
int ls[],rs[];
short cl[][],cr[][],cs[][];
int l1[][],r1[][];
int max(int a,int b){return a>b?a:b;}
int C(int x){return x*(x+)/;}
int main(){
scanf("%d%s",&k,s+);
n=strlen(s+);
for(int i=;i<=n;++i)if(s[i]!='G')s[i]=;
for(int i=;i<=n;++i)if(s[i])cs[i][i]=cl[i][i]=cr[i][i]=;
for(int d=;d<n;++d)for(int l=,r=+d;r<=n;++l,++r){
if(s[r])cl[l][r]=cl[l][r-]+;
if(s[l])cr[l][r]=cr[l+][r]+;
cs[l][r]=max(max(cs[l][r-],cs[l+][r]),max(cl[l][r],cr[l][r]));
}
for(int i=;i<=n;++i){
for(int j=;j<=i;++j)if(cs[j][i]>=k)++ls[i];
for(int j=i;j<=n;++j)if(cs[i][j]>=k)++rs[i];
}
for(int i=n;i;--i)rs[i]+=rs[i+];
for(int i=;i<n;++i)ans+=1ll*ls[i]*C(n-i)+1ll*rs[i+]*i-1ll*ls[i]*rs[i+];
for(int i=;i<=n;++i)for(int j=i;j<=n;++j){
if(cs[i][j]<k&&cs[i][j]){
if(cl[i][j])++l1[j][cl[i][j]];
if(cr[i][j])++r1[i][cr[i][j]];
}
}
for(int i=n;i;--i)for(int j=;j<k;++j)r1[i][j]+=r1[i+][j];
for(int i=;i<=n;++i)for(int j=k-;j;--j)r1[i][j]+=r1[i][j+];
for(int i=;i<n;++i)for(int j=;j<k;++j)ans+=1ll*l1[i][j]*r1[i+][k-j];
printf("%lld",ans);
return ;
}
第一行一个整数K,1<=K<=3000.
第二行一个字符串S,1<=len(S)<=3000,且只由'R','G','B'三种字符组成。
一个整数,即不同的四元组(a,b,c,d)的个数。
51nod1313 完美串的更多相关文章
- 完美串(区间dp)
完美串 Description 爱美之心人皆有之,GG也不例外.所以GG他对于完美串有一种热衷的爱.在GG眼中完美串是一个具有无比魅力的01子串.这个子串有之其魅力之处,对它取反后水平翻转,它又和它原 ...
- CF356E - Xenia and String Problem
也许更好的阅读体验 \(\mathcal{Description}\) 定义一种字符串\(gray\)串满足: 长度为奇数 正中间的字母只出现一次 左右两端相同,左右两端也是gray串 一个\(gra ...
- 2015 GDUT校赛
周末打了个GDUT的校赛,也是作为SCAU的一场个人排位. 比赛中竟然卡了个特判,1个半钟就切了5条了,然后一直卡. 还有其他两条可以做的题也没法做了,性格太执着对ACM来说也是错呀. 讲回正题 . ...
- 完美的代价(swap成回文串、贪心)
Description 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的. 现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串 ...
- 回文串---吉哥系列故事——完美队形II
HDU 4513 Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出 ...
- hdu----(4513)吉哥系列故事——完美队形II(manacher(最长回文串算法))
吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- (回文串 Manacher)吉哥系列故事——完美队形II -- hdu -- 4513
http://acm.hdu.edu.cn/showproblem.php?pid=4513 吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) ...
- [RouterOS] ROS对接碧海威或PA等流控实现完美流控详细教程(附脚本全免费)
前言: 经常在群里看到不少朋友争论海蜘蛛 ROS 维盟 爱快 碧海威 流控大师 Woyos等等软路由,哪个好.实际上,网络产品是复杂的,现在的软路由功能上已经远远不是单独的路由了.每种产品都有他本身的 ...
- HDU 4513 吉哥系列故事——完美队形II (Manacher变形)
题意:假设有n个人按顺序的身高分别是h[1], h[2] ... h[n],从中挑出一些人形成一个新的队形,新的队形若满足以下要求,则就是新的完美队形: 1.连续的 2.形成回文串 3.从左到中间那 ...
随机推荐
- Bash Shell字符串操作小结
装载自:http://my.oschina.net/aiguozhe/blog/41557 1. 取长度 str="abcd" expr length $str # 4 echo ...
- JQuery中操作Css样式
//1.获取和设置样式 $("#tow").attr("class")获取ID为tow的class属性 $("#two").attr(&qu ...
- Linux启动流程详解
在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多:一般就是通电.BIOS.主引导记录.操作系统这四步.所以我们一般认为加载内核是linux启动流程的第一步. 第一步.加载内核 操作系统接 ...
- Lock锁
Lock lock = new ReentrantLock(); lock.lock(); try { } finally { } 注意:不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的 ...
- hdu1712 ACboy needs your help 分组背包
最基础的分组背包~ #include <iostream> #include <cstdio> #include <cstdlib> #include <cs ...
- C#术语
数字代码.文本代码.机器码.托管代码.中间语言(IL).即时编译(JIT).COM(+).应用程序域.地址控件.虚拟内存
- 2-1-1 GDI
主要内容:介绍Windows图形设备接口(GDI)及相关概念 1.Windows图形设备接口(GDI) <1>Windows图形设备接口(GDI),是为与设备无关的图形设计的. 所谓设备 ...
- 【转】轻松搞定FTP之FlashFxp全攻略
转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...
- T4 Templates
T4 Templates and the Entity Framework https://msdn.microsoft.com/en-us/data/gg558520.aspx EF Designe ...
- InvokeRequired和Invoke
C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它.此时它将会在内部调用ne ...