Lightoj-1268 Unlucky Strings(kmp&&矩阵快速幂)

【推荐100个unity插件】制作美丽 Unity 景观,增强Terrain材质表现的插件——GTS GTS地形着色器是一款专为Unity设计的强大工具,可解决地形纹理绘制和光照处理的难题。它提供一键式配置,支持实时调整地形效果,包含细节注入、高度混合、雪注入等核心功能,并兼容网格地形和低多边形模型。插件完美集成Gaia天气系统,支持HDRP细分效果。安装后通过GTS管理器创建配置文件并应用到地形,即可快速生成高质量地形渲染。其模块化设计包含全局设置、网格转换和细节调整等面板,使开发者能灵活控制地形表现,显著提升视觉效果与性能表现。 阅读详情

题目:

http://lightoj.com/volume_showproblem.php?problem=1268

题意:

给出a个字符,求用这a个字符组成的长度为n的字符串中不包含子串s的个数。


思路:

首先知道矩阵可以解决这样一类经典问题:

给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值

把给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j。令C=A*A,那么C(i,j)=ΣA(i,k)*A(k,j),实际上就等于从点i到点j恰好经过2条边的路径数(枚举k为中转点)。类似地,C*A的第i行第j列就表示从i到j经过3条边的路径数。同理,如果要求经过k步的路径数,我们只需要二分求出A^k即可。

那么我们就可以把这个字符串中的点转换成lens个节点,0节点表示起始节点,lens节点表示匹配到字符串最后一个节点。mat[i][j]就是从i节点到j节点,即已经匹配到i字符下面要匹配j字符可能的方法数。当匹配到lens就是包含这个字符串,那么只需要建立mat[lens][lens]的矩阵,每次乘积都是增加一个字符之后从i字符匹配到j字符的方法数。在n次乘积之后从0节点到其他每个节点的方法数之和也就是从起始到最后匹配到某个非最终节点的路径数之和。也就是答案数了。

然后对于起始矩阵的建立,可以借用kmp的next数组完成每个字符节点的转移,也就是判断当前字符匹配位置之后加某个字符能够最大匹配到的位置。

很好的矩阵理解题,还有对kmp的next数组的理解,矩阵的知识还是要多看看的,数学还是很重要。

代码:

//kopyh
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define N 112
using namespace std;
int n,m,sum,res,flag;
void getNext(char *pre, int len, int *next)
{
    int i = 0,j = -1;
    next[0] = -1;
    while(i < len)
    {
        if(j == -1 || pre[i] == pre[j])
        {
            i++,j++;
            if(pre[i]!=pre[j]) next[i] = j;
            else next[i] = next [j];
        }
        else   j = next[j];
    }
}
struct Matrix
{
    unsigned ma[N][N];
    int n,m;
};
Matrix matMul(Matrix m1, Matrix m2)
{
    Matrix ans;
    memset(ans.ma,0,sizeof(ans.ma));
    for(int i=0;i<m1.n;i++)
        for(int j=0;j<m2.m;j++)
            for(int k=0;k<m1.m;k++)
                ans.ma[i][j]=(ans.ma[i][j]+m1.ma[i][k]*m2.ma[k][j]);
    ans.n=m1.n; ans.m=m2.m;
    return ans;
}
Matrix matPow(Matrix m1, int k)
{
    Matrix ans;
    for(int i=0;i<m1.n;i++)
        for(int j=0;j<m1.m;j++)
            ans.ma[i][j] = (i==j);
    ans.n=ans.m=m1.n;
    while(k)
    {
        if(k&1)ans = matMul(ans,m1);
        m1 = matMul(m1,m1);
        k>>=1;
    }
    return ans;
}
char s[N],ss[N];
int a[N];
int main()
{
    int i,j,k,cas,T,t,x,y,z;
    scanf("%d",&T);
    cas=0;
    while(T--)
    {
        scanf("%d%s%s",&n,&s,&ss);
        x=strlen(s);
        y=strlen(ss);
        getNext(ss,y,a);
        Matrix ans;
        memset(ans.ma,0,sizeof(ans.ma));
        ans.n=ans.m=y;
        for(i=0;i<y;i++)
            for(j=0;j<x;j++)
            {
                t = i;
                while(t && ss[t]!=s[j])t = a[t];
                if(ss[t] == s[j])t++;
                ans.ma[i][t]++;
            }
        ans = matPow(ans,n);
        unsigned res=0;
        for(i=0;i<y;i++)res+=ans.ma[0][i];
        printf("Case %d: %u\n",++cas,res);
    }
    return 0;
}







python基础知识补充 1. jupyter notebook 解释 2. ipython 魔法命令 3. latex in Markdown cell(在markdown里面编写数学公式) 4. jupyter notebook功能扩展:安装Nbextension 5. python解释与运行 6. 垃圾回收(计数机制与分代回收机制) 7. 名字空间与局部作用域L和全局作用域G 8. 小整数缓存区与字符驻留 9. Statement &Expression 10. 调试 阅读详情

相关推荐

解决ublox无法定位问题(一直输出$GxTXT)

最近开始研究有关RTK技术的项目,于是先购买了两块ublox公司的NEO-M8T-0型号芯片。(注意NEO-M8T还细分为NEO-M8T-0和NEO-M8T-2,前者不支持RTCM输出,后者支持RTCM输出) 首先都是按常规步骤,直接把芯片模块串口接电脑调试,这边推荐是用官网的u-center调试软件。GPS芯片大多数都是上电后串口自动发送定位等信息,这两块芯片有一块正常情...

众缈之门的博客 7359

LightOJ 1268 Unlucky Strings 【KMP+矩阵】

http://www.lightoj.com/volume_showproblem.php?problem=1268 题目大意: 给出一个字符集和一个字符串和正整数n,问由给定字符集组成的所有长度为n的串中不以给定字符串为连续子串的有多少个? 字符集大小最大50,字符串最大50,n最大10^9。最后结果模2^32 解题思路: 设给定字符串为str。 首先必须明确的是解题的主要思路是矩阵

wh2124335的专栏 1284

Cadence Allegro PCB文件对比实战:3分钟搞定两份设计差异(附颜色标注技巧)

本文详细介绍了如何高效使用Cadence Allegro的Design Compare功能进行PCB文件差异对比。通过实战工作流,可在3分钟内精准定位并理解两份设计在布局、布线、元件等方面的关键差异,并分享了自定义颜色标注技巧,帮助工程师快速聚焦重要修改,提升设计评审与团队协作效率。

weixin_29248653的博客 380

LightOJ 1268(Unlucky Strings)

题意:给出 k 个字符,求用这 k 个字符组成的长度为 m 的字符串中不包含子串 s 的方案数。 分析:解决这个问题之前,得知道一些东西 ①首先得知道矩阵可以解决这类经典问题: 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值 把给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j。令C=A*A,那么C(i,j)=ΣA(i,k)...

Joker & Liar的博客 324

Hermes+MemOS记忆系统:用SQLite构建可编辑AI个人认知资产

AI记忆不是简单延长上下文或叠加RAG,而是构建具备分层存储、混合检索与自然语言反馈能力的个人认知资产。其核心原理在于将用户交互痕迹(L1)、偏好策略(L2)、结构化世界模型(L3)和结晶化技能统一管理,实现记忆的可追溯、可修正、可进化。技术价值体现在降低token消耗、提升长程一致性、支持离线演进,并突破传统‘静态快照’式知识库局限。典型应用场景包括个人知识助手、客服工单分析Agent、研发文档理解系统等。本文聚焦Hermes Agent与MemOS深度集成方案,详解SQLite作为ACID底座支撑L1/

weixin_33623304的博客 434

从查表法到实时计算:SimpleFOC库中正弦函数优化的技术演进

本文深入探讨了SimpleFOC库v2.0.1版本中正弦函数优化技术的演进,从传统查表法到实时计算的创新实践。通过定点数优化、对称性利用和分段线性插值等关键技术,实现了在嵌入式电机控制中的高效三角函数计算,显著提升性能和资源利用率。

weixin_28273593的博客 452

LightOJ 1268 Unlucky Strings(KMP+矩阵乘法+基础DP)

题意 给出字符串的长度 \(n\) ,以及该字符串是由哪些小写字母组成,现给出一个坏串 \(S\) ,求存在多少种不同的字符串,使得其子串不含坏串。 \(1 \leq n \leq 10^9\) \(1 \leq |S| \leq 50\) 思路 矩阵快速幂优化 \(\text{dp}\) 是真的常见,在同层状态数不多,但层数很多的时候,要考虑矩阵快速幂优化 \(\text{dp}\) 。 每一层...

weixin_30437847的博客 191

Enterprise Architect 中文经典教程

本文使用到的EA工程文件下载 一、Enterprise Architect简介 Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering)。EA不同于普通的UML画图工具(如VISIO),它将支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发及部署等方面有着强大的支持,...

2万+

LightOj 1268 Unlucky Strings (KMP+矩阵快速幂)

题意:给出一个字符集和一个字符串s,再给出一个长度n,求出所有以字符集中的字母组成的长度为n的不含s的字符串的数量。 思路:用矩阵ans[i][j]表示当前正在匹配第i个字符转移到下一次匹配第j个字符的方案总数,那么最后的答案就是sigma(ans[0][i]),(0 #include #include #include #include #include #include #include

GODSPEED 756

告别“为了写而写”:GJB438C-2021新规下,软件文档如何真正为项目服务?

本文深入解析GJB438C-2021新规如何重构软件文档的实战价值,通过文档体系瘦身、流程再造和敏捷化实践,显著提升军工软件项目的效率。新标准删除30%冗余文档,引入动态编制法和轻量化模板,使文档编制工作量降低37%,关键路径周期缩短15%。

weixin_30765577的博客 448

微信小程序 - 解决web-view嵌套H5网页白屏问题,将h5网页嵌套在webview页面出现无法加载一片空白,详解微信小程序<web-view>页面跳转出现白屏情况(无论本地还是线上H5都能解决)

微信小程序解决web-view打开网页在手机上出现白屏的问题,小程序web-view嵌套H5项目白屏问题分析及解决,使用web-view组件加载H5网页链接后白屏情况,小程序嵌套的h5网页中跳转页面时也有可能出现白屏问题,嵌套webview页面时,出现白屏,WebView 加载不出网页,微信小程序<web-view>页面跳转出现白屏解决方法,解决WebView白屏空白,H5内嵌第三方小程序打开白屏,微信小程序嵌入h5页面加载空白,微信小程序web-view跳转h5白屏,解决微信小程序web-view打开网页

🏆 前端领域优质创作者 1万+

lightoj 1268 Unlucky Strings (矩阵快速幂+kmp DFA 好题)

lightoj 1268 Unlucky Strings (矩阵快速幂+kmp DFA 好题)

Tc的专栏 1733

从泛光成像到可寻址扫描:Flash激光雷达的车规级优势与技术演进

Flash激光雷达凭借固态架构优势成为自动驾驶感知技术的重要发展方向。该方案无机械部件,具备抗振动、长寿命等特点,同时CMOS工艺带来显著成本优势。但传统泛光式存在能量弥散问题,难以兼顾大视场和远距离探测。可寻址扫描技术通过分区点亮VCSEL阵列,有效提升局部能量密度,在保持固态可靠性的同时突破性能瓶颈。这种"电子扫描+分区点亮"的混合架构,使Flash激光雷达有望实现大视场、远距离、高可靠和低成本的多重突破,推动自动驾驶技术发展。

致力于lidar应用开发 235

Light OJ 1268 Unlucky Strings 矩阵快速幂+KMP

题目来源:Light OJ 1268 Unlucky Strings 题意:给你一些可以用的字符 然后求组成不包含给定字符串的方案数 思路:矩阵经典问题 从i走k步路到达j的方案数 可以用矩阵快速幂求解 对于求长度为n的字符的方案数 就是走n步路 求走法 可以用KMP求出走一步 从前i个字符到前j个字符的方案数 这点有点不好理解 想一想 #include #include #

嗯。 1348

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LightOJ - 1268 Unlucky Strings KMP + 矩阵连乘

今天晚上,队友给我推荐的一道题,觉得还是挺不错的。以前矩阵乘法这些东西接触的不多,自己也没碰到多少。这次这道题目虽然在这方面也不算难。 但是感觉至少能将这些简单的熟练掌握了。 题目:给你可选择的字符(最多26个小写字母),配成n(n <= 10^9)长度的字符串,不能包含字符串s (len(s) <= 50)。问你有多少种方案。 如果 n 很小,必然可以 利用KMP 递推过去。不...

weixin_30512785的博客 124

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Unlucky Strings LightOJ - 1268(留)

留

leekerian的博客 210

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LightOJ-1356 Prime Independence

题意: 找出一些数字的最大质独立集,就是集合能的所有数互相之间不会出现 a[i]==t*a[j] (t是质数) 的情况。 思路: 首先想最大独立集对于一般图是NP问题,通常只有求二分图最大独立集,然后就是如何把这些数字分为二分图。 能够想到如果一个数字等于另一个数字乘以一个质数,那么这两个数字的质因子分解应该只有这一个质数的差别。也就是只会多一个质数,数字上限只有500000,完全可以

MyWorld 1521

Lightoj-1356 Prime Independence(质因子分解&&二分图最大独立集)

题目: http://lightoj.com/volume_showproblem.php?problem=1356 题意: 找出一个集合中的最大独立集,任意两数字之间不能是素数倍数的关系。 思路: 最大独立集,必然是二分图。 最大数字50w,考虑对每个数质因子分解,然后枚举所有除去一个质因子后的数是否存在,存在则建边,考虑到能这样建边的数一定是质因子个数奇偶不同,所以相当于按

MyWorld 1482

LightOJ-1370 Bi-shoe and Phi-shoe

题意: 给出一些数字,对于每个数字找到一个欧拉函数值大于等于这个数的数,求找到的所有数的最小和。 思路: 首先关于欧拉函数:http://blog.youkuaiyun.com/kopyh/article/details/48792563 这道题只要欧拉函数打表,对输入排序然后扫一遍就行了。 代码: #define N 1123456 int n,m; int flag,sum,av

MyWorld 1247

HDU5943 Kingdom of Obsession(匹配问题)

题目: acm.split.hdu.edu.cn/showproblem.php?pid=5943 题意: 有n个人,每个人的标号以此是s+1到s+n,要求将所有人重新排序之后满足每个人的位置y能够保证被他的标号整除,就是数组重排之后满足每一位的a[i]%i==0。 思路: 首先很容易想到一定区间之内最多只有一个质数,所以多于一个质数的直接NO,那么这段区间不会很长,考虑直接二分图匹

MyWorld 1213

菜鸟系列——欧几里德与扩展欧几里

菜鸟就要老老实实重新学起: 欧几里德算法: 就是辗转相除法,小学的东西,gcd(a,b)=gcd(b,a%b), 实现简单,用途广泛,, 模版: long long gcd(long long x,long long y) { return y?gcd(y,x%y):x; } 或者用迭代的写法: long long gcd(long long x,long long y

MyWorld 958

菜鸟系列——康托展开

菜鸟就要老老实实重新学起: 康托展开/逆康托展开: 主要就是用来求全排列的次序,可用于取某序列的hash值。 ///康托展开 { int fac[] = {1,1,2,6,24,120,720,5040,40320}; //i的阶乘为fac[i] /* 康托展开.{1...n}的全排列由小到大有序,s[]为第几个数 */ int KT(int n, int s[]) {

MyWorld 952

HDU-4777 Rabbit Kingdom

题目: http://acm.hdu.edu.cn/showproblem.php?pid=4777 题意: 每个兔子有一个数字,数字不互质的兔子会互相打架,现在给出一列兔子,有多组询问,问其中一个区间中的兔子有多少只是不会与其他兔子打架的。 思路: 13年区域赛的水题,,然而对于我来说并不水。 首先分析题意,明显就是求区间中与其他数字均互质的数字的数量。 给出的区间较多,可以考虑离

MyWorld 947

LightOJ 1220 Mysterious Bacteria

题意: x==B^p,对于每个给定的x找到最大的p。 思路: 注意x是所有32位有符号整数,所以用long long存安全,并且有负数。对于每个x可以根据唯一分解定理分为不同素因子ai,B一定是不同素因子ai的乘积,每个B都包含一定数量的每个ai,数量就是所有bi的最大公约数,正好平均把所有素因子分成几分。所以只要求所有素因子数量的gcd就行了,注意500ms所以要姿势正确。 然后就是

MyWorld 794

LightOJ 1282 Leading and Trailing

题意: 求n^k的前三位和后三位。 思路: 后三位很好求,快速幂取模就行了,注意n的大小为int上限,所以要用long long 防溢出。 前三位就要看保留位数,n^k==(10^(log10(n))) ^ k==10^(log10(n)*k),所以(log10(n)*k)的整数部分决定结果的位数,小数部分决定结果的数字。 代码: int n,m; int flag,sum,a

MyWorld 749

菜鸟系列——欧拉函数

菜鸟就要老老实实重新学起: 欧拉函数 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。 欧拉定理 a与p互质,a^x==1(mod p)则x==euler[p]; 模版: //直接求解欧拉函数 long long euler(long long n) { long long res=n,a=n; for(long long i

MyWorld 718
上一篇: HDU-5667 Sequence (矩阵快速幂)
下一篇: Lightoj-1334 Genes in DNA(kmp)
kopyh
博客等级 码龄12年 20粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值