20161004 NOIP 模拟赛 T1 解题报告
第1题 小麦亩产一千八
【问题描述】
“有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾……”,话说HYSBZ(Hengyang School for Boys & Zy)学识渊博孩纸们一讲到粮食,都会想起印度那个著名的故事:国王要在第一个格子里放入一粒小麦,接下来的格子放入前面一个格子的两倍的小麦。这样所需小麦总数是巨大的,哪是不用金坷垃就能完成的任务?不过为了减轻国王的任务,那个下棋获胜的宰相换了一个要求:“我只需要你在棋盘外放一粒小麦,可以将其理解为第0个格子,然后你需要在第一个格子里放入若干小麦,之后每一个格子放入前两个格子的小麦数之和的小麦,并且要满足第a个格子放x粒小麦,第b个格子放……”说到这,宰相突然发现自己说的满足第a个格子放x粒小麦的情况可能不存在……欺君可是大罪啊!国王看到宰相迟迟不说,自己也烦了!我自己来算!于是国王拜托你,让你算出第b个格子应该放几粒小麦。当然,就算答案不存在,你也是要告诉国王的。
【输入格式】kela.in
该题有多组数据,请读到文件末结束。
对于每一组数据仅一行,3个正整数a,x,b,分别表示第a个格子放了x粒小麦,以及你所需要计算的是第b个格子的小麦数量。
【输出格式】kela.out
对于每一次询问,仅1个整数,为第b个格子的小麦数量,若宰相说的情况不存在,那么请输出-1。
样例输入 |
样例输出 |
1 1 2 3 5 4 3 4 6 12 17801 19 |
2 8 -1 516847 |
【样例解释】
对于样例二,f[1]=2时,能够满足f[3]=5,因此宰相没有撒谎,此时第5个格子的小麦数应为f[4]=f[2]+f[3]=3+5=8.
【数据范围与约定】
对于50%的数据:如果答案存在,那么p<=50
对于100%的数据:1<=数据组数<=10000,1<=a,b<=20, 数据保证如果答案存在,那么1<=p<=1000000.(注:p是第一格放置的小麦数)。
———————————————分割线———————————————
分析:
这道题,本蒟蒻只拿到50分(不开森),我果然还是太弱了。
说说我的暴力思路,二分第一个格子的小麦数(1~1000000),然后取中值,根据这个值递推,这个思路太暴力了(捂脸)。
下面50分的 暴逆 暴力代码:
#include "cstdio" using namespace std ;
const int maxN = ;
typedef long long QAQ ; QAQ T[ maxN ] ; bool Check ( int N , int Target ) {
for ( int i= ; i<=N ; ++i )
T[ i ] = T [ i - ] + T[ i - ] ; if ( T[ N ] == Target ) return true ;
else return false ;
} int main ( ) {
QAQ A , B , X ;
bool flag ;
freopen("kela.in","r",stdin);
freopen("kela.out","w",stdout);
while ( scanf( "%I64d%I64d%I64d" , &A , &X , &B ) != EOF ) {
T[ ] = ;
int left = , right = ;
flag = false ;
while ( left < right ) {
int mid = ( left + right ) >> ;
T[ ] = mid ;
if ( Check ( A , X ) ) {
flag = true ;
break ;
}
else if ( T[ A ] > X ) right = mid ;
else if ( T[ A ] < X ) left = mid + ;
}
if ( flag==true ){
for ( int i=A+ ; i<=B ; ++i ) T[ i ] = T [ i - ] + T[ i - ] ;
printf ( "%I64d\n" , T[ B ] ) ;
}
else printf ( "-1\n" ) ; }
fclose(stdin);
fclose(stdout);
return ;
}
暴力
AC思路:
这道题的递推式与Fibonacci数列递推式相同,只是首项不同。那么,这个数列与Fibonacci数列有什么联系?
设 Fibonacci 数列的每一项为F ( i ) , 即F( 1 ) = 1 , F( 2 ) = 1 , F( 3 ) = 2 , ... ... , F ( n ) = F ( n - 1 ) + F ( n - 2 )
现在要求推出的数列为 f ( i ) , f( 1 ) = 1 , f( 2 ) = p , f( 3 ) = p + 1 , f ( 4 ) = 2 * p + 1 , ... ... , f ( n ) = f ( n - 1 ) + f ( n - 2 )
设 g ( i ) = f ( i ) - F ( i ) ,即
g( 1 ) = 0 , g ( 2 ) = p - 1 , g( 3 ) = p - 1 , g( 4 ) = 2 * ( p - 1 ) , g ( 5 ) = 3 * ( p - 1 ) , ... , g ( n ) = F ( n - 1 ) * ( p - 1 )
对于本题 , 已知 f ( a ) = x , 即
g ( a ) = f ( a ) - F ( a ) => F ( a - 1 ) * ( p - 1 ) = x - F ( a )
这道题中 , x已知 , Fibonacci数列又可以通过预处理计算,可以求出 p .
如果 p 不是整数 , 则输入不合法,直接输出“-1”。
之后便可以通过递推求得 f ( b ) .
#include "cstdio"
#include "algorithm" using namespace std ;
const int INF = ;
typedef long long QAQ ; QAQ a,x,b,F[]={,,,,,,,,,,,,,,,,,,,,};
QAQ f[ ] ;
int main ( ) {
f[ ] = ;
while ( scanf( "%I64d%I64d%I64d" , &a , &x , &b ) == ) {
x -= F[ a - ] ;
if ( x % F[ a ] ) {
printf ( "-1\n") ;
continue ;
}
else {
x /= F[ a ] ;
f[ ] = x ;
for ( int i= ; i<=b+ ; ++i ) {
f[ i ] = f [ i - ] + f [ i - ] ;
}
printf ( "%d\n" , f[ b+ ] ) ;
}
}
return ;
}
AC
本蒟蒻要学一点了,NOIP_RP++。
2016-10-05 00:23:49
(完)
20161004 NOIP 模拟赛 T1 解题报告的更多相关文章
- 20161007 NOIP 模拟赛 T1 解题报告
排序 3.1 题意描述 众所周知,熟练掌握至少一种排序算法是参加NOIP的必备技能.常见的排序算法有冒泡 排序.归并排序.快速排序.奇偶排序.猴子排序.梳排序.鸡尾酒排序.臭皮匠排序等. 在这里,介绍 ...
- 20161022 NOIP模拟赛 T1 解题报告
旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起 ...
- 20161023 NOIP 模拟赛 T1 解题报告
Task 1.纸盒子 (box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一 ...
- 【HHHOJ】NOIP模拟赛 玖 解题报告
点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- 20161005 NOIP 模拟赛 T2 解题报告
beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...
- NOIP欢乐模拟赛 T1 解题报告
小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...
- CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告
T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7 ...
- CH Round #54 - Streaming #5 (NOIP模拟赛Day1)解题报告
最近参加了很多CH上的比赛呢~Rating--了..题目各种跪烂.各种膜拜大神OTZZZ T1珠 描述 萌蛋有n颗珠子,每一颗珠子都写有一个数字.萌蛋把它们用线串成了环.我们称一个数字串是有趣的,当且 ...
随机推荐
- SVM 最大间隔目标优化函数(NG课件2)
目标是优化几何边距, 通过函数边距来表示需要限制||w|| = 1 还是优化几何边距,St去掉||w||=1限制转为普通函数边距 更进一步的,可以固定函数边距为1,调节||w| ...
- 几年前做家教写的C教程(之三专讲了递归和斐波那契)
C语言学习宝典(3) 数组: 一维数组的定义: 类型说明符 数组名[常量表达式] 例如: int a[10]; 说明:(1)数组名的命名规则和变量名相同,遵循标示符命名规则 (2)在定义数组时需要 ...
- gitlab安装部署
参考文章: https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/install/centos http://www.xsjxmx.com/ ...
- 常见IE浏览器bug及其修复方案(双外边距、3像素偏移、绝对定位)
1. 双外边距浮动bug IE6和更低版本中存在双外边距浮动bug,顾名思义,这个Windows bug使任何浮动元素上的外边距加倍 bug重现: <!DOCTYPE html> < ...
- Cygwin的安装与配置
去cygwin的官网去下载: 安装: 初次安装 卸载 使用过程中安装新的工具包 参考http://blog.csdn.net/superbinbin1/article/details/10147421 ...
- 在Activity中响应ListView内部按钮的点击事件
最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应? 对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在A ...
- LoadRunner关联函数的脚本实例--如何操作关联参数
LoadRunner关联函数的脚本实例--如何操作关联参数 这几天一直在学习LoadRunner的VuGen编程,今天想对关联函数web_reg_save_param做详细的试验和研究: ~f6p q ...
- RxJava
Grokking RxJava, Part 1: The Basics Grokking RxJava, Part 2: Operator, Operator Grokking RxJava, Par ...
- SQL初级第三课(下)
我们续用第三课(上)的表 辅助表 Student Course Score Teacher Sno ...
- ajax乱码
ajax提交请求,参数在data上依然乱码,并且已经做了过滤转码, 其他请求没有问题,此请求有问题建议使用下述方式处理: 前端:encodeURIComponent(fileName)或者encode ...