zoukankan      html  css  js  c++  java
  • 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])) % 7, 求f[n]   (n最大100,000,000) 思路:f[n]显然都是小于7的,而f[n]又只与f[n-1]和f[n-2]有关,于是想到只有7*7种组合,一定可以找到循环节。 代码:  
    #include 
    #include 
    #include 
    using namespace std;
    
    int main(){
        int vis[7][7];
        int f[100];
        int A,B,n;
        while(cin>>A>>B>>n){
            if (A + B + n == 0){
                break;
            }
            int t1 = 0, t2 = 0;
            memset(vis, 0, sizeof(vis));
            memset(f, 0, sizeof(f));
            int t = 2;
            int p1 = 1, p2 = 1;
            vis[1][1] = 1;
            f[1] = f[2] = 1;
            while(1){
                int p3 = (A * p2 + B * p1) % 7;
                p1 = p2;
                p2 = p3;
                if (!vis[p1][p2]){
                    vis[p1][p2] = t;
                    f[t] = p1;
                    t ++;
                }
                else{
                    t1 = vis[p1][p2];
                    t2 = t;
                    t ++;
                    break;
                }
            }
            if (n < t1){
                cout<
    举杯独醉,饮罢飞雪,茫然又一年岁。 ------AbandonZHANG
  • 相关阅读:
    排序与查找
    gdb
    编码风格
    数组
    结构体
    循环语句
    深入理解函数
    分支语句
    简单函数
    解决国内NPM安装依赖速度慢问题
  • 原文地址:https://www.cnblogs.com/AbandonZHANG/p/4113969.html
Copyright © 2011-2022 走看看