日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

NYOJ 875 小M的操作数

發(fā)布時(shí)間:2025/3/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 875 小M的操作数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

小M的操作數(shù)

時(shí)間限制:1000?ms ?|? 內(nèi)存限制:65535?KB 難度:2 描述
最近小M上課老瞌睡,落下許多功課,現(xiàn)在就遇到了一個(gè)問(wèn)題: 當(dāng)一個(gè)數(shù)對(duì)(x,y)中有一個(gè)數(shù)大于或等于m時(shí)(當(dāng)然有兩個(gè)更好了),我們稱它為m數(shù)對(duì)。一個(gè)數(shù)對(duì)(x,y)可以經(jīng)過(guò)一步操作變成變成(x,x+y)或(x+y,y)數(shù)對(duì)。現(xiàn)在計(jì)算一個(gè)數(shù)對(duì)(x,y)變成m數(shù)對(duì)最少的操作次數(shù)嗎??你能幫助小M嗎,輸出最小的操作次數(shù),如果不能變成m數(shù)對(duì)輸出-1。 輸入
輸入x,y,m,( -10^18 ≤ x , y , m ≤?10^18 )
輸出
輸出結(jié)果。
樣例輸入
1 2 5 0 -1 5
樣例輸出
2 -1


此題是給定(x,y)數(shù)對(duì),問(wèn)至少經(jīng)過(guò)多少次變換能使至少有一個(gè)數(shù)大于或等于m。

假設(shè)x>0,y>0,我們每次用x+y來(lái)替換x,y中較小的那個(gè),假設(shè)x<y,則第一次操作后變成(x+y,y),第二次操作后變成(x+y,x+2*y)

第三次后變成(2*x+3*y,x+2*y)…………第k次操作后較大的數(shù)等于fib[k]*y + fib[k-1]*x,其中fib[ ]是斐波那契數(shù)。

對(duì)于x,y小于0的,轉(zhuǎn)換成正的即可。


#include<stdio.h> #include<algorithm> using namespace std; typedef long long LL; LL fib[100]; void get_fib() {fib[0] = 1; fib[1] = 1;for(int i = 2; i <= 90; i++)fib[i] = fib[i-1] + fib[i-2]; } int main() {get_fib();LL x, y, m;while(~scanf("%lld%lld%lld",&x, &y, &m)){LL temp, i, sum = 0;if(x >= m || y >= m){printf("0\n");continue;}if(x > y) swap(x,y);if(x <= 0 && y <= 0){if(y >= m) printf("0\n");else printf("-1\n");continue;}if(x < 0 && y > 0){sum = (-x) / y + 1;x += sum * y;}//求出把x變成正數(shù)需要的次數(shù)if(x > y) swap(x,y);for(i = 1; i <= 90; i++){temp = fib[i]*y + fib[i-1]*x;if(temp >= m)break;}printf("%lld\n",sum + i);}return 0; }

總結(jié)

以上是生活随笔為你收集整理的NYOJ 875 小M的操作数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。