http://acm.hdu.edu.cn/showproblem.php?pid=1005

1.一开始就注意到了n的数据范围 <=100 000 000,但是还是用普通的循环做的,自然TLE了,然后朴素打表,= =运行不了,(怎么可能能把数组开到那么大)。再然后就想到了寻找下一个1 1 连续在一起的,那就能开始下一轮循环了。

但是,各种WA……(将数组开大一点,寻找到a[ i ] = a[ i -1 ] ==1 即跳出),这个AC代码将102改成100,150,200都可以,但是108,49 ,204什么的就不行。

其实也可能数组并不是从11开始循环的,而是后面出现了两组相邻相同的非1 1数,循环则从最先出现两组相邻对等的数开始循环。如1 1 …………X X…………X X…………然后循环就从XX开始循环,不关1 1什么事儿了,但是下面这个代码却能AC而且数组的长度(maxn)有一定限制,有些能有些不能(???)。

#include <cstdio>
#include <iostream>
#define maxn 102 using namespace std; int num[maxn];
int main()
{
int a,b,n,i=;
num[]=; num[]=; num[]=;
while(~scanf("%d%d%d",&a,&b,&n),a||b||n)
{
i=;
for(i=;i<maxn;i++)
{
num[i]=(a*num[i-]+b*num[i-])%;
if(num[i]==&&num[i-]==)
break;
}
num[]=num[i-];
n%=i-;
cout << num[n] << endl;
}
return ;
}

然后就看有说fn =fn-1 + fn-2 再对7取模,其中的f 项都是0 - 6 之间的数,所以 两数相加之和再取模,最多有7*7种可能后必定会fn-1 与 fn-2 的值的情况与前面的有重复,所以循环节为49 ,这感觉是最容易接受也最为合理的一种解释。

然后就有了如下AC代码,其中maxn为48,49均可(???)。

#include <cstdio>
#include <iostream>
#define maxn 48 using namespace std; int num[maxn];
int main()
{
int a,b,n,i=;
num[]=; num[]=; num[]=;
while(~scanf("%d%d%d",&a,&b,&n),a||b||n)
{
i=;
for(i=;i<=maxn;i++)
{
num[i]=(a*num[i-]+b*num[i-])%;
/*if(num[i]==1&&num[i-1]==1)
{
//cout << i << endl;
break;
}*/
}
num[]=num[maxn];
cout << num[n%maxn] << endl;
}
return ;
}

再然后就是矩阵快速幂了,占坑,(回来学= =)。

最后贴个暴力代码(网上搜的,这个厉害了= =),一个个试,找到他们不同的A,B下他们的周期的最小公倍数为1008。

#include<iostream>   

using namespace std;   

int main()   

{   

    int a,b,n,i;   

    while(scanf("%d%d%d",&a,&b,&n)&&a&&b&&n)   

    {   

        int f[];   

        f[]=;   

        f[]=;   

        for(i=;i<=;i++)   

        {   

            f[i]=(a*f[i-]+b*f[i-])%;   

        }   

        printf("%d\n",f[(n-)%+]);   

    }   

    return ;   

}  

以上为做了耗了我几个小时的hdu1005(不知道值不值= =)。

未解之谜……待续。

HDU1005 找规律 or 循环点 or 矩阵快速幂的更多相关文章

  1. poj 3734 矩阵快速幂+YY

    题目原意:N个方块排成一列,每个方块可涂成红.蓝.绿.黄.问红方块和绿方块都是偶数的方案的个数. sol:找规律列递推式+矩阵快速幂 设已经染完了i个方块将要染第i+1个方块. a[i]=1-i方块中 ...

  2. 【BZOJ2432】【NOI2011】兔农(数论,矩阵快速幂)

    [BZOJ2432][NOI2011]兔农(数论,矩阵快速幂) 题面 BZOJ 题解 这题\(75\)分就是送的,我什么都不想写. 先手玩一下,发现每次每次出现\(mod\ K=1\)的数之后 把它减 ...

  3. hiho1560 - 矩阵快速幂

    题目链接 坑死了,以为是K进制数,每一位可以是0-K之间的,其实是十进制,每一位最高为9,一直wa在这....... ----------------------------------------- ...

  4. HDU 1005 Number Sequence【斐波那契数列/循环节找规律/矩阵快速幂/求(A * f(n - 1) + B * f(n - 2)) mod 7】

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  5. hdu 1005 Number Sequence(矩阵快速幂,找规律,模版更通用)

    题目 第一次做是看了大牛的找规律结果,如下: //显然我看了答案,循环节点是48,但是为什么是48,据说是高手打表出来的 #include<stdio.h> int main() { ], ...

  6. 2017ACM暑期多校联合训练 - Team 2 1006 HDU 6050 Funny Function (找规律 矩阵快速幂)

    题目链接 Problem Description Function Fx,ysatisfies: For given integers N and M,calculate Fm,1 modulo 1e ...

  7. hdu 2604 Queuing dp找规律 然后矩阵快速幂。坑!!

    http://acm.hdu.edu.cn/showproblem.php?pid=2604 这题居然O(9 * L)的dp过不了,TLE,  更重要的是找出规律后,O(n)递推也过不了,TLE,一定 ...

  8. Nowcoder 练习赛 17 C 操作数 ( k次前缀和、矩阵快速幂打表找规律、组合数 )

    题目链接 题意 :  给定长度为n的数组a,定义一次操作为: 1. 算出长度为n的数组s,使得si= (a[1] + a[2] + ... + a[i]) mod 1,000,000,007: 2. ...

  9. (hdu 6030) Happy Necklace 找规律+矩阵快速幂

    题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6030 Problem Description Little Q wants to buy a nec ...

随机推荐

  1. 自己实现一个each迭代器

    什么是迭代器? 其实就是对一个对象内部进行遍历的方法,比如jquery的each方法,或者原生js的foreach方法. 迭代器的特点 针对迭代器,这里有几个特点: ☑ 访问一个聚合对象的内容而无需暴 ...

  2. JavaScript变量声明与提升

    一直以来对变量提升都是比较模糊的,今天特地看了一下这个知识点,总结一下. 1.举个最简单的例子来说一下什么是变量提升吧. function foo(){ console.log(x); // unde ...

  3. C#面试常见题目

    1.CTS.CLS.CLR分别作何解释 CTS:Common Type System 通用系统类型.Int32.Int16→int.String→string.Boolean→bool CLS:Com ...

  4. C语言mktime()

    最近在调试stm32L151单片机,因为业务需要将从RTC获取的时间转换成时间戳.转换的时候发现获取的时间一直不对.一直被两个问题困扰. 1.从RTC获取出来的月份为什么比实际月份小1? 2.转换得来 ...

  5. 如何查看dede版本信息

    dedecms版本信息 更新日期 it 分类: dedecms 打开 /include/common.inc.php 查找 $cfg_version 可以看到版本号 /打开 data/admin/ve ...

  6. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  7. Java中泛型数组创建总结

    在java中,可以声明一个泛型数组,不能通过直接通过T[] tarr=new T[10]的方式来创建数组,最简单的方式便是通过Array.newInstance(Classtype,int size) ...

  8. 黑窗口输入确定数字弹MessageBox(VirtualProtect())

    今天有人说到这个就想的弹一下,刚开始弄了一下,发现内存访问有问题想到可能与读写保护有关,所以用了VirtualProtect函数,得到了正确结果 网上这个小东西我自己没发现,就贴一下.. void m ...

  9. tone() 和 IRremote 冲突的解决办法

    tone()函数冲突 http://www.geek-workshop.com/thread-4037-1-1.html 可以自制函数newtone() void newtone(byte toneP ...

  10. CSS深入理解学习笔记之float

    1.float的历史 float设计的初衷仅仅是为了文字环绕效果. 示例代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...