hdu 5459 Jesus Is Here(厉害的递推)
2015-09-20 01:59
344 查看
题意:字符串s[1]="c",s[2]="ff",s[i]=s[i-2]+s[i-1](i>=3);
对于每个n,求s
中所有的任意两个字符c的距离之和;
参考:http://blog.csdn.net/u012762625/article/details/48580167
思路:比赛时没思路。用dp[i]表示s[i]的结果,dist[i]表示s[i]中所有c到s[i]末尾的距离之和,len[i]表示s[i]的长度,cnt[i]表示s[i]中c的数量;
dp[i]=dp[i-1]+dp[i-2]+cnt[i-1]*dist[i-2]+cnt[i-2]*((len[i-1]*cnt[i-1])-dist[i-1]);
即两边独立的距离与两边相互关联的距离和;
对于每个n,求s
中所有的任意两个字符c的距离之和;
参考:http://blog.csdn.net/u012762625/article/details/48580167
思路:比赛时没思路。用dp[i]表示s[i]的结果,dist[i]表示s[i]中所有c到s[i]末尾的距离之和,len[i]表示s[i]的长度,cnt[i]表示s[i]中c的数量;
dp[i]=dp[i-1]+dp[i-2]+cnt[i-1]*dist[i-2]+cnt[i-2]*((len[i-1]*cnt[i-1])-dist[i-1]);
即两边独立的距离与两边相互关联的距离和;
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define mod 530600414 int t,n,m; long long dp[500010]; long long cnt[500010],len[500010],dist[500010]; void init(){ int i,j,k; cnt[1]=1,cnt[2]=0; len[1]=1,len[2]=2; dist[1]=0,dist[2]=0,dist[3]=dist[4]=2; dp[1]=dp[2]=dp[3]=dp[4]=0,dp[5]=5; for(i=3;i<=300000;i++){ cnt[i]=(cnt[i-1]%mod+cnt[i-2]%mod)%mod; len[i]=(len[i-1]%mod+len[i-2]%mod)%mod; } for(i=5;i<=300000;i++){ dist[i]=(dist[i-1]%mod+dist[i-2]%mod+(cnt[i-2]%mod*len[i-1]%mod)%mod)%mod; } for(i=6;i<=300000;i++){ dp[i]=(dp[i-1]%mod+dp[i-2]%mod+(cnt[i-1]%mod*dist[i-2]%mod)%mod+(cnt[i-2]%mod*(len[i-1]%mod*cnt[i-1]%mod-dist[i-1]%mod)%mod)%mod)%mod; } } int main(){ int i,j,k; init(); scanf("%d",&t); for(k=1;k<=t;k++){ scanf("%d",&n); printf("Case #%d: ",k); printf("%I64d\n",dp ); } return 0; }
相关文章推荐
- 第一篇博客
- css3之3D盒子 以及css3样式兼容判断
- 使用Lift+Maven+Idea搭建web应用
- 一些总结
- shell基础(三):让文本飞一会~
- 修改程序版本工具(ResHacker)使用说明20140902
- ViewPager的更新数据
- 连表查询总结20140903
- 如何使用我们的报表20140911
- NMAKE 详解(整理转载)
- 树莓派dns自动复原的问题
- Unity5打包Assetbundle 出错 `System.IO.File' does not contain a definition for `ReadAllBytes'
- 深度优先算法DFS
- ET之快递测试法学习感悟20140922
- Eclipse 官方汉语包汉化
- 两道有趣的面试题
- hdoj 5461 Largest Point 【枚举所有情况 找最大值】
- android关于用.xml布局文件中对View添加OnClick事件无法响应的事情
- Go reflect
- CSS 神奇的border(二)