洛谷 P3102 [USACO14FEB]秘密代码Secret Code 解题报告
P3102 [USACO14FEB]秘密代码Secret Code
题目描述
Farmer John has secret message that he wants to hide from his cows; the message is a string of length at least 2 containing only the characters A..Z.
To encrypt his message, FJ applies a sequence of "operations" to it, where an operation applied to a string S first shortens S by removing either some (but not all) of the initial characters or some (but not all) of the final characters from S, after which the original string S is attached either at the beginning or end. For example, a single operation to the string ABC could result in eight possible strings:
AABC ABABC BCABC CABC ABCA ABCAB ABCBC ABCC Given the final encrypted string, please count the number of possible ways FJ could have produced this string using one or more repeated operations applied to some source string. Operations are treated as being distinct even if they give the same encryption of FJ's message. For example, there are four distinct separate ways to obtain AAA from AA.
Print your answer out modulo 2014.
农民约翰收到一条的消息,记该消息为长度至少为2,只由大写字母组成的字符串S,他通过一系列操作对S进行加密。
他的操作为,删除S的前面或者后面的若干个字符(但不删光整个S),并将剩下的部分连接到原字符串S的前面或者后面。如对于S=‘ABC’,共有8总可能的操作结果:
AABC
ABABC
BCABC
CABC
ABCA
ABCAB
ABCBC
ABCC
给出加密后的目标字符串,请计算共有多少种加密的方案。
对于同字符的字符串,加密方案不止一种,比如把AA加密成AAA,共有4种加密方案。将你的答案mod 2014后输出。
输入输出格式
输入格式:
- Line 1: A single encrypted string of length at most 100.
输出格式:
- Line 1: The number of ways FJ could have produced this string with one or more successive operations applied to some initial string of length at least 2, written out modulo 2014. If there are no such ways, output zero.
说明
Here are the different ways FJ could have produced ABABA:
Start with ABA -> AB+ABA
Start with ABA -> ABA+BA
Start with AB -> AB+A -> AB+ABA
Start with AB -> AB+A -> ABA+BA
Start with BA -> A+BA -> AB+ABA
Start with BA -> A+BA -> ABA+BA
Start with ABAB -> ABAB+A
Start with BABA -> A+BABA
不知道为什么最近总感觉\(dp\)题挺难想的。
这题大概写了有一个小时,最开始想了一种0/1判左右的方法,发现不行,遂改成区间\(DP\)。
\(dp[i][j]\)代表长度左区间为\(i\)右区间为\(j\)的串的构造方案(注意这题是可以构造很多次的)
\(dp[i][j]=\sum dp[i][k_1]+\sum dp[k_2][j]\),合法性判断参照题目。
复杂度:\(O(N^4)\),不过先用Floyd预处理合法性可以优化掉一维。
其实不优化也差不了太远,毕竟上限远远达不到。
我交了题目才看到别人写的Floyd优化emmmm
code:
#include <cstdio>
#include <cstring>
const int mod=2014;
const int N=105;
int dp[N][N],n;
char s[N];
int main()
{
scanf("%s",s+1);
n=strlen(s+1);
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
dp[i][j]=1;
dp[1][n]=0;
for(int i=n-1;i;i--)
for(int j=i+1;j<=n;j++)
{
int l=j+1-i,r=l-1>>1;
for(int k=1;k<=r;k++)
{
int flag=1;
int l1=i,l2=i+k;
for(int q=k;q;q--,l1++,l2++)
if(s[l1]!=s[l2])
{
flag=0;
break;
}
if(flag)
dp[i][j]=(dp[i+k][j]+dp[i][j])%mod;
flag=1,l1=i+k-1,l2=j;
for(int q=k;q;q--,l1--,l2--)
if(s[l1]!=s[l2])
{
flag=0;
break;
}
if(flag)
dp[i][j]=(dp[i][j]+dp[i+k][j])%mod;
}
for(int k=1;k<=r;k++)
{
int flag=1;
int r1=j,r2=j-k;
for(int q=k;q;q--,r1--,r2--)
if(s[r1]!=s[r2])
{
flag=0;
break;
}
if(flag)
dp[i][j]=(dp[i][j]+dp[i][j-k])%mod;
flag=1,r1=i,r2=j-k+1;
for(int q=k;q;q--,r1++,r2++)
if(s[r1]!=s[r2])
{
flag=0;
break;
}
if(flag)
dp[i][j]=(dp[i][j]+dp[i][j-k])%mod;
}
}
printf("%d\n",dp[1][n]%mod);
return 0;
}
2018.6.12
洛谷 P3102 [USACO14FEB]秘密代码Secret Code 解题报告的更多相关文章
- 洛谷P3102 [USACO14FEB]秘密代码Secret Code
P3102 [USACO14FEB]秘密代码Secret Code 题目描述 Farmer John has secret message that he wants to hide from his ...
- 洛谷 P3102 [USACO14FEB]秘密代码Secret Code
P3102 [USACO14FEB]秘密代码Secret Code 题目描述 Farmer John has secret message that he wants to hide from his ...
- 洛谷 P3102 [USACO14FEB]秘密代码Secret Code 【区间dp】
农民约翰收到一条的消息,记该消息为长度至少为2,只由大写字母组成的字符串S,他通过一系列操作对S进行加密. 他的操作为,删除S的前面或者后面的若干个字符(但不删光整个S),并将剩下的部分连接到原字符串 ...
- P3102 [USACO14FEB]秘密代码Secret Code
题目描述 Farmer John has secret message that he wants to hide from his cows; the message is a string of ...
- 洛谷P2922 [USACO008DEC] 秘密消息Secret Message [Trie树]
洛谷传送门,BZOJ传送门 秘密消息Secret Message Description 贝茜正在领导奶牛们逃跑.为了联络,奶牛们互相发送秘密信息. 信息是二进制的,共有M(1≤M≤5 ...
- 洛谷p2922[USACO08DEC]秘密消息Secret Message
题目: 题目链接:[USACO08DEC]秘密消息Secret Message 题意: 给定n条01信息和m条01密码,对于每一条密码A,求所有信息中包含它的信息条数和被它包含的信息条数的和. 分析: ...
- 洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur 解题报告
P3119 [USACO15JAN]草鉴定Grass Cownoisseur 题目描述 约翰有\(n\)块草场,编号1到\(n\),这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可 ...
- 【洛谷】CYJian的水题大赛 解题报告
点此进入比赛 \(T1\):八百标兵奔北坡 这应该是一道较水的送分题吧. 理论上来说,正解应该是DP.但是,.前缀和优化暴力就能过. 放上我比赛时打的暴力代码吧(\(hl666\)大佬说这种做法的均摊 ...
- 洛谷 P2922 [USACO08DEC]秘密消息Secret Message
题目描述 Bessie is leading the cows in an attempt to escape! To do this, the cows are sending secret bin ...
随机推荐
- 使用Python遇到:'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte 问题
查看你的HTTP头部是否有如下头部信息:"Accept-Encoding": "gzip, deflate" 这条信息代表本地可以接收压缩格式的数据,而服务器在 ...
- HNOI2019 爆零记
HNOI2019爆零记 day \(-inf\) ~ day \(0\) 开学一周之后才停的课,停课之后就开始每天被包菜.我三月份几乎没有更博,就是因为每天都被虐的自闭了. day \(0\) 本来是 ...
- 正则&highlight高亮实现(干货)
写完正则表达式以后在浏览器上检测实在是不方便,于是就写了一个JS正则小工具,大大地提高了学习效率.学习之余用正则实现了一个highlight高亮demo,欢迎交流. 什么是正则表达式? 简单的说:正则 ...
- 理解Liang-Barsky裁剪算法的算法原理
0.补充知识向量点积:结果等于0, 两向量垂直; 结果大于0, 两向量夹角小于90度; 结果小于0, 两向量夹角大于90度.直线的参数方程:(x1, y1)和(x2, y2)两点确定的直线, 其参数方 ...
- centos下部署redis服务环境及其配置说明
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主 ...
- Redis日常操作命令小结
Redis缓存服务是运维工作中比较常见的一种维护工作,下面就redis日常操作命令在此做一简单小结,以备查用: 1)连接redis服务命令# redis-cli -h redis主机ip或主机域名 - ...
- B. Vova and Trophies
链接 [https://codeforces.com/contest/1082/problem/B] 题意 给你一个包含GS的字符串,只允许交换一次任意不同位置的字符,问最长的连续G串是多少 分析 很 ...
- 作业20171102 beta1 成绩
申诉 对成绩有疑问或不同意见的同学,请在群里[@杨贵福]. 申诉时间截止2017年12月12日 17:00. 成绩 scrum01 scrum02 scrum03 scrum04 scrum05 sc ...
- mooc linux学习总结
通过八周的学习获得了很多知识. 首先,通过网课老师形象生动的讲述和描述一些专业词汇,使我更加深刻的记住并掌握了这些内容:动态的展示堆栈的变化,更容易理解一段汇编代码:分析操作系统的工作,记 ...
- Linux 实验一 基础实践
Linux 实践一 1:软件源的维护方法 删掉DEB打头的 在命令行中输入命令时,可以用命令补全的方法. 下载完成后,使用sudo dpkg-i skype.deb 来完成安装. 2:掌握Linux ...