HDU-1005-Number Sequence(Java版+考虑周期+恶心水题!)

Number Sequence

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 122527    Accepted Submission(s): 29758

Problem Description

A number sequence is defined as follows:

f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.

Given A, B, and n, you are to calculate the value of f(n).

Input

The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.

Output

For each test case, print the value of f(n) on a single line.

Sample Input

1 1 3
1 2 10
0 0 0

Sample Output

2
5

Author

CHEN, Shunbao

Source

ZJCPC2004

Recommend

JGShining   |   We have carefully selected several similar problems for you:  1008 1021 1019 1003 1009

有时候会怀疑出这种题目的作者是不是脑子有问题?只有20%的通过率,12万多的acmer提交只有3万不到的通过率!

你想题目一定是很难吧,其实不是,题目是很坑!(1 <= A, B <= 1000, 1 <= n <= 100,000,000)

里面n的取值范围是一个亿,如果直接递归来代入的话!肯定堆栈溢出.....(因为我试过!)

最后在网上查了一下思路:因为f(n)的结果是模7的,那么f(n)的结果只可能在{0,1,2,3,4,5,6,}中,这样f(n)与f(n-1)的结果只可能是7*7 = 49种,合理利用周期性,便可以大大提高程序运行时间。

不想说了,这题多说一句话都make me sick!!

感谢金永庆博友的解答!

http://blog.csdn.net/jinyongqing/article/details/21537175

import java.io.*;
import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        int a, b;
        int n;
        while (input.hasNext())
        {
            a = input.nextInt();
            b = input.nextInt();
            n = input.nextInt();
            if (a == 0 & b == 0 & n == 0)
                System.exit(0);
            int f[] = new int[50];
            for (int i = 1; i < 50; i++)
            {
                if (i == 1 || i == 2)
                {
                    f[i] = 1;
                } else
                {
                    f[i] = (a * f[i - 1] + b * f[i - 2]) % 7;
                }
            }
            System.out.println(f[n % 49]);
        }
    }  

}  
时间: 2024-10-14 06:52:32

HDU-1005-Number Sequence(Java版+考虑周期+恶心水题!)的相关文章

HDU 1005 Number Sequence (数学规律)

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 104190    Accepted Submission(s): 25232 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A

HDU 1005 Number Sequence(数论)

HDU 1005 Number Sequence(数论) Problem Description: A number sequence is defined as follows:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. Given A, B, and n, you are to calculate the value of f(n). Input The input consists of multiple

HDU 1005 Number Sequence【多解,暴力打表,鸽巢原理】

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 175657    Accepted Submission(s): 43409 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A

HDU 1005 Number Sequence(数列)

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) [Description] [题目描述] A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. Given A, B, and n, you are to calculate the

HDU 1005 Number Sequence 矩阵快速幂

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 236241    Accepted Submission(s): 60070 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A

HDU 1005 Number Sequence 数学

Problem Description A number sequence is defined as follows:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.Given A, B, and n, you are to calculate the value of f(n). Input The input consists of multiple test cases. Each test case cont

51nod 1126 求递推序列的第N项 &amp;&amp; hdu - 1005 Number Sequence (求周期)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126 http://acm.hdu.edu.cn/showproblem.php?pid=1005 注意上面一题和下面一题的区别,上面A,B可能取负数,但是mod跟c++中%是不一样的,mod只会得到非负数,两次跳进这个坑了. 然后就找周期,只要f[i-1]==1&&f[i]==1就可以跳出,然后i-2就是周期,输出n%(i-2)的时候,要注意如果等于0的话,其实

HDU 1005 Number Sequence (循环节)

首先暴力打表就很容易发现有循环节,于是一开始的写法是直接暴力找循环节,结果一直WA, 原因是有的循环并不是从1,1开始的,详细有证明戳这里:http://acm.hdu.edu.cn/discuss/problem/post/reply.php?postid=19818&messageid=1&deep=0 于是借鉴了大神的思路,因为%7,故可用v[7][7]来记录 f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.这个状态.若出现相同的状态,则证明出现

HDU - 1005 Number Sequence(简单矩阵快速幂)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005 题意:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 就是这道题目,然而找了一晚上的错误 \("▔□▔)/\("▔□▔)/\("▔□▔)/. 1 #include <iostream> 2 #include <cstring> 3 using namespace std;