sky同学在努力地刷题..,在这题卡住了,于是一起研究了一下...

这题本身挺简单的,(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 递推公式本身是mod7的...所以f(n-1)和f(n-2)最多只有49种状态,根据鸽巢原理在50以内必定循环。

只要推导出周期和循环的起始位置就行了。一开始只算了周期,没考虑从哪里开始循环,但竟然神奇地AC了。。。后来想了想觉得不对,应该加入循环的起始位置。

经过手动验证 7 7 49这组数据,正确输出应该为0,觉得我没有想错。

看了一下Discuss的部分,感觉这题数据各种神奇。评论里面好多直接mod48的都神奇地过了..评论里基本上都没有考虑循环初始位置的样子, 对于7 7 49这组数据基本给出的

输出都是错误的。

程序代码如下:

这题本来交了一发,但是看了评论之后觉得自己写的有bug,于是改了一发,现在大概是比较正确的TAT。。。
手动测试了如下几组数据,均正确:
2 2 48
7 7 49
247 602 35363857
376 392 9671521
759 623 18545473
53 399 46626337
316 880 10470347
应该输出为 3 0 4 3 5 2 3(可以写一个暴力程序来验证..)
#include <cstdio>
#include <string.h>
#include <cmath>
#include <iostream>
using namespace std;
#define REP(i,n) for(int i=0;i<n;i++)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define DOWN(i,b,a) for(int i=b;i>=a;i--)
int A,B,C;
int T;
int strt;
int a[100]={0,1,1};
void out(){
FOR(i,1,50)printf("%d ",a[i]);
printf("\n");
}
int main(){
while(scanf("%d%d%d",&A,&B,&C)!=EOF&&C){
A%=7;
B%=7;
FOR(i,3,100){
a[i]=(A*a[i-1]+B*a[i-2])%7;
FOR(j,3,i-1){
if(a[j]==a[i]&&a[j-1]==a[i-1]){
strt=j;
T=i-j;
i=100;
break;
}
}
}
if(C<=strt)printf("%d\n",a[C]);
else printf("%d\n",a[(C-strt)%T+strt]);
FOR(i,3,100){
a[i]=(A*a[i-1]+B*a[i-2])%7;
}
//out();
}
return 0;
}

[杭电oj][1005]Number Sequence的更多相关文章

  1. 1005 Number Sequence(HDU)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005 Number Sequence Time Limit: 2000/1000 MS (Java/O ...

  2. 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)

    今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...

  3. 爬取杭电oj所有题目

    杭电oj并没有反爬 所以直接爬就好了 直接贴源码(参数可改,循环次数可改,存储路径可改) import requests from bs4 import BeautifulSoup import ti ...

  4. C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~

    暑假集训虽然很快乐,偶尔也会比较枯燥,,这个时候就需要自娱自乐... 然后看hdu的排行榜发现,除了一些是虚拟测评机的账号以外,有几个都是AC自动机器人 然后发现有一位作者是用网页填表然后按钮模拟,, ...

  5. HDU 1005 Number Sequence(数列)

    HDU 1005 Number Sequence(数列) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...

  6. 杭电oj 2095 & 异或^符号在C/C++中的使用

    异或^符号,在平时的学习时可能遇到的不多,不过有时使用得当可以发挥意想不到的结果. 值得注意的是,异或运算是建立在二进制基础上的,所有运算过程都是按位异或(即相同为0,不同为1,也称模二加),得到最终 ...

  7. 用python爬取杭电oj的数据

    暑假集训主要是在杭电oj上面刷题,白天与算法作斗争,晚上望干点自己喜欢的事情! 首先,确定要爬取哪些数据: 如上图所示,题目ID,名称,accepted,submissions,都很有用. 查看源代码 ...

  8. 杭电oj 4004---The Frog Games java解法

    import java.util.Arrays; import java.util.Scanner; //杭电oj 4004 //解题思路:利用二分法查找,即先选取跳跃距离的区间,从最大到最小, // ...

  9. HDU 1005 Number Sequence(数论)

    HDU 1005 Number Sequence(数论) Problem Description: A number sequence is defined as follows:f(1) = 1, ...

随机推荐

  1. 【Leetcode_easy】728. Self Dividing Numbers

    problem 728. Self Dividing Numbers solution1: 使用string类型来表示每位上的数字: class Solution { public: vector&l ...

  2. 【Leetcode_easy】606. Construct String from Binary Tree

    problem 606. Construct String from Binary Tree 参考 1. Leetcode_easy_606. Construct String from Binary ...

  3. 第六章 Realm及相关对象——《跟我学Shiro》

    转发地址:https://www.iteye.com/blog/jinnianshilongnian-2022468 目录贴:跟我学Shiro目录贴 6.1 Realm [2.5 Realm]及[3. ...

  4. linux中安装docker

    uname -r yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ ...

  5. CentOS 7 vi详解

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  6. Charles 教程

    本文介绍 charles 教程 - 代理抓包的使用方法 本文参考了:阿西河 Charles 教程 Charles Charles是一个HTTP代理/ HTTP监视器/反向代理,使开发人员能够查看其机器 ...

  7. Spring 使用单选按钮

    模型层需要提供数据选项,设置错误信息 关键代码 @NotNull(message = "请选择性别") private String gender; 控制器层需要在显示视图前,通过 ...

  8. 创建Webpack 4.X项目

    创建基本的webpack4.x项目 运行npm init -y 快速初始化项目 在项目根目录创建src源代码目录和dist产品目录 在 src 目录下创建 index.html 使用 cnpm 安装 ...

  9. golang 中 map 转 struct

    golang 中 map 转 struct package main import ( "fmt" "github.com/goinggo/mapstructure&qu ...

  10. vbox配置共享磁盘

    本人实在配置Oracle rac的时候,进行共享磁盘的配置 以下操作要在虚拟机关机的情况下进行: 接下来按照步骤走即可