hdu 1005 -- Number Sequence
来源:互联网 发布:sdcms 域名未授权 编辑:程序博客网 时间:2024/06/05 03:24
Number Sequence
题目页面
思路:
如果暴力模拟,必定超时,因为 1 <= n <= 100,000,000
找规律,并未发现什么可循的规律
进一步观察题目发现:
f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7
-> f(n)的取值范围为 0~6
-> f(n - 1),f(n - 2) 数对的组合只有 49 种
-> 当 n 很大时,一定会有循环计算
用一个 7*7 的数组记录,f(n - 1),f(n - 2) 数对 的出现次序,用以计算循环长度和判断循环起始位置。
C 代码如下:
#include <stdio.h>#include <string.h>int A, B, n, a, b, c, i;int mp[7][7];int main() { while (1) { scanf("%d %d %d", &A, &B, &n); if (A == 0 && B == 0 && n == 0) break; if (n <= 2) { printf("1\n"); } else { memset(mp, 0, sizeof(mp)); a = 1; b = 1; mp[1][1] = 2; for (i = 3; i <= n; i++) { c = (A*b + B*a) % 7; a = b; b = c; if (mp[a][b]) break; mp[a][b] = i; } if (i < n) { n -= i; n %= i - mp[a][b]; for (i = 0; i < n; i++) { c = (A*b + B*a) % 7; a = b; b = c; } } printf("%d\n", c); } } return 0;}
0 0
- HDU 1005 Number Sequence
- hdu 1005 Number Sequence
- HDU 1005 Number Sequence
- hdu 1005 Number Sequence
- HDU 1005 Number Sequence
- HDU 1005 Number Sequence
- HDU 1005 Number Sequence
- HDU--1005--Number Sequence
- hdu 1005 Number Sequence
- HDU 1005 Number Sequence
- HDU 1005 Number Sequence
- HDU 1005 Number Sequence
- hdu - 1005 Number Sequence
- HDU 1005 Number Sequence
- hdu-1005-Number Sequence
- HDU 1005 Number Sequence
- HDU 1005 Number Sequence
- HDU 1005Number Sequence
- 在ubuntu下 eclipse中配置tomcat
- 【自考】信管有什么
- 从面向对象的角度看,仿真该如何把数据保存到文件?
- 第4周SHH数据结构—【项目3-单链表应用(1)】
- noip2014 子矩阵 (动态规划+位运算)
- hdu 1005 -- Number Sequence
- 第4周实践项目1-- 建立单链表
- 第六周——项目一:建立顺序栈算法库
- 第六周项目1-建立顺序栈算法库
- 第6周—项目1 建立顺序栈算法库
- UVA 11178 Morley's Theorem(二维几何基础)
- 第4周实践项目1--建立单链表
- mybatis配置
- 回文树 (tsinsen A1280. 最长双回文串)