牛客网 【每日一题】5月29日 管道取珠

链接:

文章目录

    • 题目描述
    • 题意:
    • 题解:
    • 代码:

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

题目描述

管道取珠是小X很喜欢的一款游戏。在本题中,我们将考虑该游戏的一个简单改版。游戏画面如图1所示:
在这里插入图片描述
游戏初始时,左侧上下两个管道分别有一定数量的小球(有深色球和浅色球两种类型),而右侧输出管道为空。每一次操作,可以从左侧选择一个管道,并将该管道中最右侧的球推入右边输出管道。

例如,我们首先从下管道中移一个球到输出管道中,将得到图2所示的情况。

在这里插入图片描述

假设上管道中有n个球,下管道中有m个球,则整个游戏过程需要进行n+m次操作,即将所有左侧管道中的球移入输出管道。最终n
+m个球在输出管道中从右到左形成输出序列。

爱好数学的小X知道,他共有C(n+m, n)种不同的操作方式,而不同的操作方式可能导致相同的输出序列。举个例子,对于图3所示的游戏情形:
在这里插入图片描述

我们用A表示浅色球,B表示深色球。并设移动上管道右侧球的操作为U,移动下管道右侧球的操作为D,则共有C(2+1,1)=3种不同的操作方式,分别为UUD,
UDU, DUU;最终在输出管道中形成的输出序列(从右到左)分别为BAB,BBA,BBA。可以发现后两种操作方式将得到同样的输出序列。

假设最终可能产生的不同种类的输出序列共有K种,其中第i种输出序列的产生方式(即不同的操作方式数目)有ai个。聪明的小X早已知道,
在这里插入图片描述

因此,小X希望计算得到
在这里插入图片描述

你能帮助他计算这个值么?由于这个值可能很大,因此只需要输出该值对1024523的取模即可(即除以1024523的余数)。

说明:文中C(n+m,n)表示组合数。组合数C(a,b)等价于在a个不同的物品中选取b个的选取方案数。

输入描述:

第一行包含两个整数n,m,分别表示上下两个管道中球的数目。

第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型。其中A表示浅色球,B表示深色球。

第三行为一个AB字符串,长度为m,表示下管道中的情形。

输出描述:

仅包含一行,即为除以1024523的余数

示例1
输入

2 1
AB
B

输出

5

题意:

总结下题目意思:
上下两个管道,上管道有n个球,下管道有m个球,每次在上下取出一个球,球有黑有红,取出会形成不同的系列,序列数为k,而同一种序列可能有不同取法,第i种序列,取法为a[i],
那会得到:所有取法的式子在这里插入图片描述
问:在这里插入图片描述

题解:

乍一看毫无思路,给了我们ai求和的公式,让我们求ai2 求和的公式,这咋整。
注意,题目又臭又长给我们设定一个背景,是为了告诉我们所给的式子是具有物理含义的,题目中ai表示第i种序列的取法,ai求和是一个管道系统中所有取法的和。那ai2表示什么?不就表示两个完全相同的管道系统,独立取出小球,所得两个管道系统序列相同的方案数量
这样能想明白,接下来就好整
dp[k][i][j]表示两个管道都取了k个球,第一个管道系统的第一个管道(上管道)取了i个球,自然第二个管道(第一个管道系统的下管道)取了k-i个球
同理:第二个管道系统的第一个管道取了j个球,第二个管道取了k-j个球
我们要得到相同序列,就要使得每次两侧取出的球都相同
然后转移方程可得:
(图中对四个管道进行标号)
在这里插入图片描述
a[]表示上管道球的颜色
b[]表示下管道球的颜色
dp[0][0][0]=1
有四种情况:
上A = = 上B (a[i] = = b[j]) dp [ k ] [ i ] [ j ]+=dp [ k-1 ] [ i - 1 ] [ j - 1 ] (同时在两个的上管道取一个,这样取出来就是相同序列)
上A = = 下B (a[i] = = b[k-j])dp[k][i][j]+=dp[k-1][i-1][j] (同时在第一个管道系统的上管道和第二个管道系统的下管道取一个球。第二个管道系统下管道取球,上管道不变,所以还是j)
下A = = 上B(b[k-i] = = a[j])dp[i][j][k]+=dp[k-1][i][j-1]
下A = = 下B (b[k-i] = = b[k-j]) dp[i][j][k]+=dp[k-1][i][j]
(其实就是两边管道当相同时自由组合)
我这样讲应该够仔细了
对了,数组空间会超,所以用滚动数组来优化,降低复杂度

代码:

状态压缩代码参考

#include <bits/stdc++.h>
using namespace std;
const int maxn = 500 + 5;
const int mod = 1024523;
int dp[3][maxn][maxn];
int n, m;
char a[maxn], b[maxn];int main() {cin >> n >> m;cin >> a + 1 ;cin >> b + 1;dp[0][0][0] = 1;for(int k = 1; k <= n + m; k++) {memset(dp[k&1], 0, sizeof dp[k&1]);for(int i = 0; i <= n; i++) {if(k - i < 0 || k - i > m) continue;for(int j = 0; j <= n; j++) {if(k - j < 0 || k - j > m) continue;if(i && j && a[i] == a[j])dp[k & 1][i][j]=(dp[k & 1][i][j]+dp[!(k & 1)][i - 1][j - 1])%mod;if(i && k - j && a[i] == b[k - j])dp[k & 1][i][j] =(dp[k & 1][i][j]+ dp[!(k & 1)][i - 1][j])%mod;if(k - i && j && b[k - i] == a[j])dp[k & 1][i][j]=(dp[k & 1][i][j] + dp[!(k & 1)][i][j - 1])%mod;if(k - i && k - j && b[k - i] == b[k-j])dp[k & 1][i][j]=(dp[k & 1][i][j] + dp[!(k & 1)][i][j])%mod;}}}cout << dp[(n + m) & 1][n][n] << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【dfs】拔河比赛(ybtoj dfs-1-1)

拔河比赛 ybtoj dfs-1-1 题目大意 给你n个数&#xff0c;让你分成两堆&#xff0c;使其数量相差不大于1&#xff0c;问数值相差最小是多少 输入样例 1 3 55 50 100输出样例 5数据范围 1⩽T⩽501\leqslant T \leqslant 501⩽T⩽50 2⩽N⩽202\leqslant N\leqslant 202⩽N⩽…

半天搭建你的Jenkins持续集成与自动化部署系统

前言相信每一位程序员都经历过深夜加班上线的痛苦&#xff01;而作为一个加班上线如家常便饭的码农&#xff0c;更是深感其痛。由于我们所做的系统业务复杂&#xff0c;系统庞大&#xff0c;设计到多个系统之间的合作&#xff0c;而核心系统更是采用分布式系统架构&#xff0c;…

牛客网 【每日一题】6月10日 失衡天平

链接&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 终于Alice走出了大魔王的陷阱&#xff0c;可是现在傻傻…

P3345-[ZJOI2015]幻想乡战略游戏【点分树,RMQ】

正题 题目链接:https://www.luogu.com.cn/problem/P3345 题目大意 nnn个点的一棵树&#xff0c;每次修改一个点的点权后询问一个xxx最小化∑y1ndis(x,y)∗dy\sum_{y1}^ndis(x,y)*d_yy1∑n​dis(x,y)∗dy​ 解题思路 先是构建一个点分树&#xff0c;然后考虑如何计算答案。 我…

[XSY]Illyasviel的图游戏(博弈论)

Illyasviel的图游戏 除了1号点和n号点每个点度数小于等于2&#xff0c;因此1 到 n 的所有简单路径互不相交。 在结束游戏前的最后一步一定是剩下一条 1 到 n 的路径&#xff0c;并且路径上的权值全都是1。 游戏总步数确定&#xff0c;如果剩下的最后一条路径确定了&#xff…

【dfs】数独游戏(ybtoj dfs-1-2)

数独游戏 ybtoj dfs-1-3 题目大意 给出一个未完成的数独&#xff0c;让你完成它 输入样例 4.....8.5.3..........7......2.....6.....8.4......1.......6.3.7.5..2.....1.4...... ......52..8.4......3...9...5.1...6..2..7........3.....6...1..........7.4.......3. end…

数学知识总结——矩阵

1 矩阵及其运算 由mnm\times nmn个数aija_{ij}aij​排成的mmm行nnn列的数表称为mmm行nnn列的矩阵&#xff0c;简称mnm\times nmn矩阵。记作&#xff1a; A[a11a12...a1na21a22...a2n............am1am2...amn]A\begin{bmatrix} a_{11} & a_{12} & ...&a_{1n}\\ a_…

.Net业务搭配实用技术栈

前言昨天有篇文章在讨论webform的设计思路&#xff0c;我已经四五年不用webform了&#xff0c;虽然它也提供了HttpModule和httphandle来处理请求&#xff0c;提供了一般处理程序ashx来简化处理流程&#xff0c;但依然会想起它的form runatserver&#xff0c;想起注册客户端脚本…

【dfs】虫食算(ybtoj dfs-1-3)

虫食算 ybtoj dfs-1-3 题目大意 给出一个如ABC的N进制的式子&#xff0c;现在知道某些位上的数字是相同的&#xff0c;让你求出这个式子 样例输入 5 ABCED BDACE EBBAA样例输出 1 0 3 4 2数据范围 1⩽N⩽261\leqslant N \leqslant 261⩽N⩽26 解题思路 从低位到高位枚举…

牛客网 【每日一题】6月11日题目精讲 背包

链接&#xff1a; 文章目录题目描述题解&#xff1a;代码:题目描述 Applese有1个容量为v的背包&#xff0c;有n个物品&#xff0c;每一个物品有一个价值ai&#xff0c;以及一个大小bi 然后他对此提出了自己的疑问&#xff0c;如果我不要装的物品装的价值最大&#xff0c;只是一…

P4899-[IOI2018]werewolf 狼人【Kruskal重构树,主席树】

正题 题目链接:https://www.luogu.com.cn/problem/P4899 题目大意 nnn个点的一张无向图&#xff0c;每次询问(s,t,l,r)(s,t,l,r)(s,t,l,r)表示询问能否找到一条s∼ts\sim ts∼t的路径使得该路径可以分割成点的序号在[l,n][l,n][l,n]和[1,r][1,r][1,r]的两段。 解题思路 首先对…

min_25筛

用途 设f(x)f(x)f(x)是一个积性函数&#xff0c;min_25筛可以在O(n34log⁡n)O(\frac{n^{\frac{3}{4}}}{\log n})O(lognn43​​)内求f(x)f(x)f(x)的前缀和&#xff1a;∑i1Nf(i)\sum_{i1}^{N}f(i)∑i1N​f(i) 使用要求&#xff1a;f(p),f(pk)f(p),f(p^k)f(p),f(pk)的值可以快速…

Service Fabric 用 Powershell 部署应用到本地

前置说明安装 Service Fabric SDK&#xff0c;会在本机 C:\Program Files\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK 生成部署脚本&#xff0c;如下图&#xff1a;用VS创建一个 Service Fabric 应用后&#xff0c;有一个部署脚本&#xff0c;位置在 [应用…

【期望】路径长度(金牌导航 期望-1)

路径长度 金牌导航 期望-1 题目大意 给出一个图&#xff0c;问你从1走到n的期望路径长度 输入样例 4 4 1 2 1 1 3 2 2 3 3 3 4 4输出样例 7.00数据范围 1⩽n⩽1051\leqslant n \leqslant 10^51⩽n⩽105 1⩽m⩽2n1\leqslant m\leqslant 2\times n1⩽m⩽2n 1⩽u,v⩽n1\…

牛客网 【每日一题】6月8日 [SCOI2005]最大子矩阵

链接&#xff1a; 文章目录题目描述题目描述 这里有一个n*m的矩阵&#xff0c;请你选出其中k个子矩阵&#xff0c;使得这个k个子矩阵分值之和最大。 注意&#xff1a;选出的k个子矩阵 不能相互重叠。 输入描述: 第一行为n,m,k&#xff08;1 ≤ n ≤ 100,1 ≤ m ≤ 2,1 ≤ k ≤ …

CF1054D-Changing Array【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/CF1054D 题目大意 一个长度为nnn的序列&#xff0c;每个数小于2k2^k2k&#xff0c;可以选择一些数xorxorxor上2k−12^k-12k−1。要求使得满足alxoral1xor...xorar0a_l\ xor\ a_{l1}\ xor...xor\ a_r0al​ xor al1​ xor...xo…

ElasticSearch入门 附.Net Core例子

1.什么是ElasticSearch?Elasticsearch是基于Lucene的搜索引擎。它提供了一个分布式&#xff0c;支持多租户的全文搜索引擎&#xff0c;它具有HTTP Web界面和无模式JSON文档。 Elasticsearch是用Java开发的&#xff0c;根据Apache许可条款作为开源发布。----来自维基百科的解释…

[XSY]Tree Ext(矩阵树定理,拉格朗日插值,最小生成树,二分)

Tree Ext 这道题相当于把3道题合了起来。 要求修复的边中恰好有 k 条白边&#xff1a; 五颜六色的幻想乡(附拉格朗日插值法求多项式系数 ) bzoj2654 tree(WQS二分 新科技get) 是最小生成树计数而非生成树计数&#xff1a; BZOJ1016」[JSOI2008] 最小生成树计数 具体可以看看…

【期望】乘坐电梯(金牌导航 期望-2)

乘坐电梯 金牌导航 期望-2 题目大意 有n个人&#xff0c;对于没一个单位时间有p的概率最前面的1个人进电梯&#xff0c;有&#xff08;1-p&#xff09;的概率不进&#xff0c;问你t个单位时间后&#xff0c;电梯中的期望人数 样例输入 1 1 0.50 1 样例输出 1 0.5 样例输入…

动态规划练习【一】 背包问题

详细讲解 背包问题大汇总 文章目录背包问题大汇总01背包问题&#xff1a;思路&#xff1a;空间优化复杂度代码总结&#xff1a;完全背包问题&#xff1a;思路&#xff1a;代码&#xff1a;优化多重背包问题&#xff1a;思路&#xff1a;代码&#xff1a;单调队列优化混合三种背…