题目链接:

  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],正好与前半部分相反;

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const LL maxn = ;
const LL mod = ;
LL ans[maxn], len[maxn], sum[maxn], num[maxn];
int main ()
{
LL t, n;
scanf ("%lld", &t);
len[] = sum[] = num[] = ;
len[] = ;
sum[] = num[] = ;
for (int i=; i<maxn; i++)
{
len[i] = (len[i-] + len[i-]) % mod;
num[i] = (num[i-] + num[i-]) % mod;
sum[i] = ((sum[i-] + sum[i-]) % mod + num[i-] * len[i-] % mod) % mod;
ans[i] = ((ans[i-] + ans[i-]) % mod + (num[i-]*len[i-]-sum[i-]) % mod*num[i-] % mod + num[i-] * sum[i-] % mod) % mod;
}
for (LL i=; i<=t; i++)
{
scanf ("%lld", &n);
printf ("Case #%lld: %lld\n", i, ans[n]);
}
return ;
}

  

最新文章

  1. R in a nutshell(连载)
  2. javascript仿天猫加入购物车动画效果
  3. mysql 理解 int(11)
  4. 调用wcf 得不到HttpWebResponse.ContentLength的长度
  5. 【JS】defer / async
  6. Objective-C通过联合存储为类增加属性及原理解析
  7. Spring配置多个数据源
  8. UESTC_小panpan学图论 2015 UESTC Training for Graph Theory&lt;Problem J&gt;
  9. CodeIgniter 应用开发笔记 - 3
  10. 2015 ACM/ICPC Asia Regional Hefei Online
  11. CentOS7搭建Confluence Wiki
  12. python学习日记:day11----装饰器进阶
  13. Spring中@Transactional用法
  14. 3dmax 3dmax计算机要求 3dmax下载
  15. js模块化规范—commonjs
  16. js的执行环境学习笔记
  17. 每天一个linux命令:vmstat
  18. Docker概念(二)
  19. win10安装PS和AI后报代码为16的错误解决方法
  20. SharePoint自定义程序页面部署 不用重启IIS

热门文章

  1. 面向对象五大原则_1.单一职责原则&amp;amp;2.里氏替换原则
  2. angularjs开发常见问题-2(angularjs内置过滤器)
  3. Android开发之开机自动启动应用
  4. Mac开发必备工具(二)—— iTerm 2
  5. 「翻译」Unity中的AssetBundle详解(一)
  6. scrollView 代理方法的实现顺序的些许区别
  7. redis02---对于key的操作命令
  8. maven统一配置
  9. Hadoop MapReduce输入输出类型
  10. vue 使用html2canvas将DOM转化为图片