BestCoder Round #75 1003 - King's Order
国王演讲后士气大增,但此时战争还没有结束,国王时不时要下发命令。 由于国王的口吃并没有治愈,所以传令中可能出现:“让第三军-军-军,到前线去” 这样的命令。由于大洋国在军队中安插了间谍 , 战事紧急,很多时候前线的指挥官不能分清哪些命令真正来自国王。但国王的命令有一个特点,他每次连续重复的字符最多 333 次. 所以说他的命令中没有:“让第三军-军-军-军 , 到前线去”,但是可以有 :“让第三军-军 , 到前线去” 。 此时将军找到了你,你需要告诉他,给定命令的长度长度为 n,有多少种不同的命令可以是国王发出的 。(也就是求长度为 n 的合格字符串的个数)当然,国王可能说出一句话没有犯任何口吃,就像他那次演讲一样。 为了简化答案,国王的命令中只含有小写英文字母,且对答案输出模 1000000007。 我们认为两个命令如果完全相同那么这两个字符串逐个比较就完全相同。
第一行一个整数表示测试组数:T(T≤10)T(T \le10)T(T≤10)。 每组数据占一行,每行一个正整数 n(n≤2000) 表示字符串的长度。
共 T 行,每行一个整数表示合法的命令数量。
2
2
4
676
456950
两个中没有不符合要求的,所以答案为 26×26=67626\times 26 = 67626×26=676 四个不符合要求的只有 `aaaa` `bbbb` ... `zzzz`总共 26 个 那么答案就是: 264−26=45695026^4-26 = 456950264−26=456950
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define LL long long
const int mod=;
int t,n;
LL dp[][][],ans;
void fuc(){
for(int i=;i<=;i++)dp[][i][]=;
for(int i=;i<=;i++){
for(int j=;j<=;j++){
for(int k=;k<=;k++) if(j!=k) {
for(int p=;p<=;p++)
dp[i][j][]=(dp[i][j][]+dp[i-][k][p])%mod;
}
dp[i][j][]=dp[i-][j][];
dp[i][j][]=dp[i-][j][];
}
}
}
int main(){
memset(dp,,sizeof(dp));
fuc();
scanf("%d",&t);
while(t--){
scanf("%d",&n);
ans=;
for(int i=;i<=;i++){
for(int j=;j<=;j++)
ans=(ans+dp[n][i][j])%mod;
}
printf("%lld\n",ans);
}
}
d[i][j][k] 表示 第i 位串,以 字母 j 结尾, 最后面连续字母有 k 个 的数量。
d[i][j][2] 显然 由 d[i-1][j][1] 即前一位串以 j 结尾只有一个连续的推得;
同理 d[i][j][3] 由 的d[i-1][j][2] 推得
最后只有一个连续的 d[i][j][1] 显然只能由 其余 不同字母结尾 的串推得 d[i-1][k][1]+d[i-1][k][2]+d[i-1][k][3] k!=j;
然后因为每个字母都是等效的,也就是不同的 j 的存放的数据相同。
那把可以中间的j 拿掉
d[i][k] k=2,k=3 依旧同理
k=1 时即为前一值乘25得,因为是前一位子串其余不同字母结尾 d[i][1]= sum of d[i-1][k]*25 1<=k<=3;
最后统计答案 即 循环 26遍即可
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define LL long long
const int mod=;
int t,n;
LL dp[][],ans;
void fuc(){
dp[][]=;
for(int i=;i<=;i++){
for(int k=;k<=;k++)
for(int p=;p<=;p++)
dp[i][]=(dp[i][]+dp[i-][p])%mod;
dp[i][]=dp[i-][];
dp[i][]=dp[i-][];
}
}
int main(){
memset(dp,,sizeof(dp));
fuc();
scanf("%d",&t);
while(t--){
scanf("%d",&n);
ans=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
ans=(ans+dp[n][j])%mod;
printf("%lld\n",ans);
}
}
BestCoder Round #75 1003 - King's Order的更多相关文章
- BestCoder Round #75 1001 - King's Cake
Problem Description It is the king's birthday before the military parade . The ministers prepared a ...
- BestCoder Round #75 1002 - King's Phone
问题描述 阅兵式上,国王见到了很多新奇东西,包括一台安卓手机.他很快对手机的图形解锁产生了兴趣. 解锁界面是一个 3×33 \times 33×3 的正方形点阵,第一行的三个点标号 1,2,31, 2 ...
- hdu 5643 BestCoder Round #75
King's Game Accepts: 249 Submissions: 671 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6 ...
- hdu 5641 BestCoder Round #75
King's Phone Accepts: 310 Submissions: 2980 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- BestCoder Round #75
前两题不想写了 数位DP 1003 King's Order 考虑i的后缀有j个连续,转移状态很简单,滚动数组优化(其实不用) #include <bits/stdc++.h> const ...
- 从lca到树链剖分 bestcoder round#45 1003
bestcoder round#45 1003 题,给定两个点,要我们求这两个点的树上路径所经过的点的权值是否出现过奇数次.如果是一般人,那么就是用lca求树上路径,然后判断是否出现过奇数次(用异或) ...
- ACM学习历程—BestCoder Round #75
1001:King's Cake(数论) http://acm.hdu.edu.cn/showproblem.php?pid=5640 这题有点辗转相除的意思.基本没有什么坑点. 代码: #inclu ...
- BestCoder Round #75 King's Order dp:数位dp
King's Order Accepts: 381 Submissions: 1361 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 655 ...
- BestCoder Round #75 解题报告
King's Cake [思路] 递推 公式:f(n,m)=f(max(m,n-m),min(m,n-m))+1,n>m [代码] #include<cstdio> #include ...
随机推荐
- find()与children()方法的区别
来源:http://www.jb51.net/article/26195.htm 总经一下前段时间用于的jQuery方法:find及children.需要的朋友可以参考下. 首先看看英文解释吧: ch ...
- js 倒计时 已过去时间
页面中的代码: <strong id="timer" datatime="2012-12-09 10:20:30"></strong> ...
- Mongoose的模糊查询
var Commidity = require("./Model/commiditiesModel"); function search(response,request,key) ...
- Win7如何添加局域网内的网络打印机
win+R或开始找到运行,在运行框中输入打印机所在的局域网内的IP地址. 这时会打开一个界面.如图 右键要选择的打印机.连接.这时会显示正在安装打印机驱动.如图 开始菜单->设备和打印机 找到刚 ...
- java的clone
做项目时有时可能会遇到需要克隆对象的时候,因为有时候对象是直接从别的类get到的,那样引用的是一个对象,修改的话会将原先的对象也修改了. java的浅克隆,十分简单.但是只会克隆基本的数据类型,当涉及 ...
- Windows 下 Apache HTTP Server 安装、配置以及与 Tomcat 的整合(附图)
如果您能点开这篇文章,说明您已对熟悉Apache HTTP Server(下文用Apache简称)配置的重要性已很清楚了,本文不在赘述,直接介入正题,请往下阅读: 为便于阅读,列出文章目录: 一.Ap ...
- mac git 命令提示
直接进入正题: $ brew list 查看你是否已经安装了"bash-completion",如果没有,继续往下看: $ brew install bash-completion ...
- python 序列类型
1.不可变的序列类型:tuple.range.str.set 001:对于tuple 类型有如下几种构造方式 1.() 构造一个空的元组. 2.a | (a,) 构造一个只有一个元素的元组. 3.tu ...
- 使用LINQ来简化编程的7个技巧
转载地址:http://www.cnblogs.com/lovecherry/archive/2008/05/23/1205565.html 自从学习LINQ以来,我发现了很多使用LINQ来改善代码的 ...
- 将一段含有0的字符数组赋给string
string有个成员函数,assign() 可以这样: string str; str.assign(temp, sizeof(temp));