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. win10 1803 频繁死机,卡死不动

    摘自微软官网的解决办法,我的目测好像是可以了. 小娜搜索框输入“PowerShell”选择在管理员命令提示符下键入以下命令: Dism /Online /Cleanup-Image /ScanHeal ...

  2. jquery-easyui中改变【确认框控件的按钮文字】($.messager.confirm)

    根据API这句话,就很自然想到重写该方法,代码如下: $.messager.defaults = { ok: "通过", cancel: "不通过" ,widt ...

  3. 1、4 前后端分离,写静态HTML文件,通过ajax 返回数据

    1.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...

  4. pandas中的argsort

    直接通过例子看比较好理解. import pandas as pd data = [[1, 2, 3], [2, 2, 2], [7, 8, 9]] df = pd.DataFrame(data, i ...

  5. go 通过赋值给 _ 来忽略序号和值

    go 语言中 只要想忽略的值都需要用 下划线 _ 来代替 package main import "fmt" func main() {     pow := make([]int ...

  6. go hello world第一个程序

    main 函数所在的包名必须使用main import "fmt"  导入包fmt  fmt包包含了Println方法的定义 func main() 程序运行入口方法和c语言相似 ...

  7. zookeeper-data

    1. The ZooKeeper Data Model 1.1 ZNodes Znodes maintain a stat structure: The Stat structure for each ...

  8. c++学习(三)------static数据与成员函数

    疑惑: static类型成员是类的全局变量,所有类的实例都享有这个变量,或者说这个变量不属于任何一个类的实例. static类型变量可以为private,或public或其他(static数据可以被继 ...

  9. Codeforces 666E Forensic Examination(广义后缀自动机+线段树合并)

    将所有串(包括S)放一块建SAM.对于询问,倍增定位出该子串所在节点,然后要查询的就是该子串在区间内的哪个字符串出现最多.可以线段树合并求出该节点在每个字符串中的出现次数. #include<b ...

  10. SQL优化中的重要概念:事务

    原文:SQL优化中的重要概念:事务 sql 优化和事务有关系? 从表面上看,让sql跑的更快,似乎和事务这个概念没什么联系,但是关系数据库中最重要的2个概念就是 关系.事务. 关系,对应到sql中,是 ...