洛谷 P1635 跳跃
题目:
题目背景
NOIP即将迎来周年华诞。在这一个春秋的历程里,NOIP领导全国oier,建设高效、稳定、快捷、开放的社会主义现代化OI。在新的一年里,YZOJ将再接再厉,积极探寻成长之路,更好地为广大oier服务。
题目描述
青蛙小C听说NOIP要办周年庆比赛,兴冲冲得来到了Z市,初始时他在坐标x0处,小C是一只善于跳跃的青蛙,若当前他处在坐标x处,每一次跳跃,他可以跳到4x+34x+34x+3或8x+78x+78x+7处,且由于体力原因,他最多能跳100000100000100000次。根据Z市的传说,坐标位置为100000000710000000071000000007的整数倍的位置(如100000000710000000071000000007、200000001420000000142000000014)可以传送到YZOJ。小C想知道,最少跳几次能传送到YZOJ。
输入输出格式
输入格式:
输入的第一行包含一个整数x0表示青蛙的初始位置,保证x0在的范围在[1,1000000006][1,1000000006][1,1000000006]。
输出格式:
输出一个整数,表示最少所需步数,若在100000100000100000步内还无法传送到YZOJYZOJYZOJ,则输出−1-1−1。
分析:
显然,这一看就是一道数学题
那么我们怎么考虑呢?
如果你细心一点就会发现:
4x+3=2∗(2x+1)+14x+3=2*(2x+1)+14x+3=2∗(2x+1)+1
8x+7=2∗(2∗(2x+1)+1)+18x+7=2*(2*(2x+1)+1)+18x+7=2∗(2∗(2x+1)+1)+1
那么不就是说,只需要计算与2x+1有关的步数,然后推导普遍规律就行。
计算有几次2x+1的过程太简单,等会直接看代码就行。下面分析处理结果的方法。
再跳回两个式子:
4x+3=2∗(2x+1)+14x+3=2*(2x+1)+14x+3=2∗(2x+1)+1
8x+7=2∗(2∗(2x+1)+1)+18x+7=2*(2*(2x+1)+1)+18x+7=2∗(2∗(2x+1)+1)+1
我们可以发现:最多的是由三个2x+1等构成(即8x+7),所以我们不妨考虑将结果先mod 3:
%3=03=03=0:那么就是一堆8x+78x+78x+7(设为n个),输出answer/3;answer/3;answer/3;
%3=13=13=1:可以想成把本来的nnn个8x+78x+78x+7从整好的多了一个2x+12x+12x+1,所以只能拆出一个2x+12x+12x+1,变成n−1n-1n−1个8x+78x+78x+7和222个4x+34x+34x+3.
%3=23=23=2:可以想成把本来的n个8x+78x+78x+7从整好的多了两个2x+12x+12x+1,所以n个8x+78x+78x+7不用变,只是把多出的两个2x+12x+12x+1合成一个4x+34x+34x+3就行。
对了补充一句,因为首先是给出x,然后才能变成2x+1,4x+3,8x+7 . 等。所以所谓的三步其实是算上x变成2x+1的QAQ
然后归纳一下就行了,具体看代码:
#include<cstdio>
using namespace std;
const int mod=1000000007;//定义mod
int ans;
int search(int x)//递归部分,AC
{
if(ans>=300100)//由于每次递归做的次数都很少,所以可以多做几次,避免误差
{
printf("-1");
return 0;
}
int y=((x%mod)*2+1)%mod;
ans++;
if(y==0)//等于0就是达成了整数倍
{//接下来就是归纳刚刚分析的内容,中间要判断答案是否在100000以内
if(ans%3==0)
{
if(ans/3>100000)
{
printf("-1");
return 0;
}
printf("%d",ans/3);
return 0;
}
else
{
if(ans/3+1>100000)
{
printf("-1");
return 0;
}
printf("%d",ans/3+1);
return 0;
}
}
else
search(y);//继续走
return 0;
}
int main()
{
long long m;
scanf("%lld",&m);
/*while(ans<=300000)//非递归部分,暂时没有AC
{
m=m*2+1;
ans++;
if(m%1000000007==0)
{
if(ans>100000)
{
printf("-1\n");
}
if(ans%3==0)
printf("%d",ans/3);
else
{
printf("%d",ans/3+1);
}
return 0;
}
}
printf("-1\n"); */
search(m);
return 0;
}
洛谷 P1635 跳跃的更多相关文章
- 洛谷 P2678 跳石头
题目背景 一年一度的"跳石头"比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间 ...
- [NOIP2015提高&洛谷P2678]跳石头 题解(二分答案)
[NOIP2015提高&洛谷P2678]跳石头 Description 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之 ...
- 【洛谷】P1052 过河【DP+路径压缩】
P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙 ...
- 洛谷3763:[TJOI2017]DNA——题解
https://www.luogu.org/problemnew/show/P3763 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是 ...
- 洛谷 P2261 [CQOI2007]余数求和
洛谷 一看就知道是一个数学题.嘿嘿- 讲讲各种分的做法吧. 30分做法:不知道,这大概是这题的难点吧! 60分做法: 一是直接暴力,看下代码吧- #include <bits/stdc++.h& ...
- DP【洛谷P3089】 [USACO13NOV]POGO的牛Pogo-Cow
[洛谷P3089] [USACO13NOV]POGO的牛Pogo-Cow FJ给奶牛贝西的脚安装上了弹簧,使它可以在农场里快速地跳跃,但是它还没有学会如何降低速度. FJ觉得让贝西在一条直线的一维线路 ...
- 洛谷P1107 & BZOJ1270 [BJWC2008]雷涛的小猫
一道DP. 给你一个矩阵里面有很多数,你需要从上往下找到一种跳跃方法使得经过的点的价值之和最大. 具体题面见链接 洛谷P1107 BZOJ1270 很明显是一个二维的DP. #include<b ...
- 洛谷 1052 dp 状态压缩
洛谷1052 dp 状态压缩 传送门 (https://www.luogu.org/problem/show?pid=1052#sub) 做完这道题之后,感觉涨了好多见识,以前做的好多状压题目都是将一 ...
- 洛谷 P2504 [HAOI2006]聪明的猴子
洛谷 P2504 [HAOI2006]聪明的猴子 题目描述 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水 ...
随机推荐
- UWP-消息提示(仿Android)
原文:UWP-消息提示(仿Android) 在UWP中的消息提示框(一)中介绍了一些常见的需要用户主动去干涉的一些消息提示框,接下来打算聊聊不需要用户主动去干涉的一些消息提示框.效果就是像双击退出的那 ...
- C++没有库则寸步难行,有库则几乎可以做任何事情——Bjarne Stroustrupi
"Without a good library, most interesting tasks are hard to do in C++; but given a good library ...
- Windows下libevent C++封装类实现(为什么要使用封装好的网络库?)
题记 windows平台下对于服务器高并发的网络模型选型中,使用libevent是个不错的选择. 本文的背景基于:国内博客对于libevent大多介绍linux实现,大多是c语言的实现,Windows ...
- java多线程之管道流
java语言中提供了各种各样的流供我们操纵数据,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据. 一个线程发送数据到输出管道,另一个线程从输入管道读取数据,通过使用管道 ...
- vue+element——父级元素fixed,遮罩会在上方
前言 这种场景还是蛮场景的 一个共用的head组件,组件里面通常是当前系统登录账号名 退出登录 修改密码这样的弹框 但是现在我又想head不跟着main内容上下滑动.所以用了fixed 定位. 问题来 ...
- 如何开发优质的 Flutter App:应用架构的搭建
各位读者朋友们,好久不见了! 最近博主一直在忙于工作以及写<Flutter入门与应用实战>的书,所以没有时间打理博客.今天来给大家分享一个博主在GitChat上发起的一场Chat. 下面是 ...
- Redis 学习笔记(篇一):字符串和链表
本次学习除了基本内容之外主要思考三个问题:why(为什么).what(原理是什么).which(同类中还有哪些类似的东西,相比有什么区别). 由于我对 java 比较熟悉,并且 java 中也有字符串 ...
- react-redux的Provider和Connect的引发的思考
react是当下非常流行的JS框架,react秉承的设计原则是一切皆组件:react-redux是react中使用redux的桥接工具,react-redux也继承react的设计原则,使用组件的形式 ...
- HTML end~
一.浏览器的兼容问题(关于浏览器的兼容问题 有很多大佬已经解释的很清楚了 这个得自己百度去多花点时间去了解 这里咱们只说一下前面的漏点) 浏览器兼容性问题又被称为网页兼容性或网站兼容性问题,指网页在各 ...
- 机器学习经典算法之Apriori
一. 搞懂关联规则中的几个概念 关联规则这个概念,最早是由 Agrawal 等人在 1993 年提出的.在 1994 年 Agrawal 等人又提出了基于关联规则的 Apriori 算法,至今 Apr ...