gym 102875 H. Happy Morse Code

gym 102875 H. Happy Morse Code

题意:

一个长度为n的字符串,现在给你m个小字符串,问小字符串拼成大字符串有多少种方法?
答案mod128

题解:

其实也不难,但是本人对于dp及其不敏感,我看出来是dp,也明白用O(MN)的方法来做,但就是写不出递推式,唉,还要多练
设dp[i]表示以i结尾的字符串有多少种表示方法
(dp[ i ]表示模式串前i个字符组成的子串 可以由已提供的字符串拼接而成的方法数)
转移方程就是:dp[i]+=dp[i-len[j]],(条件s.substr(i-zlen[j],zlen[j]) == z[ j ])
i枚举的是模式串的每一位,j枚举的是每一个小字符串
含义:对于长度为i的字符串可以由长度为i-len[j]的字符串拼接第j个小字符串得到,当且仅当s.substr(i-zlen[j],zlen[j])等于z[ j ]
但是题目说了要mod128,且根据最终的答案输出不同东西
那么dp[]可以就有多个含义,
dp[i] = 0的含义:
1.可以拼成长度为i的字符串,方案数mod128后等于0
2.不能拼成长度为i的字符串,方案数为0
dp[i] =1的含义:
1.有多种构成方式,只是mod后为1,题目要求输出puppymousecat 1
2.只有一种构成方式,题目要求输出happymorsecode
我们可以引入一个数组flag来记录每一位的值到底是mod后,还是原本的值
比如flag[i] = 0,dp[i] = 0,说明不能拼成长度为i的字符串,如果flag[i] = 1,就是第一种情况
详细见代码:

代码:

#include <iostream>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn=100010;
ll dp[maxn];
string s;
string z[100];
ll zlen[100]={0};
ll flag[100010]={0};
int t,m,n;
int main()
{scanf("%d",&t);while (t--) {scanf("%d%d",&n,&m);memset(dp,0,sizeof(dp));memset(zlen,0,sizeof(zlen));memset(flag,0,sizeof(flag));string x;for(int i=1;i<=m;i++){cin>>x>>z[i];zlen[i]=z[i].length();}cin>>s;dp[0]=1;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(i-zlen[j]>=0){string ww=s.substr(i-zlen[j],zlen[j]);if(ww==z[j])//如果一样 {dp[i]+=dp[i-zlen[j]];//增加答案 if(flag[i-zlen[j]]==1)//根据前一个状态是否为mod结果,来判断后一个状态是不是 flag[i]=1;if(dp[i]>=128){dp[i]%=128;flag[i]=1;}}}}}if(flag[n]==1){printf("puppymousecat %d\n",dp[n]);}else{if(dp[n]==0)printf("nonono\n");else if(dp[n]==1)printf("happymorsecode\n");else printf("puppymousecat %d\n",dp[n]);}}return 0;
}

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

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

相关文章

开源项目商业模式分析(2) - 持续维护的重要性 - Selenium和WatiN

该系列第一篇发布后收到不少反馈&#xff0c;包括&#xff1a;第一篇里说的MonicaHQ不一定盈利没错&#xff0c;但是问题在于绝大多数开源项目商业数据并没有公开&#xff0c;从而无法判断其具体是否盈利。难得MonicaHQ是公开的&#xff0c;所以才用来做这系列文章的开篇。很多…

[SCOI2015]小凸玩矩阵 (匈牙利+二分)

description 题目描述 小凸和小方是好朋友&#xff0c;小方给小凸一个 NM&#xff08;N≤M&#xff09;的矩阵 A&#xff0c;要求小凸从其中选出 N 个数&#xff0c;其中任意两个数字不能在同一行或同一列&#xff0c;现小凸想知道选出来的 N 个数中第 K大的数字的最小值是多…

洛谷P4971:断罪者(左偏树)

解析 看起来就是左偏树的基本操作啊… 然而就是调不过去 吐了qwq 参考了望月大神的实现 感觉清晰的多 就定义并查集维护的是每个点所在的堆的根节点 一下子少了很多恶心的套娃 代码 #include<bits/stdc.h> using namespace std; #define ll long long #define il inl…

CF1267G-Game Relics【数学期望,dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF1267G 题目大意 给出nnn个物品&#xff0c;你可以进行如下操作 花费xxx获得随机一个物品。花费cic_ici​获得第iii个物品。 1≤n≤100,1≤x≤10000,∑ai≤1041\leq n\leq 100,1\leq x\leq 10000,\sum a_i\leq 10^41≤n≤1…

深入业务成为更好的软件架构师——信息化建设图鉴一二例

软件开发实际上跟英语比较类似&#xff0c;都是一项工具&#xff0c;服务于各行各业。从程序员的个人修养上来讲&#xff0c;一是要研习好软件开发这门技艺&#xff0c;二是要深入到所服务的行业。说到底&#xff0c;软件的终极目标是模拟业务&#xff0c;在此期间常常会有一个…

2020牛客暑期多校训练营(第三场)

比赛链接 题号题目通过率AClam and Fish1453/4902BClassical String Problem1547/6542COperation Love1431/5631DPoints Construction Problem548/2238ETwo Matchings943/4141FFraction Construction Problem1034/6445GOperating on a Graph972/4259HSort the Strings Revisio…

文理分科 (最小割问题)

Description 文理分科是一件很纠结的事情&#xff01;&#xff08;虽然看到这个题目的人肯定都没有纠结过&#xff09; 小P所在的班级要进行文理分科。他的班级可以用一个n*m的矩阵进行描述&#xff0c;每个格子代表一个同学的座位。每位同学必须从文科和理科中选择一科。同学…

NOIP2014洛谷P2296:寻找道路(bfs)

解析 杀鸡焉用AS47 做的巨差的一道题 WA3遍写的巨麻烦复杂度被吊打 qwq 说起来很玄学&#xff0c;但第一交之前就有一种强烈的预感觉得自己会WA 一开始像个傻子一样对有环图上记搜 WA了还不知道为啥… 可能真是傻了吧qwq 过了一会看着lojn50,m800干瞪了会眼后终终终于发现了bu…

P7097-[yLOI2020]牵丝戏【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P7097 题目大意 有两个人在打游戏&#xff0c;开始时每个人有个初始伤害xxx和delay值ddd。 有mmm种道具&#xff0c;每个道具一个回合只能用一次&#xff0c;可以使当前回合玩家伤害初始伤害的ki10000\frac{k_i}{10000}1000…

恭贺微软技术俱乐部苏州站正式成立

今天去苏州微软中国&#xff0c;参加了微软技术俱乐部苏州站的成立大会。大会的历程悉数经历&#xff0c;这会儿仍在为各位大佬、社区领袖的奉献精神所感动。在通过我们公司同事分享的链接报名时就了解到&#xff0c;大会上有苏震巍老师和蒋金楠老师的分享&#xff0c;便笃定了…

I. Intersections

I. Intersections 题意&#xff1a; n行&#xff0c;m列&#xff0c;n * m个交点&#xff0c;当我们处于交点&#xff08;i&#xff0c;j&#xff09;&#xff0c; 如果当前时间位于[k * aij k * bij , (k1) * aij k * bij ),我们可以上下移动 如果当前处于[(k1)* aij k *…

[HNOI2013]消毒 (匈牙利最大匹配)

Description 最近在生物实验室工作的小T遇到了大麻烦。 由于实验室最近升级的缘故&#xff0c;他的分格实验皿是一个长方体,其尺寸为abc&#xff0c;a、b、c 均为正整数。为了实验的方便&#xff0c;它被划分为abc个单位立方体区域&#xff0c;每个单位立方体尺寸为111。用(i,…

YbtOJ-变量观测【鸽笼原理】

正题 题目大意 有nnn个数字开始都是000&#xff0c;要求有qqq次操作。 新建一个观测员&#xff0c;观测其中的kkk个数&#xff0c;当这kkk个数从此刻开始变化量不小于ttt时观测结束。将第iii个数加vvv&#xff0c;并输出此时观测结束的观测员编号。 强制在线 1≤n,q≤2105,1…

11.4模拟:总结

解析 110pts 7010300 写三题&#xff0c;挂三题 qwq T1在不同段之间的衔接处犯了个很脑残的错误 T2双向链表l[i]i-1活活写成了l[i]0 结果还能过样例 T3我两个复制的东西改完上面的没改下面的 。。。 qwq 本次做前两题做的有些太快了 样例过了就直接跳了 结果全部挂掉 以后…

.NET Core微服务之路:基于Ocelot的API网关实现--http/https协议篇

前言 最近一直在忙公司和私下的兼职&#xff0c;白天十个小时&#xff0c;晚上四个小时&#xff0c;感觉每天都是打了鸡血似的&#xff0c;精神满满的&#xff0c;连自己那已经学打酱油的娃都很少关心&#xff0c;也有很长一段时间没有更新博客了&#xff0c;特别抱歉&#…

gym 102875A -- Array(未更新完)

gym 102875A – Array 题意&#xff1a; 对于一个数组a&#xff0c;以及数p&#xff0c; q个操作 1.对于区间[l,r]&#xff0c;里面所有数k 2.对于区间[l,r]&#xff0c;里面所有数 * k 3.对于区间[l,r]&#xff0c;里面所有数变成k次幂 4.对于区间[l,r]&#xff0c;输出里面…

[NOI2009] 变换序列 (匈牙利最大匹配)

description … solution 我竟然一眼题&#xff01;&#xff01; 变换后的TTT数组是[0,n)[0,n)[0,n)的排列&#xff0c;变换规则也有&#xff0c;距离DDD也知道 很明显可以求出iii的可能变换对象 这不就是个最大匹配&#xff1f;&#xff1f; 无解就是匹配数量达不到nnn罢了…

YbtOJ-方格填写【插头dp】

正题 题目大意 给出nmn\times mnm的网格填着−1∼4-1\sim 4−1∼4的数字&#xff0c;对于将所有的−1-1−1填上0∼40\sim 40∼4的方案中&#xff0c;定义方案XXX的权值&#xff0c;设在相邻网格之间连线&#xff08;每对只能连一条&#xff09;使得每个网格连出去的边数恰好位…

洛谷P3607:Subsequence Reversal P(区间dp)

解析 很巧妙的题 我一开始的dp设计其实是可以的 只是我误认为它的转移需要n^2 然后尝试把它压掉一维结果越跑越远… 但一个技巧是只从相邻的状态转移 使转移变成O1 代码 #include<bits/stdc.h> using namespace std; #define ll long long const int N52; const int M…

使用 WeihanLi.Npoi 操作 CSV

Intro最近发现 csv 文件在很多情况下都在使用&#xff0c;而且经过大致了解&#xff0c;csv 格式简单&#xff0c;相比 excel 文件要小很多&#xff0c;读取也很是方便&#xff0c;而且也很通用&#xff0c;微软的 ml.net 的示例项目 用来训练模型的数据也是使用的 csv 来保存的…