【HDOJ】2065 “红色病毒”问题

【HDOJ】2065 “红色病毒”问题

刚开始看这道题目的时候,完全没看出来是递推。看了网上大牛的分析。立刻就明白了。
其实无论字符串长度为多少,都可以将该长度下的组合分成四种情况S1(A偶数C偶数)、S2(A偶数C奇数)、S3(A奇数C偶数)、S4(A奇数C奇数)。因此,可以由n-1长度情况下的各种情况数目推导出n长度下的数目。
fn(S1) = 2*fn-1(S1) + fn-1(S2) + fn-1(S3),同理可推导其它状态的数目
fn(S2) = 2*fn-1(S2) + fn-1(S1) + fn-1(S4)
fn(S3) = 2*fn-1(S3) + fn-1(S1) + fn-1(S4)
fn(S4) = 2*fn-1(S4) + fn-1(S2) + fn-1(S3)
由以上公式可以推导出 fn(S1) + fn(S4) = fn(S2) + fn(S3) = 4^n / 2 = 2*4^(n-1)
又因为f0(S1) = 2, f0(S2) = 1, f0(S3) = 1, f0(S4) = 0
f0(S2) = f0(S3),并且两式的推导公式相同,因此有fn(S2) = fn(S3) = 4^(n-1) = 2^(2n-2)
将其代入S1的推导式,并且递推可得fn(S1) = 2^(n-1) + 2^(2n-2)
下面就是推导规律,发现2的幂%100的周期为1,2,4,8,16,32,64,28,56,12,24,48,96,92,84,68,36,72,44,88,76,52,
然后注意讨论长度为1、2的情况,可求解。

 1 #include <stdio.h>
 2 
 3 #define PAT2NUM 20
 4 #define PAT4NUM 10
 5 
 6 int pattern[] = {
   1,2,4,8,16,32,64,28,56,12,24,48,96,92,84,68,36,72,44,88,76,52};
 7 
 8 void find(int base) {
 9     int i, j, flg, n;
10 
11     pattern[0] = 1;
12     printf("1 ");
13     n = 1;
14     for (i=1; i<50; ++i) {
15         pattern[i] = pattern[i-1]*base%100;
16         flg = 0;
17         for (j=0; j<i; ++j)
18             if (pattern[i] == pattern[j]) {
19                 flg = 1;
20                 break;
21             }
22         if (flg)
23             break;
24         ++n;
25         printf("%d ", pattern[i]);
26     }
27 }
28 
29 int main() {
30     int case_n;
31     __int64 n;
32     int i, a, b;
33 
34     while (scanf("%d", &case_n)!=EOF && case_n) {
35         for (i=1; i<=case_n; ++i) {
36             scanf("%I64d", &n);
37             printf("Case %d: ", i);
38             if (n == 1) {
39                 printf("2\n");
40                 continue;
41             }
42             if (n == 2) {
43                 printf("6\n");
44                 continue;
45             }
46             a = pattern[(n-1-2)%PAT2NUM+2];
47             b = pattern[(2*n-2-2)%PAT2NUM+2];
48             printf("%d\n", (a+b)%100);
49         }
50         printf("\n");
51     }
52 
53     return 0;
54 }

 

转载于:https://www.cnblogs.com/bombe1013/p/3651062.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109857.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SPPnet详解

    SPPnet详解RCNN系列:RCNN,SPPNet,FastRCNN,FasterRCNN,R-FCN。作者是何凯明SPPNet出现的原因之前的网络,比如LeNet,AlexNet,ZF,VGG等,它们的输入都是固定大小的,为什么要固定大小呐?原因就在最后连接的全连接层上。全连接层的输入一定是固定大小的。这一点很容易理解,因为全连接层网络就是传统的神经网络,传统的神经网络的输入层必定是固定大小的。而卷积神经网络的conv层的输入并不需要固定大小,那么conv层不用固定大小,FC层的输入又要固定大小,那么在这两

    2022年6月8日
  • 6.25科技新闻4

    6.25科技新闻4Lytro光场相机体验评测Lytro光场相机是一款可以先拍照,后对焦的相机。当时一出现就引起挺大的反响的,现在就随小编一起来体验一下这款光场相机吧! 关于光场相机的外观,小编不再累述了。各位可以到之前的《先拍后对焦LYTRO光场相机图赏》里面观看完整外观图。 首先我们来看看官方介绍:小编大概把图中的意思翻译了一下,翻译都在图上,看

    2022年6月5日
  • SecureCRTPortable链接ip(虚拟机)(图文详解)

    SecureCRTPortable链接ip(虚拟机)(图文详解)【确定虚拟机ip地址】可参考:https://blog.csdn.net/weixin_44727274/article/details/107265723SecureCRTPortable是个绿色文件,下载安装包,解压即可使用。虚拟机开启下,双击打开,建立快速连接:设置完成后,点击【链接】输入密码后,…

    2022年5月26日
  • Oracle数据库运维方案及优化

    Oracle数据库运维方案及优化Oracle数据库优化运维优化文章目录Oracle数据库优化前言:Oracle数据库性能优化一为啥要运维,运维哪些内容?二检查数据库基本状况2.1检查Oracle实例状态2.2检查Oracle服务进程2.3检查Oracle监听状态三检查系统和oracle日志文件四检查Oracle对象状态前言:在上一篇文章中我们讲了关于Oracle数据库的性能方面的优化,这篇文章咱们讲讲关于运维方面的优化吧。上一篇文章的地址:Oracle数据库性能优化一为啥要运维,运维哪些内容?数据库的运维主

    2022年10月22日
  • 在浏览器中打开php文件时,是Linux中的哪个用户执行的?

    在浏览器中打开php文件时,是Linux中的哪个用户执行的?

    2021年10月27日
  • sql模糊查询like并使用concat拼接

    sql模糊查询like并使用concat拼接模糊查询insure_company,左起0104开头,右边模糊匹配。(like搭配%表示模糊匹配,concat拼接),claim_date同。放入mapper.xml文件中时,只需用#{参数名}代替sql查询中的具体数据即可。

    2022年4月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号