Hdu 5459 Jesus Is Here (2015 ACM/ICPC Asia Regional Shenyang Online) 递推

题目链接:

  Hdu 5459 Jesus Is Here

题目描述:

  s1 = ‘c‘, s2 = ‘ff‘, s3 = s1 + s2; 问sn里面所有的字符c的距离是多少?

解题思路:

  直觉告诉我们,sn肯定由sn-1与sn-2推导出来的。然后呢,我们可以看出 n%2==1 的时候 sn-1 与 sn-2 由 ffff 衔接起来的,n%2==0 的时候,sn-1 与 sn-2由 ff 衔接起来的。告诉队友后,队友就把这个当成重要依据推啊,推啊!!到最后感觉丢队友自己看药丸,放弃02回来和队友一起看,发现这样想脑洞太大,完全错误.......真是真是可怜,这个锅我接!!

  我们先设定len[i], num[i], sum[i], ans[i]分别是:si的长度,si中c的数目,si中c的下标和,si中所有字符c的距离。

  则有:

    len[i]   = len[i-1] + len[i-2];

    num[i] = num[i-1] + num[i-2];

    sum[i] = sum[i-1] + sum[i-2] + len[i-2] * num[i-1];

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

  对于len,num很容易理解,就是斐波那契数列。

  sum[i] = sum[i-1] + sum[i-2] 很容易理解,由于si-1在si-2后面,所以对于每一个si-1里面的c来说下标都加上了len[i-2], 然后很自然的就加上 len[i-2] * num[i-1];

  对于ans[i]来说,ans[i]  = ans[i-1] + ans[i-2] 很容易理解,然后还有 si-1 与 si-2 里面的c的距离没有加上。我们把 si 看成两部分,以衔接处为分割线,前部分的贡献值为:(len[i-2] * num[i-2] - sum[i-2]) * num[i-1] ,对于后半部分的每个c来说,前半部分的贡献是相同的,都是前半部分中的每个c的坐标到分割线的位置。后半部分的贡献值为 num[i-2] * sum[i-1],正好与前半部分相反;

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6 typedef long long LL;
 7 const LL maxn = 201320;
 8 const LL mod = 530600414;
 9 LL ans[maxn], len[maxn], sum[maxn], num[maxn];
10 int main ()
11 {
12     LL t, n;
13     scanf ("%lld", &t);
14     len[1] = sum[1] = num[1] = 1;
15     len[2] = 2;
16     sum[2] = num[2] = 0;
17     for (int i=3; i<maxn; i++)
18     {
19         len[i] = (len[i-1] + len[i-2]) % mod;
20         num[i] = (num[i-1] + num[i-2]) % mod;
21         sum[i] = ((sum[i-1] + sum[i-2]) % mod + num[i-1] * len[i-2] % mod) % mod;
22         ans[i] = ((ans[i-1] + ans[i-2]) % mod + (num[i-2]*len[i-2]-sum[i-2]) % mod*num[i-1] % mod + num[i-2] * sum[i-1] % mod) % mod;
23     }
24     for (LL i=1; i<=t; i++)
25     {
26         scanf ("%lld", &n);
27         printf ("Case #%lld: %lld\n", i, ans[n]);
28     }
29     return 0;
30 }

  

时间: 2024-10-11 12:47:10

Hdu 5459 Jesus Is Here (2015 ACM/ICPC Asia Regional Shenyang Online) 递推的相关文章

【题解】 2015 ACM/ICPC Asia Regional Shenyang Online

[1006] FangFang (暴力枚举) Fang Fang Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 871    Accepted Submission(s): 364 Problem Description Fang Fang says she wants to be remembered. I promise her.

【动态规划】HDU 5492 Find a path (2015 ACM/ICPC Asia Regional Hefei Online)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5492 题目大意: 一个N*M的矩阵,一个人从(1,1)走到(N,M),每次只能向下或向右走.求(N+M-1)ΣN+M-1(Ai-Aavg)2最小.Aavg为平均值. (N,M<=30,矩阵里的元素0<=C<=30) 题目思路: [动态规划] 首先化简式子,得原式=(N+M-1)ΣN+M-1(Ai2)-(ΣN+M-1Ai)2 f[i][j][k]表示走到A[i][j]格子上,此时前i+j-1

(字符串处理)Fang Fang -- hdu -- 5455 (2015 ACM/ICPC Asia Regional Shenyang Online)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=5455 Fang Fang Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 233    Accepted Submission(s): 110 Problem Description Fang Fang says she wants to be

HDU 5444 Elven Postman (2015 ACM/ICPC Asia Regional Changchun Online)

[题目链接]:click here~~ [题目大意]: HDU 5444 题意:在最初为空的二叉树中不断的插入n个数.对于每个数,从根节点开始判断,如果当前节点为空,就插入当前节点,如果当前节点不为空,则小于当前节点的值,插入右子树,否则插入左子树. 接着q次询问,每次询问一个值在二叉树中从根节点开始的查找路径. 3 直接用二叉树模拟整个插入和询问的过程 代码: /* * Problem: HDU No.5444 * Running time: 0MS * Complier: G++ * Aut

Hdu 5451 Best Solver (2015 ACM/ICPC Asia Regional Shenyang Online) 暴力找循环节 + 递推

题目链接: Hdu  5451  Best Solver 题目描述: 对于,给出x和mod,求y向下取整后取余mod的值为多少? 解题思路: x的取值为[1, 232],看到这个指数,我的心情是异常崩溃的.(吐血......) 可是仔细观察,它指数大,可是mod小啊,它吓人,可是可以暴力搞啊!! 这个题目一个难点就是要向下取整求余,详解见传送门,本题是向下取整,也就是向上取整加一. 还有就是指数太大,要找到循环节,其实由于mod小,循环节并没有太大,暴力跑就ok啦!  此刻内心是崩溃的 1 #i

Hdu 5452 Minimum Cut (2015 ACM/ICPC Asia Regional Shenyang Online) dfs + LCA

题目链接: Hdu 5452 Minimum Cut 题目描述: 有一棵生成树,有n个点,给出m-n+1条边,截断一条生成树上的边后,再截断至少多少条边才能使图不连通, 问截断总边数? 解题思路: 因为只能在生成树上截断一条边(u, v),所以只需要统计以v为根节点的子生成树里的节点与子生成树外的节点的边数就可以了.对于新加入的边(u', v')来说,只影响以LCA(u, v)为根节点的子树里面的节点.统计所有答案,扫一遍输出最小即可.(比赛的时候只统计叶子节点,给水过去了........233

HDU 5458 Stability(双连通分量+LCA+并查集+树状数组)(2015 ACM/ICPC Asia Regional Shenyang Online)

题目大意:给一个N个点M条边的无向图,有Q个询问:1.删掉a.b之间所存在的边:2.询问有多少条边,单独删掉之后a与b不再连通. 思路:脑洞大开. 对于询问,首先想到的就是a与b之间有多少桥(割边),然后想到双连通分量,然而删边是个坑爹的问题,于是我们离线倒着来,把删边变成加边. 双连通分量这种东西呢,其实缩点连起来之后,就是一棵树辣. 然后询问两个点的时候,设根到点x的距离为dep[x],a.b的最近公共祖先为lca(a, b),那么询问query(a, b) = dep[a] + dep[b

2015 ACM/ICPC Asia Regional Shenyang Online

1001 Traversal 1002 Best Solver 1003 Minimum Cut 1004 Dividing This Product 1005 Excited Database 1006 Fang Fang 1007 Matches Puzzle Game 1008 Hold Your Hand 1009 Stability 1010 Jesus Is Here 1011 Poker 1012 Largest Point 1013 Manors

(并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )

http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 2061    Accepted Submission(s): 711 Problem Description Jack likes to travel around the wo