• 杭电ACM1005


    转自:http://blog.csdn.net/middle544291353/article/details/7723427

    这题看起来很容易,不过格式很多限制,比如内存,运行时间等的限制。所以递归是行不通的。

    经过思考,看看组合数学,竟然还是没头脑,虽然知道周期为7*7=49.但是还是AC不了,结果无疑看到这个:

    1。由题目的式子可知0<=f[n]<=6,

    2。而每个f[n]又是由(f[n-1],f[n-2])这个组合通过计算得出来的,

    由以上两点可以推出,(f[n-1],f[n-2])出现重复的组合的最大周期为7*7=49, 即f[n]的最大周期

    所有, 我们只要算出一个周期中所有的f[n]的值并记录下周期i即可.

    代码是经过一点经过修改的,还是要感谢那个写贴的博客主。得意

    #include <iostream>
    using namespace std;
    int main()
    {
     int a,b,n,i,f[53];
     while(cin>>a>>b>>n)
     {
      if(a==0 && b==0 && n==0) break;
      if(n==1 || n==1)
      {
       cout<<"1"<<endl;
       continue;
      }
      f[1]=1,f[2]=1;
      a%=7,b%=7;
      for(i=3;i<=52;i++)
      {
       f[i]=(a*f[i-1]+b*f[i-2])%7;
       if(f[i-1]==1 && f[i]==1) break;
      }
      i=i-2;
      n%=i;
      f[0]=f[i];
      cout<<f[n]<<endl;
     }
     return 0;
    }


    极简,专注,速度,极致
  • 相关阅读:
    SQL Server 存储过程
    SQL数据类型介绍
    XML文件操作指南
    C# 程序集 与 反射
    详解C#中System.IO.File类和System.IO.FileInfo类的用法
    C# 之泛型详解
    C#中HashTable的用法示例2
    C#中HashTable的用法示例1
    DEDECMS5.7 首页和栏目页调用文章按权重排序
    linux创建用户,指定组
  • 原文地址:https://www.cnblogs.com/simplelifestyle/p/3761935.html
Copyright © 2020-2023  润新知