题意

给你一个偶数长度的字符串,你想要给每一个字符标记成蓝色或者红色,使得红色的字符序列等于蓝色的字符序列,一共有多少种方法可以做这件事

输入格式

输入一行包含一个字符串\(S, (2≤|S|≤40)\)
字符串的每个字符为'o'或者'x'

输出格式

输出一个整数

样例输入&输出

样例1

oxox2

样例2

oooxxx0

样例3

xoxxox4

样例4

xo0

样例5

ooooxoox8

样例6

ooxxoxox8

样例7

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx137846528820

分析

本题就是要寻找长度为 \(\frac{|S|}{2}\) 的 \(S\) 的子序列 \(S_1\) 的个数,使 \(S\) 的另一个子序列 \(S_2\) 与 \(S_1\) 相等,且 \(S_2\) 与 \(S_1\) 互斥,即对于任意\(S_1[i],S_2[j],i≠j\)。

我们能确定 \(S_1\) 的长度(即\(\frac{|S|}{2}\)),以及 \(S_1\) 中'o'和'x'的个数,于是想到爆搜穷举每一个可能的 \(S_1\) ,最多搜\(C^{20}_{10}=184756\)次。对于每一个可能的 \(S_1\) ,我们用\(O(n^2)\)的dp去检验它的方案数。设 \(dp[i][j]\) 表示枚举到第 \(i\) 位,其中有 \(j\) 位与 \(S_1\) 匹配的方案数,则

\[if(dp[i-1][j-1]存在且b[j]==a[i])dp[i][j]+=dp[i-1][j-1]\]

\[if(dp[i-1][j]存在且b[i-j]==a[i])dp[i][j]+=dp[i-1][j]\]

初始化\(dp[0][0]=1\)

最终答案为\(dp[n][n/2]\)

总时间复杂度为\(O(C^{n}_{n/2}* n^2)≈295609600\),卡卡常能过

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 45
using namespace std;
char s[maxn];
bool a[maxn],b[maxn];
int n,n1,n0;
long long ans,dp[maxn][maxn];
long long check(){for(int i=0;i<=n;i++){for(int j=0;j<=(n>>1);j++){dp[i][j]=0;}}dp[0][0]=1;for(int i=1;i<=n;i++){for(int j=0;j<=min(i,(n>>1));j++){if(j&&dp[i-1][j-1]&&b[j]==a[i])dp[i][j]+=dp[i-1][j-1];if(j<i&&dp[i-1][j]&&b[i-j]==a[i])dp[i][j]+=dp[i-1][j];}}return dp[n][n>>1];
}
void dfs(int step){if(step>(n>>1)){ans+=check();return;}if(n1){n1--;b[step]=1;dfs(step+1);n1++;}if(n0){n0--;b[step]=0;dfs(step+1);n0++;}
}
int main(){scanf("%s",s);n=strlen(s);for(int i=1;i<=n;i++){a[i]=(s[i-1]=='x');n1+=a[i],n0+=!a[i];}n1>>=1,n0>>=1;dfs(1);printf("%lld",ans);return 0;
}

转载于:https://www.cnblogs.com/BlogOfchc1234567890/p/9866599.html

XJOI 3877 红蓝字符串相关推荐

  1. 不能从远程创建com+对象_红蓝对抗攻防实战:寻找COM对象

    概述 渗透测试人员.红蓝对抗的蓝军(攻击方).恶意行动者经常会选择COM对象来实现横向移动.此前,一些安全研究人员陆续针对COM对象开展研究,包括Matt Nelson(enigma0x3)在2017 ...

  2. 红蓝对抗之Windows内网渗透

    无论是渗透测试,还是红蓝对抗,目的都是暴露风险,促进提升安全水平.企业往往在外网布置重兵把守,而内网防护相对来说千疮百孔,所以渗透高手往往通过攻击员工电脑.外网服务.职场WiFi等方式进入内网,然后发 ...

  3. 渗透测试-红/蓝队Hvv技术手册/面试

    红/蓝队Hvv技术手册/面试 介绍一下自己,喜欢研究的,实战过的项目,得过奖项的感悟. 经常关注的安全平台 基本功 网络协议(HTTP.TCP) 操作系统命令 底层编程开发(应用框架) 加密解密编码 ...

  4. p80 红蓝对抗-AWD 模式准备攻防监控批量

    数据来源 何为AWD AWD 常见比赛规则说明: Attack With Defence,简而言之就是你既是一个 hacker(黑客),又是一个 manager . 比赛形式:一般就是一个 ssh 对 ...

  5. 2019华为性格测试题_小红书达人力荐!华为 Mate20 Pro红蓝新色最懂女人心

    1月10日,华为在北京三里屯CHAO酒店举行了一场与众不同的发布会,这次发布会的主题是"红蓝知己",发布了华为Mate 20 Pro的两款新配色--馥蕾红.璨星蓝,而这两款新配色也 ...

  6. 红蓝对抗 linux内网渗透

    目录 一.前言 二.提权 2.1 利用内核漏洞进行提权 2.2 利用文件权限配置不当进行提权 2.3 利用SUID程序进行提权 三.隧道 3.1 SSH 3.2 nc/ncat 3.3 portmap ...

  7. 王者S19服务器维护时间表,王者荣耀s19buff刷新时间一览 红蓝BUFF刷新间隔是多久...

    王者荣耀S19赛季加大了打野位对战局的影响,因此熟悉红蓝BUFF的刷新时间非常重要,无论是反BUFF还是拿自家BUFF都应该清楚刷新时间点.今日光耀菌就为大家带来了红蓝BUFF的刷新时间表,快来了解一 ...

  8. 【网络安全】红蓝攻防:shellcode的分析

    前言 在做红蓝攻防时,常常要用到cs.msf等工具,使用工具生成shellcode或可执行程序,那么小小的shellcode为何能做这么多事情,拿到shellcode后又该怎么分析.希望这篇文章能给大 ...

  9. c++游戏代码坦克大作战_一红一蓝多种模式的双人小游戏:红蓝大作战

    作者有话说:上次推荐的森林冰火人很多小伙伴后台找我要链接,或者搜索不到:首先声明下森林冰火人.同桌大作战都不是辣椒人游戏工作室研发的,小编也是微信小游戏双人栏目下搜索到的,如果想要玩双人小游戏的可以打 ...

  10. java先抽到红球获胜,【图片】红蓝球概率问题,通过程序模拟抽取,计算结果已出,有兴趣来看【非现役文职吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我用的c语言,大一学的还没忘完....程序非常简单,就是生成随机数,然后根据随机数的结果进行计数就好了. 代码贴下面,有兴趣的可以看看. 懂行的请不要喷我 ...

最新文章

  1. 计算机系统的安全需求的需求等级,计算机信息系统安全等级保护 通用技术要求.PDF...
  2. spring mvc velocity 配置备忘
  3. Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档
  4. IOS 为UILabel添加长按复制功能
  5. Pandas Timedelta对象
  6. 开源原生JavaScript插件-CJPCD(省市区联动)
  7. tfs 解除锁定命令
  8. 创e下载园7edown.com(坑爹流氓网站大揭秘)
  9. 京东联盟API-二合一链接转链接口-线报转链-京粉转链接口
  10. c语言编程 设计密码锁,单片机控制安全密码锁的设计(附程序,pcb,原理图)
  11. eclipse之 Type Hierachy:Viewing the type hierarchy
  12. SharePoint REST API - 使用REST接口对列表设置自定义权限
  13. 关于ubuntu的详细介绍
  14. 手机PDF如何转图片格式
  15. ESP8266连接阿里云--MQTT协议
  16. 社会工程学与APT攻击之——社工防御方法
  17. KDJ金叉死叉分析以及KDJ金叉的买点形态
  18. Spark行动算子(Action)--reduce算子
  19. 山东ISO9001标准的特点和作用
  20. 易宪容:内地券商进入香港赢利新模式

热门文章

  1. 不同编码页引用同一个css文件
  2. linux 17 中文输入,Rethat Linux Fedora17添加中文输入法
  3. 下载源码并打包生成war包(自己打包dubbo-admin)
  4. js 小数自动补0_JS自定义保留小数,并支持补零(四舍五入)
  5. Java与mysql数据库编程中遇见“Before start of result set at com.mysql.jdbc.SQLError.createSQLException” 的解决办法
  6. 如何使用github和git进行团队合作开发(队友和owner的仓库连接)
  7. java中访问权限的设置
  8. seqkit根据基因id_基因家族成员的鉴定/基因在染色体上的位置
  9. 日语输入法电脑版_如何安装日语输入法?(手机/电脑安装使用指南)
  10. 【渝粤教育】广东开放大学 微信平台开发与应用 形成性考核 (54)