第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 192
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分的 暴逆 暴力**:
1 #include "暴力ac思路:cstdio"2
3using
namespace
std ;
4const
int maxn = 10010
;5 typedef long
long
qaq ; 67
qaq t[ maxn ] ;89
bool check ( int n , int
target )
1617
intmain ( )
33else
if ( t[ a ] > x ) right =mid ;
34else
if ( t[ a ] < x ) left = mid + 1;35
}36if ( flag==true)40
else printf ( "
-1\n
") ;
4142}43
fclose(stdin);
44fclose(stdout);
45return0;
46 }
這道題的遞推式與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 ) .
1 #include "ac本蒟蒻要學一點了,noip_rp++。cstdio
"2 #include "
algorithm"3
4using
namespace
std ;
5const
int inf = 2147483647
;6 typedef long
long
qaq ;
78 qaq a,x,b,f=;
9 qaq f[ 30
] ;10
intmain ( )
18else
24 printf ( "
%d\n
" , f[ b+1
] ) ;25}
26}27return0;
28 }
2016-10-05 00:23:49
(完)
noip模擬賽 密碼
表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...
NOIP模擬賽 老師
題目描述 一座有n層的教學樓裡有一些學生,第i 0 i n 層有studentsi個學生。你被給定了乙個數k,如果第i層有x個學生,那麼這一層需要 x k 個老師。你可以調整每個學生的樓層,但是每個學生至多只能調整一層,就是說第i層的學生只能去第i 1層 如果有的話 第i層 第i 1層 如果i 1 ...
NOIP模擬賽 分錢
題目描述 兩個人在街上撿到了一些錢,這些錢共有n張,他們等了很久也沒有等來失主,於是決定把錢平分。但錢可能無法平分。他們先把能夠平分的錢盡量先平分了,使得剩下不能平分的錢盡量少。這些不能平分的錢怎麼辦呢他?他們決定拿去賭場裡面賭一把。他們運氣太好了,那些不能平分的錢變成了雙倍,於是他們就把那個錢分了...