题目传送门

题意:简单来说就是sn = sn-1 + sn-2递推而来,求其中所有c字符的:∑i<j:sn[i..i+2]=sn[j..j+2]=‘‘cff"(j−i) mod 530600414

分析:一开始觉得很难下手,类似于斐波那契数列,最后的数字会很大,不能正常求解。想到试试打表找规律,结果并没有找到什么规律。。。最后也没想出什么来。赛后才恍然大悟,这是递推题,拿来别人的思路:

串长度len,串中字符c的个数num,串中所有字符c的位置之和sum,串中所有字符c之间的距离之和ans。

我们可以得到公式

一、node[i].len = node[i-1].len + node[i-2].len;

二、node[i].num = node[i-1].num + node[i-2].num;

三、node[i].sum = node[i-1].sum + node[i-2].sum + node[i-2].len*node[i-1].num。

四、node[i].ans = node[i-1].ans + node[i-2].ans+(node[i-2].len*node[i-2].num-node[i-2].sum)*node[i-1].num+node[i-1].sum*node[i-2].num;

用例子解释一下第三点和第四点:s4 = "ffcff", s5 = "cffffcff", s6 = s4 + s5 = "ffcff" + "cffffcff",第三点:在s5中,c的下标为1,6,在s6中,下标为1+, 6+, 所以能够解释:node[i-2].len*node[i-1].num。第四点:因为[i-2].ans和[i-1].ans已经知道各自串c的位置和以及距离差的和,所以能够解释node[i-1].sum + node[i-2].sum,node[i-1].ans + node[i-2].ans,那么剩下的是怎么得到s5与s4的距离差的和。不考虑字符串内部的部分:[6].ans = ( + 5 - 3) + ( + 5 - 3),红色代表-node[i-2].sum)*node[i-1].num,绿色代表node[i-1].sum*node[i-2].num,剩下的代表(node[i-2].len*node[i-2].num *node[i-1].num。不管怎么样,我是懂了的~

总结:这题目很好,很少接触这样的递推类型。另外,出题人的秀恩爱(表白?)的方式也让本人大开眼界,如果没看过Contest Clarifications,不知能发现多少亮点:)

#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std; typedef long long ll;
const int N = 201314 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 530600414;
struct DP {
ll len, num, sum, ans;
}dp[N]; void solve(void) {
dp[3].len = 3; dp[3].num = 1; dp[3].sum = 1; dp[3].ans = 0;
dp[4].len = 5; dp[4].num = 1; dp[4].sum = 3; dp[4].ans = 0;
for (int i=5; i<=201314; ++i) {
dp[i].len = (dp[i-2].len + dp[i-1].len) % MOD;
dp[i].num = (dp[i-2].num + dp[i-1].num) % MOD;
dp[i].sum = (dp[i-2].sum + dp[i-1].sum + (dp[i-2].len * dp[i-1].num) % MOD) % MOD;
dp[i].ans = (dp[i-2].ans + dp[i-1].ans + ((dp[i-2].len*dp[i-2].num-dp[i-2].sum)%MOD*dp[i-1].num)%MOD + dp[i-2].num * dp[i-1].sum) % MOD;
}
} int main(void) {
solve ();
int T, cas = 0; scanf ("%d", &T);
while (T--) {
int n; scanf ("%d", &n);
printf ("Case #%d: %I64d\n", ++cas, dp[n].ans);
} return 0;
}

其他乱七八糟的,留个念~

id: 0

i:1 len:1 sz:1 ans:0

id:

i:2 len:2 sz:0 ans:0

id: 0

i:3 len:3 sz:1 ans:0

id: 2

i:4 len:5 sz:1 ans:0

id: 0 5
5
i:5 len:8 sz:2 ans:5 id: 2 5 10
35
i:6 len:13 sz:3 ans:16 id: 0 5 10 13 18
5535
i:7 len:21 sz:5 ans:88 id: 2 5 10 13 18 23 26 31
3535535
i:8 len:34 sz:8 ans:352 id: 0 5 10 13 18 23 26 31 34 39 44 47 52
553553535535
i:9 len:55 sz:13 ans:1552 id: 2 5 10 13 18 23 26 31 34 39 44 47 52 57 60 65 68 73 78 81 86
35355353553553535535
i:10 len:89 sz:21 ans:6512 id: 0 5 10 13 18 23 26 31 34 39 44 47 52 57 60 65 68 73 78 81 86 89 94 99 102 10
7 112 115 120 123 128 133 136 141
553553535535535355353553553535535
i:11 len:144 sz:34 ans:27753 i:12 len:233 sz:55 ans:117392 i:13 len:377 sz:89 ans:497728 i:14 len:610 sz:144 ans:2107952 i:15 len:987 sz:233 ans:8930608 i:16 len:1597 sz:377 ans:37829456 i:17 len:2584 sz:610 ans:160251245 i:18 len:4181 sz:987 ans:148231586 i:19 len:6765 sz:1597 ans:222584546 i:20 len:10946 sz:2584 ans:507962972 i:21 len:17711 sz:4181 ans:132054082 i:22 len:28657 sz:6765 ans:505562166 i:23 len:46368 sz:10946 ans:31951635 i:24 len:75025 sz:17711 ans:102724512 i:25 len:121393 sz:28657 ans:442982018
“cff”  

“I've sent Fang Fang around 201314 text messages in almost 5 years. Why can't she make sense of what I mean?”

“Love does not delight in evil but rejoices with the truth.
It always protects, always trusts, always hopes, always perseveres.” “(j−i) mod 530600414,” “113 1205 199312 199401 201314”

  

  

递推DP HDOJ 5459 Jesus Is Here的更多相关文章

  1. 递推DP HDOJ 5328 Problem Killer

    题目传送门 /* 递推DP: 如果a, b, c是等差数列,且b, c, d是等差数列,那么a, b, c, d是等差数列,等比数列同理 判断ai-2, ai-1, ai是否是等差(比)数列,能在O( ...

  2. 递推DP HDOJ 5092 Seam Carving

    题目传送门 /* 题意:从上到下,找最短路径,并输出路径 DP:类似数塔问题,上一行的三个方向更新dp,路径输出是关键 */ #include <cstdio> #include < ...

  3. 递推DP HDOJ 5389 Zero Escape

    题目传送门 /* 题意:把N个数分成两组,一组加起来是A,一组加起来是B,1<=A,B<=9,也可以全分到同一组.其中加是按照他给的规则加,就是一位一位加,超过一位数了再拆分成一位一位加. ...

  4. 递推DP HDOJ 5375 Gray code

    题目传送门 /* 题意:给一个串,只能是0,1,?(0/1).计算格雷码方法:当前值与前一个值异或,若为1,可以累加a[i],问最大累加值 DP:dp[i][0/1]表示当前第i位选择0/1时的最大分 ...

  5. 递推DP URAL 1167 Bicolored Horses

    题目传送门 题意:k个马棚,n条马,黑马1, 白马0,每个马棚unhappy指数:黑马数*白马数,问最小的unhappy值是多少分析:dp[i][j] 表示第i个马棚放j只马的最小unhappy值,状 ...

  6. 递推DP URAL 1017 Staircases

    题目传送门 /* 题意:给n块砖头,问能组成多少个楼梯,楼梯至少两层,且每层至少一块砖头,层与层之间数目不能相等! 递推DP:dp[i][j] 表示总共i块砖头,最后一列的砖头数是j块的方案数 状态转 ...

  7. 递推DP URAL 1260 Nudnik Photographer

    题目传送门 /* 递推DP: dp[i] 表示放i的方案数,最后累加前n-2的数字的方案数 */ #include <cstdio> #include <algorithm> ...

  8. 递推DP URAL 1353 Milliard Vasya's Function

    题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...

  9. 递推DP URAL 1119 Metro

    题目传送门 /* 题意:已知起点(1,1),终点(n,m):从一个点水平或垂直走到相邻的点距离+1,还有k个抄近道的对角线+sqrt (2.0): 递推DP:仿照JayYe,处理的很巧妙,学习:) 好 ...

随机推荐

  1. layer弹出层不居中解决方案,仅显示遮罩,没有弹窗

    问题:项目中layer询问层的弹窗仅显示遮罩层,并不显示弹窗…… 原因:图片太多将layer弹窗挤出屏幕下方,看不见了…… 解决方案:让layer的弹出层居中显示 一.问题描述 用layer做操作结果 ...

  2. 基于PHP函数的alert弹框

    可以设置弹出信息,跳转地址,跳转的时间,跳转的信息标题提示: 手机端加上<meta name='viewport' content='width=device-width, initial-sc ...

  3. JAVA学习第六十五课 — 正則表達式

    正則表達式:主要应用于操作字符串.通过一些特定的符号来体现 举例: QQ号的校验 6~9位.0不得开头.必须是数字 String类中有matches方法 matches(String regex) 告 ...

  4. linux centos7 安装常用软件java,node,mysql,Seafile

    linux centos7 安装常用软件java,node,mysql,Seafile 安装压缩解压缩软件 yum install -y unzip zip 安装git yum install -y ...

  5. 初学unity 3D 遇到的一个问题--预制体选项没有找到。

    没有找到预制体这个选项. 我的工程如下:

  6. C# 自定义控件及引用自动义控件

    1.http://www.cnblogs.com/hjxzjp/p/7823292.html   优先考虑从现有的控件中进行派生,并添加所需要的功能. 在解决方案资源管理器窗口中设置:引用----&g ...

  7. ASHX入门教程

    新建web应用程序 其中添加的ashx包含ashx.CS 普通的web网站只包含ashx 新建webapplication应用 新建SampleHandler public class SampleH ...

  8. [arm驱动]Linux内核开发之阻塞非阻塞IO----轮询操作【转】

    本文转载自:http://7071976.blog.51cto.com/7061976/1392082 <[arm驱动]Linux内核开发之阻塞非阻塞IO----轮询操作>涉及内核驱动函数 ...

  9. Linux时间子系统之四:定时器的引擎:clock_event_device【转】

    本文转载自:http://blog.csdn.net/droidphone/article/details/8017604 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+] ...

  10. 通用异步 Windows Socket TCP 客户端组件的设计与实现

    编写 Windows Socket TCP 客户端其实并不困难,Windows 提供了6种 I/O 通信模型供大家选择.但本座看过很多客户端程序都把 Socket 通信和业务逻辑混在一起,剪不断理还乱 ...