[杭电oj][1005]Number Sequence
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的更多相关文章
- 1005 Number Sequence(HDU)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005 Number Sequence Time Limit: 2000/1000 MS (Java/O ...
- 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)
今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...
- 爬取杭电oj所有题目
杭电oj并没有反爬 所以直接爬就好了 直接贴源码(参数可改,循环次数可改,存储路径可改) import requests from bs4 import BeautifulSoup import ti ...
- C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~
暑假集训虽然很快乐,偶尔也会比较枯燥,,这个时候就需要自娱自乐... 然后看hdu的排行榜发现,除了一些是虚拟测评机的账号以外,有几个都是AC自动机器人 然后发现有一位作者是用网页填表然后按钮模拟,, ...
- HDU 1005 Number Sequence(数列)
HDU 1005 Number Sequence(数列) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- 杭电oj 2095 & 异或^符号在C/C++中的使用
异或^符号,在平时的学习时可能遇到的不多,不过有时使用得当可以发挥意想不到的结果. 值得注意的是,异或运算是建立在二进制基础上的,所有运算过程都是按位异或(即相同为0,不同为1,也称模二加),得到最终 ...
- 用python爬取杭电oj的数据
暑假集训主要是在杭电oj上面刷题,白天与算法作斗争,晚上望干点自己喜欢的事情! 首先,确定要爬取哪些数据: 如上图所示,题目ID,名称,accepted,submissions,都很有用. 查看源代码 ...
- 杭电oj 4004---The Frog Games java解法
import java.util.Arrays; import java.util.Scanner; //杭电oj 4004 //解题思路:利用二分法查找,即先选取跳跃距离的区间,从最大到最小, // ...
- HDU 1005 Number Sequence(数论)
HDU 1005 Number Sequence(数论) Problem Description: A number sequence is defined as follows:f(1) = 1, ...
随机推荐
- maven:清除lastUpdated文件
项目使用maven管理jar包,很容易因为各种原因(网速慢.断网)导致jar包下载不下来,出现很多.lastUpdated文件.这些文件一个一个删除太麻烦.下面是全部删除的方法 windows系统 c ...
- sersync参数说明
-v, --verbose 详细模式输出-q, --quiet 精简输出模式-c, --checksum 打开校验开关,强制对文件传输进行校验-a, --archive 归档模式,表示以递归方式传输文 ...
- Redis set集合的使用
集合中的元素个数最多为2的32次方-1个,集合中的元素师没有顺序的. Redis集合的操作命令和对应的api如下: smembers [set]JedisAPI:public Set<Strin ...
- 【单元测试框架unittest】
- 关于verilog实例化的介绍
概念 当我们完成一个比较完整的系统的时候,通常需要编写一个Testbench来验证自己的设计的功能能否满足设计要求.在这个系统中通常会有一个top模块来连接那些小的模块,verilog通过实例化的方式 ...
- 点亮文字(CSS)
html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8& ...
- Word 双栏排版最后多一页空白页删不掉、左栏文字没写完就到右栏了
1. 问题 问题:Word双栏排版,最后多一页空白页,删不掉.如图: 原因分析:删不掉是因为末尾文字处其实有个下一页分节符,只不过可能看不到. 如何清晰的看到? 视图 > 大纲,就可以看到了.如 ...
- Django中的Object Relational Mapping(ORM)
ORM 介绍 ORM 概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用 ...
- c++学习-----引用
引用相当于给一个对象起个别名 必须初始化 引用只是与一个对象bind,所以引用无法改变 引用不是一个对象,所以没有引用的引用 引用的初始化值必须是一个对象,而不能是字面量或表达式 引用不是地址,所以引 ...
- 学习嵌入式为什么要有uboot(深度解析)
ref:http://www.elecfans.com/d/617674.html 为什么要有uboot 1.1.计算机系统的主要部件 (1)计算机系统就是以CPU为核心来运行的系统. 典型的 ...