【结论】Number(jzoj(gz) 1781)
生活随笔
收集整理的這篇文章主要介紹了
【结论】Number(jzoj(gz) 1781)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Number
jzoj(gz) 1781
題目大意:
現(xiàn)在給出一個(gè)x,可以把x變?yōu)?x+3或8x+7,問最少變多少次可以把x變?yōu)?000000007的倍數(shù)
輸入輸出樣例
輸入樣例#1
125000000輸出樣例#1
1輸入樣例#2
281250001輸出樣例#2
2輸入樣例#3
18426114輸出樣例#3
58輸入樣例#4
705616876輸出樣例#4
100000數(shù)據(jù)范圍:
對(duì)于50%的數(shù)據(jù),答案不超過10
對(duì)于80%的數(shù)據(jù),答案不超過1000
對(duì)于100%的數(shù)據(jù),答案不超過100000
解題思路:
一開始我們看到4x+3和8x+7,我們可以發(fā)現(xiàn)4x和8x是兩倍的關(guān)系,我們可以嘗試拆開4x+3
可以得到:2(2x+1)+1,我們?cè)俨?x+7,可以得到:2( 4x+3)+1也就是2(2(2x+1)+1)+1
看到這個(gè),我們可以發(fā)現(xiàn)4x+3是兩次2x+1,8x+7是三次2x+1,于是我們可以不停做2x+1,符合題意時(shí),就判斷2x+1的次數(shù),我們竟可能選8x+7,因?yàn)樗鼉?yōu),若除3而余1就退一次8x+7選兩次4x+3,若余2就選1次4x+3
代碼:
#include<cstdio> using namespace std; long long n,ans; int main() {scanf("%lld",&n);while(n%1000000007ll){n=(n*2+1)%1000000007ll;//計(jì)算ans++;//記錄}printf("%lld",ans%3?ans/3+1:ans/3);//按解題思路 } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的【结论】Number(jzoj(gz) 1781)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPad能代替笔记本吗ipad代替笔记本
- 下一篇: 【状压DP】最优配对问题(jzoj 34