結果
問題 |
No.643 Two Operations No.2
|
ユーザー |
![]() |
提出日時 | 2018-03-10 14:40:37 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 839 bytes |
コンパイル時間 | 1,533 ms |
コンパイル使用メモリ | 167,932 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-13 09:55:58 |
合計ジャッジ時間 | 2,145 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 13 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; using ull = unsigned long long; #define rep(i,a) for(int i=0;i<(a);i++) #define MOD 1000000007 const int INF=INT_MAX/2; int solve(int X,int Y){ int res=0; while(X>Y){ int tmp=X+Y; Y=X-Y; X=tmp; res++; } if(X==Y) return res; swap(X,Y); res++; while(X>Y){ int tmp=X+Y; Y=X-Y; X=tmp; res++; } if(X==Y) return res; else return INF; } int main(){ int X,Y; cin>>X>>Y; if(X==Y){ cout<<0<<endl; return 0; }else if(X==0){ cout<<2<<endl; return 0; }else if(Y==0){ cout<<1<<endl; return 0; }else if(abs(X)==abs(Y)){ cout<<3<<endl; return 0; } int ans=INF; ans=min(ans,solve(X,Y)); ans=min(ans,solve(Y,X)+1); if(ans==INF) cout<<-1<<endl; else cout<<ans<<endl; return 0; }