杭电1005题

杭电oj-1005(Number Sequence) 由于每次的结果都要对7取余,f(n)的结果只有0、1、2、3、4、5、6,七种可能,所以f(n-1)与f(n-2)的各自的取值也有7种可能,组合最多有7*7=49种可能,即最大的周期是49,在n>49时,f(n) = f(n%49),所以只要算出第一个周期的所有值,再利用周期规律,直接求f(n)即可。f(1) = 1,f(2) = 1,f(n) = (A * f(n-1) + B * f(n-2)) % 7,根据输入的A,B,n,计算f(n)的值。个人学习经验,欢迎各位指导。 阅读详情

      由于本人刚涉ACM,水平有点菜,再加上一直在准备考研,所以很难抽时间也很有限的去AC,1005题个人感觉有点难,因此最后 还是看了别人的解答,贴在下面了。

  

#include <iostream>
using namespace std;
int seq[50];
int main()            
{
    int A,B,n,i;
    while(scanf("%d%d%d",&A,&B,&n) && A+B+n)    
    {
        seq[1]=seq[2]=1;
        for(i=3;i<50;i++)    
        {
            seq[i]=(A*seq[i-1]+B*seq[i-2])%7;
            if(seq[i]==1 && seq[i-1]==1)
                break;
        }
        n%=(i-2);
        if(n==0)
            cout<<seq[i-2]<<endl;
        else
            cout<<seq[n]<<endl;
    }
    return 0;
}

这是AC代码,方法是找循环节

因为mod7的关系,而且f(1)=f(2)=1,所以f(n)的值是循环分布的,而且一定会回到f(n-1)=f(n)=1,并且还可得出,这个循环不大于49,因为相邻连个f只有7种取值,这样f(n-1)和f(n)共有49种组合。所以,只要找出循环因子即可,寻找方法正是根据f(n-1)=f(n)再次出现的地方来计算

这是网上的说法,但明显有问题。如:把50改成99,WA
如果一定存在不大于49的寻环节,并且回到f(n-1)=f(n)=1,则不会存在上述问题

找循环节的思路存在以下问题:
1.如何证明一定存在循环节
2.如果存在循环节,循环的范围有大
3.循环一定回到f(n-1)=f(n)=1吗?
  可能在中间莫些值循环而不回到f(n-1)=f(n)=1

哪位大牛能回答以上问题还请多多指教
----------------------------------------------------------------------------------
先使用一个自定义的词,循环对,即两个相邻的数,以后循环起点都是这一对数

。
我大概的只说说,别让我证明。
1,由于f(n)与f(n-1)和f(n-2)有关,只要出现循环对,就一定会出现循环节。
2,由于是mod 7,共有49种不重复的相邻数对,即50个数,也就是说在这50个数

里,可能不会出现循环对。而在第51个数出现的时候,即有50个相邻数对的时候

,肯定能找到循环对。
3,循环对不一定是f(n-1)=f(n-2)=1.比如当A=513,B=98的时候,循环对是1和2,

循环节是1,2,4.f(1)=1是没有进入循环的。

所以楼主贴出的那个代码是错误的。我猜测它的错误点在于
1,它假设了在49个数里一定出现循环对,for循环里使用了i<50。而49个数

里才有48个相邻数对,可以不出现循环对。
2,它还假定了循环对一定是1,1,循环体里的跳出条件。而很明显,对于当

A=513,B=98的时候,循环对就不是1,1了。这个AC了的程序,当在49个数里找不

到循环对1,1的时候,这时i=50,假设了循环节长度为48个数。

HDU1005 ACM ICPC HDOJ 1005 立即下载

相关推荐

声发射传感器的工作原理是什么?

介绍声发射传感器的工作原理。

qq_39948394的博客 9246

杭电1005 题解(个人向)

题意介绍: 给出一个数字n,表明有n-1个结点,其中每个结点的值为2-n。然后每个结点都有两两相连的无向边,权值为两个结点的最小公倍数。要求利用这些结点生成一个最小生成树,并输出所有边的权值和。 解题思路: 从数据来看,我们发现n的范围到达了10^7规模,且还存在多组测试。显然算法复杂度要求为o(n)。也就是说,按照正常的最小生成树算法,这题是行不通的,必须找到一种快速构造最小生成树的方法。 接下来介绍本题的构造方法。首先,我们通过kruskal算法可以得知,如果我们将所有的结点先都划分为孤立...

m0_59514083的博客 2912

基于强化学习方法的PID参数整定

前言 PID控制器在工业界应用非常广泛,但是PID的参数调节一般需要人工根据经验法来试。对于有经验的工程师来说,一般试几次就可以获得满足调节的参数。然而对于新手工程师却很难确定一套比较好的参数。 这里我们采用强化学习的方法来调节PID参数。 这个例子展示了如何使用双延迟深度确定性策略梯度(TD3:twin-delayed deep deterministic policy gradient)强化学习算法来调整PI控制器。整定控制器的性能与使用Control System Tuner app整定的控制器的性能

weixin_42188287的博客 2万+

杭电oj 1005

杭电oj 1005 规律递推(纯脑力题栓q)

40days 备考简单c++ 548

MavLink协议入门

MAVLink是一个非常轻量化的开源的消息协议,用于无人机之间的通信以及无人机机载设备之间的通信。

ffffffeiyu的博客 2474

跟着团子学SAP CO:基于成本的完工百分比结算:Cost-based POC(以项目为例)

本文以英国及北美会计准则下的基于成本的POC的销售型项目结算对PS模块中的完工百分比进行介绍

Lucas1211的博客 2万+

杭电OJ记录--1005

1005–计算f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 要注意的问题是因为有内存和编译时间的限制 【time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)】 且题目中明确说了n最大到一亿,如果直接用递归必然MLE,所以要找到规律(我MLE那么多次之前怎么就没想过呢……) 规律递推,f(n)可能的取值是6 5 4

CherryTaylor的博客 441

本地服务器搭建Uptime Kuma网站监控服务

本文主要介绍如何在Linux系统中一键部署Uptime Kuma运维监控服务,并将这个服务映射至公网实现随时随地远程访问。如果您像我一样在服务器上托管了多个网站,并且没有足够的时间来手动检查每个网站的在线状态,那么当出现问题时,您可能无法及时收到通知来处理这些问题。因此,搭建一个在线监控服务是很有必要的,它可以在状态异常时提醒您,以便您能够及时处理问题,确保网站的稳定性和可用性。监控服务有很多,我最终选择了Uptime Kuma,因为Uptime Kuma是开源免费的,

Tiam_cr的博客 1823

杭电 OJ-ACM1005(Number Sequence)

ACM1005

m0_73891157的博客 568

Jupyter地铁数据分析预测地铁后7天小时客流量

地铁数据分析 基于八月地铁刷卡数据,以前23天的数据作为训练数据,预测后7天各个地铁站点在6点—23点每个小时的客流量。 import pandas as pd import time import numpy as np import matplotlib.pyplot as plt ...

qq_45868915的博客 1753

python爬虫项目(六十八):爬取电商平台用户购买历史数据,分析消费行为

本文详细介绍了如何爬取电商平台用户购买历史数据,并分析其消费行为。通过爬虫技术、数据存储、分析和可视化等步骤,可以深入了解消费者的行为特征。未来,随着数据分析技术的不断发展,利用人工智能和机器学习方法对消费行为进行更深层次的分析,将成为电商平台提升竞争力的重要手段。

斌擎科技 2768

杭电oj刷题——1005(数字序列)

杭电oj刷题——1005(数字序列) 问题描述: 题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1005 Sample Input 1 1 3 1 2 10 0 0 0 Sample Output 2 5 #include&lt;iostream&gt; #include&lt;string.h&gt; using namespace std; i...

剑指offer03——数组中重复的数字 836

RK3588平台开发系列讲解(USB篇)UAC初识

📢本篇将介绍RK3588平台`UAC`的配置使用。

内核笔记 3881

杭电acm第1005题Number Sequence

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 123152    Accepted Submission(s): 29915 Problem Description A number se

jianjun的专栏 683

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

杭电ACM 第1005题

#include&lt;stdio.h&gt; int main() { int A,B,i; long int n; while(scanf("%d%d%ld",&amp;A,&amp;B,&amp;n)!=EOF) { int a[50]; a[1]=1; a[2]=1; ...

PeixinYe的博客 418

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

杭电第1005题总结

这道题目主要的一点就是如何通过优化,时

vinke_michael的专栏 586

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

杭电1005 Number Sequence

/******************************** * 日期:2011-1-21 * 作者:SJF * 题号:杭电1005 * 题目:Number Sequence * 结果:AC * 思考:这道题具有规律性; * f(1)=a[1]=f(49)=a[49]; * f(2)=a[2]=f(50)=a

落日小屋 4137

杭电题ACM1005

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 145531    Accepted Submission(s): 35358 Problem Description A number se

laymenISmouse的专栏 886

杭电acm-1005

杭电1005题题目: Number Sequence Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. Given A, B, and n, you

Nostalgia_的博客 531

杭电1005

杭电1005题 此题要找规律,用递归法的话内存不够  对于公式 f[n] = A * f[n-1] + B * f[n-2]; 后者只有7 * 7 = 49 种可能, 因为对于f[n-1] 或者 f[n-2] 的取值只有 0,1,2,3,4,5,6 这7个数,A,B又是固定的, 所以就只有49种可能值了。由该关系式得知每一项只与前两项发生关系, 所以当连续的两项在前面出现过循环节出现了,

liangwgl的博客 1114

杭电OJ1005题C语言版

目录题目说明题目解析完整源码小收获 题目说明 本题是斐波那契数列的变体,用户输入A,B,n三个整数,通过公式求出f(n)并输出。当A,B,n都为0时,说明用户输入结束。 题目解析 看到题目之后,我第一想法就是利用递归实现,源代码如下: #include<stdio.h> int main(void){ int a,b; long int n,i; while(scan...

Pointer的博客 839

杭电ACM1005题

这就是一种循环,列出来你便会发现每48个数是一个循环。 #include&lt;stdio.h&gt; int main() { int A,B,i; long int n; while(scanf("%d%d%ld",&amp;A,&amp;B,&amp;n)!=EOF) { int a[50]; a[1]=1; ...

qq_43104182的博客 557

有关于杭电ACM1005题

这道题目的验证方式应该是有问题的,很多错误的代码都可以正常AC,大部分博客上的代码都有错误,集中在n=51和n=49的情况。大家可以计算一下n=49和n=50,然后手算验证n=51的值。...

IntouchablesD的博客 359
上一篇: 杭电1004题
下一篇: next_permutation 的使用
windowsshaking
博客等级 码龄16年 11粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值