XJOI 3877 红蓝字符串
题意
给你一个偶数长度的字符串,你想要给每一个字符标记成蓝色或者红色,使得红色的字符序列等于蓝色的字符序列,一共有多少种方法可以做这件事
输入格式
输入一行包含一个字符串\(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 红蓝字符串相关推荐
- 不能从远程创建com+对象_红蓝对抗攻防实战:寻找COM对象
概述 渗透测试人员.红蓝对抗的蓝军(攻击方).恶意行动者经常会选择COM对象来实现横向移动.此前,一些安全研究人员陆续针对COM对象开展研究,包括Matt Nelson(enigma0x3)在2017 ...
- 红蓝对抗之Windows内网渗透
无论是渗透测试,还是红蓝对抗,目的都是暴露风险,促进提升安全水平.企业往往在外网布置重兵把守,而内网防护相对来说千疮百孔,所以渗透高手往往通过攻击员工电脑.外网服务.职场WiFi等方式进入内网,然后发 ...
- 渗透测试-红/蓝队Hvv技术手册/面试
红/蓝队Hvv技术手册/面试 介绍一下自己,喜欢研究的,实战过的项目,得过奖项的感悟. 经常关注的安全平台 基本功 网络协议(HTTP.TCP) 操作系统命令 底层编程开发(应用框架) 加密解密编码 ...
- p80 红蓝对抗-AWD 模式准备攻防监控批量
数据来源 何为AWD AWD 常见比赛规则说明: Attack With Defence,简而言之就是你既是一个 hacker(黑客),又是一个 manager . 比赛形式:一般就是一个 ssh 对 ...
- 2019华为性格测试题_小红书达人力荐!华为 Mate20 Pro红蓝新色最懂女人心
1月10日,华为在北京三里屯CHAO酒店举行了一场与众不同的发布会,这次发布会的主题是"红蓝知己",发布了华为Mate 20 Pro的两款新配色--馥蕾红.璨星蓝,而这两款新配色也 ...
- 红蓝对抗 linux内网渗透
目录 一.前言 二.提权 2.1 利用内核漏洞进行提权 2.2 利用文件权限配置不当进行提权 2.3 利用SUID程序进行提权 三.隧道 3.1 SSH 3.2 nc/ncat 3.3 portmap ...
- 王者S19服务器维护时间表,王者荣耀s19buff刷新时间一览 红蓝BUFF刷新间隔是多久...
王者荣耀S19赛季加大了打野位对战局的影响,因此熟悉红蓝BUFF的刷新时间非常重要,无论是反BUFF还是拿自家BUFF都应该清楚刷新时间点.今日光耀菌就为大家带来了红蓝BUFF的刷新时间表,快来了解一 ...
- 【网络安全】红蓝攻防:shellcode的分析
前言 在做红蓝攻防时,常常要用到cs.msf等工具,使用工具生成shellcode或可执行程序,那么小小的shellcode为何能做这么多事情,拿到shellcode后又该怎么分析.希望这篇文章能给大 ...
- c++游戏代码坦克大作战_一红一蓝多种模式的双人小游戏:红蓝大作战
作者有话说:上次推荐的森林冰火人很多小伙伴后台找我要链接,或者搜索不到:首先声明下森林冰火人.同桌大作战都不是辣椒人游戏工作室研发的,小编也是微信小游戏双人栏目下搜索到的,如果想要玩双人小游戏的可以打 ...
- java先抽到红球获胜,【图片】红蓝球概率问题,通过程序模拟抽取,计算结果已出,有兴趣来看【非现役文职吧】_百度贴吧...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我用的c语言,大一学的还没忘完....程序非常简单,就是生成随机数,然后根据随机数的结果进行计数就好了. 代码贴下面,有兴趣的可以看看. 懂行的请不要喷我 ...
最新文章
- WordPress漏洞扫描工具WPScan
- Jerry开发的SAP note工具
- L2-020. 功夫传人
- html网页设计要点,网站交互设计的8个要点
- 开发应用层的需要了解 framework层吗?---不需要!!!!
- mysql系统服务初始化_MySql服务初始化、安装、启动
- 目标检测之RRPN的学习笔记~
- 搭建ftp_Windows 10搭建FTP服务器!
- Python编程实践之Choose
- 【RSLogix5000】—(1.1)—厂房ControlLogix系统介绍(硬件介绍)——原理
- MySQL中幻读是如何解决的
- PG in not in系列方案比较
- 服务器主板支持什么cpu,怎么看主板支持什么CPU(主板和cpu兼容搭配知识)
- 元宵节没用智能名片在互联网发贺卡,那就OUT了
- TextView 悬挂缩进实现及解析
- 【洛谷】P4147 玉蟾宫 解题报告
- 帮你分清嵌入式与单片机
- 保险也能拼购?个人可以凑够人数组团购买医疗保险的4大风险
- 根本解决Python2中unicode编码问题
- 【程序源代码】一个安卓查询类app制作的​开源项目
热门文章
- 用c#写的smtp邮件发送类
- javascript中的forEach
- sourcetree使用说明
- 详解Linux防火墙iptables禁IP与解封IP常用命令
- android4.0 底部菜单,Android自定义控件系列(四)—底部菜单(下)
- c语言随机生成算式的对错判断,蔡奇宏软件工程第二次作业--四则运算
- velocity 获取list对象_Redis专题2:认识list、Zset与BitMaps
- 【渝粤教育】国家开放大学2018年秋季 0692-21T化工设备机械基础 参考试题
- 数据挖掘:概念与技术 笔记
- 为什么我们需要研究迁移学习?