2018/7/31 -zznu-oj -问题 C: 磨刀- 【扩展欧几里得算法的基本应用】
生活随笔
收集整理的這篇文章主要介紹了
2018/7/31 -zznu-oj -问题 C: 磨刀- 【扩展欧几里得算法的基本应用】
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
問(wèn)題 C: 磨刀
時(shí)間限制:?1 Sec??內(nèi)存限制:?128 MB提交:?190??解決:?39
[提交] [狀態(tài)] [討論版] [命題人:admin]
題目描述
磨刀是一個(gè)講究的工作,只能在n℃下進(jìn)行,所以我們首先要做的就是把刀的表面溫度提升到n℃。處理刀身溫度有兩種方式:
????1.淬火,使刀身溫度提高a℃;
????2.冰敷,使刀身溫度降低b℃。
寶兒姐想知道,能否經(jīng)過(guò)多次處理,使得刀身溫度達(dá)到n℃。
輸入
每組輸入包含一行:包含三個(gè)非負(fù)整數(shù)n, a, b,含義如上文,數(shù)據(jù)范圍均不超過(guò)2^63,輸入已EOF結(jié)束?輸出
根據(jù)計(jì)算,輸出“YES”或“NO”。?樣例輸入
3 6 9樣例輸出
YES提示
對(duì)于第一個(gè)樣例先冰敷使刀身溫度降至-9℃,在淬火使刀身溫度升至3℃即可 。刀身起始溫度為0 。
?
?
大致思路:
1、第一眼想到bfs,其實(shí)不行,數(shù)據(jù)返回太大,畢竟數(shù)據(jù)范圍均不超過(guò)2^63!
2、用longlong來(lái)存儲(chǔ)所有數(shù)據(jù)!
3、本題求的是一個(gè)方程式:a*x+b*y=n, x表示a磨刀的次數(shù),y表示b磨刀的次數(shù)!當(dāng)然了x和y在應(yīng)用擴(kuò)展歐幾里得算法的時(shí)候會(huì)出現(xiàn)負(fù)值的情況,需要剔除掉這些情況|!
4、初始溫度為0,看‘’提示‘’得到的信息!一點(diǎn)瑕疵!
1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<string> 5 #include<algorithm> 6 #define ll long long 7 using namespace std; 8 #define N 100 9 10 ll exgcd(ll a,ll b,ll x,ll y){ 11 if(!b) 12 { 13 x=1;y=0;return a; 14 } 15 else{ 16 17 ll r=exgcd(b,a%b,y,x); 18 y-=a/b*x; 19 return r; 20 } 21 22 } 23 24 int main(){ 25 ll n,a,b; 26 while(scanf("%lld%lld%lld",&n,&a,&b)!=EOF){ 27 ll r, x,y; 28 r=exgcd(a,b,x,y); 29 if(n%r==0&&x>=0&&y>=0) 30 printf("YES\n"); 31 else 32 printf("NO\n"); 33 } 34 35 return 0; 36 } View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/zhazhaacmer/p/9399506.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的2018/7/31 -zznu-oj -问题 C: 磨刀- 【扩展欧几里得算法的基本应用】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 外汇管理局备案需要带什么资?
- 下一篇: [模板]树链剖分