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.从左到中间那 ...
随机推荐
- find 和 locate 命令
一, find 命令 find 命令有三部分构成 1,你要搜索的目录 (. 当前目录, ~家目录, /根目录). 2,你的搜索条件. 3,搜索到后要执行的动作. 常用命令: 1, find . -na ...
- 使用Matlab对灰度图像编程实现2D的傅里叶变换
1. 先载入一幅灰度图像,如下: (非灰度图) 2. 利用函数fft2,对其进行快速傅立叶变换, 并利用函数fftshift 将变换后的图像原点移动到频率矩形的中心. 3. 利用abs()函 ...
- javaio-printwriter
转自http://www.cnblogs.com/skywang12345/p/io_25.html PrintWriter 介绍 PrintWriter 是字符类型的打印输出流,它继承于Writer ...
- zoj3623 Battle Ships ——完全背包?简单DP!|| 泛化背包
link:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3623 看起来像完全背包,但是物品价值是变化的,所以很多人搞的很复 ...
- PHP字符串
<?php $string1 = <<<EVILXR 我有一只小毛驴,我从来也不骑. 有一天我心血来潮,骑着去赶集. 我手里拿着小皮鞭,我心里正得意. 不知怎么哗啦啦啦啦,我摔 ...
- GCC编译器
详见<gcc中文手册> 编译过程 预处理器cpp 编译器gcc 汇编器as 链接器linker file.c -------------> file.i ----------- ...
- MAVEN build ,GOAL plugin ,execution
http://www.avajava.com/tutorials/lessons/what-are-the-phases-of-the-maven-clean-lifecycle.html https ...
- 使用支持向量机训练mnist数据
# encoding: utf-8 import numpy as np import matplotlib.pyplot as plt import cPickle import gzip clas ...
- Linux文件操作
Linux中一切都是文件.如普通文件,目录,设备,管道等.操作这些文件有两种方式,调用系统函数和使用标准I/O库. 一.调用系统函数1.文件描述符:数值类型,表示打开的文件标识程序运行时,会首先打开3 ...
- 001. 启动Visual Studio 2010报错
错误内容: 外接程序"VMDebugger"未能加载或导致了异常. 是否希望移除该外接程序? 错误号: 80004005 如下图: 解决办法一: 1. 点击 是 打开VS2010, ...