博客
关于我
【2020.12.02提高组模拟】球员(player)
阅读量:286 次
发布时间:2019-03-03

本文共 1850 字,大约阅读时间需要 6 分钟。

题目

题目描述

老师们已经知道学生喜欢睡觉,Soaring是这项记录保持者。他只会在吃饭或玩FIFA20时才会醒来。因此,他经常做关于足球的梦,在他最近的一次梦中,他发现自己成了皇家马德里足球俱乐部的总经理。

他的工作是挑选N名球员争取在下个赛季打败巴塞罗那队,但是董事会有两个特殊的要求。具体如下:

①所有运动员姓氏的长度必须不同。

②每个运动员的姓氏必须是长度比其长的所有其他运动员姓氏的连续子串

为了让工作变得简单,Soaring将潜在的球员分成N类,第i类的球员的姓氏恰好有i个字母,且每一类恰好有K个球员。

Soaring想知道有多少种不同的方法选出满足要求的N个球员。答案对(109+7)取余。

题解

题目大意:有 n n n种不同长度的字符串,每种字符串有 k k k个,第 i i i中字符串的长度是 i i i,现在要从 n n n种字符串里每种选一个,使得选出的字符串都是所有长度比其长的字符串的连续字串,问有多少种选择方案,对 1 0 9 + 7 10^9+7 109+7取模

22%

暴力从每种里选择,再暴力判断是否合法

时间复杂度 O ( k n n 4 ) O(k^nn^4) O(knn4),预计得分22

100%

首先我们知道,若 a a a b b b的连续字串, b b b c c c的连续子串,那么 a a a一定是 c c c的连续字串

那么判断时就可以只判断 i i i i + 1 i+1 i+1的关系,而 i i i i + 1 i+1 i+1的长度只相差1,说明想要是连续子串,要么是末尾空一个字母,要么开头空一个字母

考虑 d p dp dp,设 f [ i ] [ j ] f[i][j] f[i][j]表示到了第 i i i种,第 i i i种选择第 j j j个的方案数,那么枚举 u u u,若 u u u j j j的子串,那么转移: f [ i ] [ j ] + = f [ i − 1 ] [ u ] f[i][j]+=f[i-1][u] f[i][j]+=f[i1][u]

答案是 ∑ i = 1 k f [ n ] [ i ] \sum_{i=1}^kf[n][i] i=1kf[n][i]

Code

#include
#define ll long long#define mod 1000000007#define N 55#define K 1505using namespace std;int n,m;ll sq,sh,ans,a[N][K][N],f[N][K];char s[N];ll mi(int x){ ll res=1; for (int i=1;i<=x;++i) res=res*26%mod; return res;}int main(){ freopen("player.in","r",stdin); freopen("player.out","w",stdout); scanf("%d%d",&n,&m); for (int i=1;i<=n;++i) { for (int j=1;j<=m;++j) { scanf("%s",s+1); for (int k=1;k<=i;++k) a[i][j][k]=(a[i][j][k-1]*26%mod+s[k]-'a')%mod; } } for (int i=1;i<=m;++i) f[1][i]=1; for (int i=2;i<=n;++i) for (int j=1;j<=m;++j) { sq=a[i][j][i-1];//当前字符串的1~i-1位 sh=(a[i][j][i]-mi(i-1)*a[i][j][1]%mod+mod)%mod;//当前字符串的2~i位 for (int k=1;k<=m;++k) if (a[i-1][k][i-1]==sq||a[i-1][k][i-1]==sh/*判断是否是连续子串*/) f[i][j]=(f[i][j]+f[i-1][k])%mod; } for (int i=1;i<=m;++i) ans=(ans+f[n][i])%mod; printf("%lld\n",ans); fclose(stdin); fclose(stdout); return 0;}

转载地址:http://pgql.baihongyu.com/

你可能感兴趣的文章
Java 設計模式 - 建造者模式
查看>>
ES6 JavaScript 重新認識 Promise
查看>>
2020-07-16:如何获得一个链表的倒数第n个元素?
查看>>
2021-01-21:java中,HashMap的读流程是什么?
查看>>
Imagination官方信息速递2021年光线追踪专刊
查看>>
什么是数据中心,它们是如何变化的?
查看>>
webpack01 -- webpack安装和配置
查看>>
分享九款不同页面404源码html
查看>>
404页圈小猫游戏代码
查看>>
好看清新卡通人物404单页网站源码
查看>>
简洁仿t猫404页html源码
查看>>
Python九齿耙(Ninerake)数据采集大数据深度学习智能分析爬虫软件的正则表达式规则简介
查看>>
Delphi 10.3 Rio的RadioGroup1控件如何设置 Items 的排列为横向横排水平显示
查看>>
Kotlin实现冒泡排序
查看>>
NodeJS下TypeScript环境安装
查看>>
汽车后市场,小程序为何独占鳌头
查看>>
短视频小程序,互联网新风口
查看>>
彻底弄懂Python标准库源码(一)—— os模块
查看>>
Mybatis-plus代码生成器模板(MySQL数据库)
查看>>
使用redis管理Mybatis的二级缓存
查看>>