操作集锦【牛客网】 牛客练习赛60

题目传送

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

题目描述

有一款自走棋有26种操作,每种操作我们都用a,b,c,d,…,x,y,z的符号来代替.
现在牛牛有一个长度为nnn的操作序列,他现在可以从里面拿出某些操作来组合成一个操作视频,
比如说操作序列是abcdabcdabcd,那么操作视频就有a,b,c,d,ab,ac,ad等(也就是操作序列的子序列).他现在想知道长度为k且本质不同的操作视频有多少种.
比如对于abab,长度为2且本质不同的结果有ab,aa,ba,bb 考虑到答案可能非常大,你只需要输出在模1e9+7意义下的答案就可以了.

输入描述:

第一行两个整数n,k 第二行一个长度为n的字符串,保证只存在小写字母.

输出描述:

一行一个整数表示长度为k且本质不同的操作视频的个数.

示例1
输入

3 1
abc

输出

3

备注:

1≤n≤1e3
0≤k≤n
题意
给你一个长度为n的字符串,问有多有长度为k的子字符串,且不重复。
题解:
这种求子字符串数量题一般都用dp来做
dp[i][j]表示q前i个字符串中,长度为j的子字符串的数量
但是这个题是存在重复情况的,我们还要进行去重
这咋整?我们将dp从二维增加到三维,dp[i][j][k]新填一个k,k表示以什么字母结尾,(因为我们可以将a~z转换成数字,a对应0,b对应1,一次类推),在dp添加时我们if判断,如果当前结尾不是我们指定的字母,就不添加当前这位;如果是的话,就在前面的基础在最后一位填上这个字母。
不明白?很正常(笑哭),我也快把自己讲晕了
这个k就相当于是针对性的,dp[i][j][k]就是前i个字符串中选j个以k为结尾的字符数量
举例大法:n=4 m=2
abab
在这里插入图片描述
你会发现链接对于abab,长度为2且本质不同的结果有ab,aa,ba,bb,虽然abab的子字符串中ab出现两次,但是只统计了一次,因为在算以b(最后这个b)为结尾的时候,前面两个a算作一个a处理
代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1004;
int dp[maxn][maxn][30];
char a[maxn];
const int mod=1e9+7;
long long sum=0;
int main()
{int n,m;cin>>n>>m;char ch=getchar();cin>>a;if(m==0){cout<<1;return 0;}for(int i=1;i<=n;i++){dp[i][1][a[i-1]-'a']=1;for(int j=1;j<=m;j++){for(int w=0;w<=25;w++){if(a[i-1]-'a'==w){for(int k=0;k<=25;k++){dp[i][j][w]=(dp[i][j][w]+dp[i-1][j-1][k])%mod;}}else dp[i][j][w]=(dp[i][j][w]+dp[i-1][j][w])%mod;}}}for(int i=0;i<=25;i++)sum=(sum+dp[n][m][i])%mod;cout<<sum;
}

**注意注意:**不要忘了MOD
据说还能优化,等学会了再更新

啦啦啦我又回来了

上面这个解法复杂度是O(26n2)
我们这次把26给省掉变成O(n2
设两个数组
g[i]:在前i个字符长度为j的本质不同的子序列个数
f[i][j]:前i个字符长度为j的本质不同的子序列个数
f[i][j]=f[i-1][j-1]+f[i-1][j]
f[i-1][j-1]就是不选择s[i]
f[i-1][j]就是选择s[i]
选择的s[i]加上后有可能会重复,就需要我们先判断当前的s[i]是否用过,然后把重复的部分去掉
f [ i ] [ j ] =f[ i ] [ j ]-f[ g [ s [ i ] ] - 1 ] [ j - 1 ]
还有在加的过程中注意不断的mod

#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int mod=1e9+7;char s[100005];
LL  f[1005][1005], g[30]={0};
int main() {int n, k;scanf("%d%d", &n, &k);scanf("%s", s+1);for(int i=1; i<=n; i++){f[i-1][0]=1;for(int j=1; j<=i; j++){f[i][j]=(f[i-1][j]+f[i-1][j-1])%mod;if(g[s[i]]){f[i][j]-=f[g[s[i]]-1][j-1];}f[i][j]=(f[i][j]+mod)%mod;}g[s[i]]=i;}f[n][0]=1;cout<<f[n][k]%mod<<endl;return 0;
}

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

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

相关文章

解决C# 7.2中的结构体性能问题

在某些使用了readonly关键字的情况下&#xff0c;C#编译器会创建出结构体的防御副本。虽然这个问题已经众所周知并被记录下来了&#xff0c;但仍然值得重新审视&#xff0c;因为它与C# 7.2的几个特性有关。in和ref readonly关键字的使用让这个问题出现得更频繁&#xff0c;而re…

使用ML.NET实现基于RFM模型的客户价值分析

RFM模型在众多的客户价值分析模型中&#xff0c;RFM模型是被广泛应用的&#xff0c;尤其在零售和企业服务领域堪称经典的分类手段。它的核心定义从基本的交易数据中来&#xff0c;借助恰当的聚类算法&#xff0c;反映出对客户较为直观的分类指示&#xff0c;对于没有数据分析和…

Reordering the Cows

牛客网传送 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format:%lld 链接&#xff1a;https://ac.nowcoder.com/acm/contest/4860/B 来源&#xff1a;牛客网 题目描述 Farmer John’s N cows (…

回顾4180天在腾讯使用C#的历程,开启新的征途

今天是2018年8月8日&#xff0c;已经和腾讯解除劳动关系&#xff0c;我的公司正式开始运营&#xff0c;虽然还有很多事情需要理清&#xff0c;公司官网也没有做&#xff0c;接下来什么事情都需要自己去完成了&#xff0c;需要一步一个脚印去完善&#xff0c;开启一个新的征途。…

稳定工作和创业之间的抉择

早上写的文章《回顾4180天在腾讯使用C#的历程&#xff0c;开启新的征途》是我在腾讯写的最后一篇对过往10年在腾讯使用C#语言的总结&#xff0c;今天收到反馈有人在造谣腾讯开始去.net&#xff0c;我被迫辞职了。这非常的不负责任&#xff0c;我必须写这篇文章来辟谣。要说腾讯…

牛客2020年愚人节比赛

欢乐的一晚上 题目链接 其实做做也挺好&#xff0c;脑筋急转弯&#xff0c;不需要算法不需要数据结构&#xff0c;纯娱乐 还有不知道是哪位哥的&#xff0c;心疼一下 题解 注&#xff1a;一下题解没必要较劲&#xff0c;欢乐局而已 对不对无所谓&#xff0c;换了最重要奥 A题ra…

IdentityServer4 知多少

1. 引言现在的应用开发层出不穷&#xff0c;基于浏览器的网页应用&#xff0c;基于微信的公众号、小程序&#xff0c;基于IOS、Android的App&#xff0c;基于Windows系统的桌面应用和UWP应用等等&#xff0c;这么多种类的应用&#xff0c;就给应用的开发带来的挑战&#xff0c;…

牛客网【每日一题】4月2日 月月查华华的手机

牛客网链接 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 月月和华华一起去吃饭了。期间华华有事出去了一会儿&#xff0c;没有带手机。月月出于人类最单纯的好奇心&#…

【二分】Best Cow Fences(poj 2018)

Best Cow Fences poj 2018 题目大意&#xff1a; 给出一个正整数数列&#xff0c;要你求平均数最大&#xff0c;长度不小于M的字串&#xff0c;结果乘1000取整 输入样例 10 6 6 4 2 10 3 8 5 9 4 1输出样例 6500数据范围 1⩽N⩽100,0001\leqslant N \leqslant 100,0001⩽…

离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习

离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习 说在前边 最近复习\(DSP\)的时候&#xff0c;发现了一个号称专门针对离散实序列的变换&#xff0c;经分析总运算量为普通\(FFT\)的几乎一半&#xff0c;而且完全没有复数。这么强的吗&#xff1f;于是花了一个下午&#xff0c;去…

.NET Core 2.1中的分层编译(预览)

如果您是.NET性能的粉丝&#xff0c;最近有很多好消息&#xff0c;例如.NET Core 2.1中的性能改进和宣布.NET Core 2.1&#xff0c;但我们还有更多的好消息。分层编译是一项重要的新特性功能&#xff0c;我们可以作为预览供任何人试用&#xff0c;从.NET Core 2.1开始。在我们测…

选择IT事业,意味着终身学习

八月&#xff0c;炎阳如火。 前几天书记找我交流&#xff0c;问我离职的原因&#xff0c;我跟他仔细的分析了一下我的职业发展规划和我对于未来的预期&#xff0c;书记也向我分析了一下他所认为的原因&#xff0c;他说&#xff0c;无外乎是三个原因&#xff1a;第一个是钱的问…

牛客网【每日一题】Shortest Path 4月3日题目精讲 DFS

题号 NC13886 Shortest Path 西南交通大学第十三届ACM决赛 题意&#xff1a; 一棵偶数节点的树&#xff0c;分成n/2对&#xff0c;两两一组&#xff0c;所有组的路径之和最小是多少&#xff1f; 题解&#xff1a; 如果两个点之间相连将另外两个相连的点覆盖&#xff0c;那么完全…

使用Jexus服务器运行Asp.Net Core2.0程序

前段时间写了篇关于.net core跨平台部署的文章。https://my.oschina.net/lichaoqiang/blog/1861977主要讲述了&#xff0c;利用NginxCentOSSupervisor.NetCore2.1&#xff0c;来运行.net core程序&#xff0c;感兴趣的朋友可以看一下。今天向大家介绍.net core使用jexus服务器的…

【结论】棋盘(jzoj 2297)

棋盘 jzoj 2297 题目大意&#xff1a; 在棋盘上有一个特殊的象&#xff0c;他可以向四个方向行走若干步&#xff08;左上&#xff0c;左下&#xff0c;右上&#xff0c;右下&#xff09;&#xff0c;现在问从某一个点是否能到另外一个点 输入样例 5 1 1 2 2 2 3 2 2 1 2 4…

RRRR_wys' Blog 3.0 准备上线啦!

RRRR_wys Blog 3.0 准备上线啦&#xff01; 今年马上要过完啦&#xff0c;打算在年前把博客翻翻新之前的布局太复杂了&#xff0c;感觉很视觉疲劳&#xff0c;这一版我打算能删就删完善了\(markdown\)还有一些地方要修&#xff0c;放假再说辣在vj上交了道cf&#xff0c;有惊喜 …

WebApiClient的JsonPatch局部更新

1. 文章目的随着WebApiClient的不断完善&#xff0c;越来越多开发者选择WebApiClient替换原生的HttpClient&#xff0c;本文将介绍使用WebApiClient来完成JsonPatch提交的新特性。2. json patch介绍在服务端WebApi开发的时候&#xff0c;如果设计一个更新登录用户的个人信息的接…

【bfs】神殿(jzoj 2296)

神殿 jzoj 2296 题目大意&#xff1a; 用一个n∗mn*mn∗m的矩阵&#xff0c;每个单位都是一个1∗11*11∗1的房间&#xff0c;房间的四个方向只有某些方向有门&#xff08;说明如下图&#xff09;&#xff0c;要从一个房间走向相邻的房间&#xff08;算一个单位时间&#xff…

如何在本地数据中心安装Service Fabric for Windows集群

概述首先本文只是对官方文档&#xff08;中文&#xff0c;英文&#xff09;的一个提炼&#xff0c;详细的安装说明还请仔细阅读官方文档。虽然Service Fabric的官方名称往往被加上Azure&#xff0c;但是实际上&#xff08;估计很多人不知道&#xff09;Service Fabric可以安装到…

Asp.Net Core实战

序言使用.NET Core&#xff0c;团队可以更容易专注的在.net core上工作。比如核心类库&#xff08;如System.Collections&#xff09;的更改仍然需要与.NET Framework相同的活力&#xff0c;但是ASP.NET Core或Entity Framework Core可以更轻松地进行实质性更改&#xff0c;而不…