题目链接:

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.
Given A, B, and n, you are to calculate the value of f(n).
思路:

由于模7,循环节一定在49以内,所以计算前49位,找到循环节,直接输出a[n]即可。

start为循环节开始的下标,len为循环节长度,计算a[n]时,如果 n <= start,直接输出a[n],如果大于start,输出a[start + (n - start) % len];

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
#include<cmath>
using namespace std;
const int maxn = 1e4 + ;
typedef long long ll;
int T, n, m;
int a[maxn];
int main()
{
int x;
while(cin >> n >> m >> x && (n + m + x))
{
memset(a, , sizeof(a));
a[] = , a[] = ;
bool flag = ;
int start, len;
for(int i = ; ; i++)
{
a[i] = n * a[i - ] + m * a[i - ];
a[i] %= ;
for(int j = ; j <= i - ; j++)
{
if(a[j] == a[i - ] && a[j + ] == a[i])
{
flag = ;
start = j;
len = i - j - ;
}
if(flag)break;
}
if(flag)break;
}/*
for(int i = 1; i < start; i++)cout<<a[i]<<" ";
for(int i = start; i <= start + len; i++)cout<<a[i]<<" ";
cout<<endl;
cout<<start<<" "<<len<<endl;*/
if(x <= start)cout<<a[x]<<endl;
else cout<<a[start + (x - start) % len]<<endl;
}
return ;
}

最新文章

  1. linux系统的初化始配置(包括网络,主机名,关闭firewalld与selinux)
  2. hdu 1078 FatMouse and Cheese
  3. IOS应用沙盒文件操作
  4. openfire控制台登录不了的解决
  5. RECT 数据结构
  6. 《Secrets of the JavaScript Ninja》:JavaScript 之运行时代码
  7. C# list 筛选FindAll
  8. usaco 地震 &amp;&amp; 奶牛观光
  9. 利用nodeJs来安装less以及编译less文件为css文件
  10. Gitlab的安装及项目新建
  11. Ubuntu 插入鼠标自动禁用触控板
  12. Azure CosmosDB (13) CosmosDB数据建模
  13. UML和模式应用5:细化阶段(1)--第1次迭代
  14. (华中科大)江南雨烟 C++ STL 专栏
  15. cmd使用管理员权限运行,启动路径不是当前目录
  16. llinux 环境安装编译 nginx (源码安装包)
  17. cut的用法【转】
  18. 推荐一篇mysql优化干货
  19. 基于node.js+socket.io+html5实现的斗地主游戏(1)概述
  20. 实验1 查看CPU和内存,用机器指令和汇编指令编程

热门文章

  1. 1-5 hibernate学习笔记(11-14章)
  2. 【Windows】 Windows系统小积累
  3. 使用SQLiteOpenHelper类对数据库简单操作
  4. MIPCMS V3.1.0 远程写入配置文件Getshell过程分析(附批量getshell脚本)
  5. js中非死循环引起的栈调用溢出问题
  6. 团队作业7——第二次项目冲刺(Beta版本计划及安排)
  7. 团队作业7——第二次项目冲刺(Beta版本12.08)
  8. 基于微信小程序的失物招领系统的Postmortem
  9. 冲刺NO.1
  10. PTA題目的處理(二)