結果
問題 | No.195 フィボナッチ数列の理解(2) |
ユーザー | n_vip |
提出日時 | 2015-04-26 23:47:08 |
言語 | C++11 (gcc 11.4.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,700 bytes |
コンパイル時間 | 855 ms |
コンパイル使用メモリ | 105,088 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-07-05 02:57:16 |
合計ジャッジ時間 | 3,766 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
6,812 KB |
testcase_01 | AC | 1 ms
6,944 KB |
testcase_02 | RE | - |
testcase_03 | AC | 2 ms
6,944 KB |
testcase_04 | RE | - |
testcase_05 | AC | 1 ms
6,944 KB |
testcase_06 | AC | 2 ms
6,940 KB |
testcase_07 | AC | 2 ms
6,944 KB |
testcase_08 | AC | 1 ms
6,940 KB |
testcase_09 | AC | 2 ms
6,940 KB |
testcase_10 | AC | 2 ms
6,944 KB |
testcase_11 | AC | 1 ms
6,944 KB |
testcase_12 | AC | 2 ms
6,944 KB |
testcase_13 | AC | 2 ms
6,944 KB |
testcase_14 | WA | - |
testcase_15 | RE | - |
testcase_16 | RE | - |
testcase_17 | RE | - |
testcase_18 | RE | - |
testcase_19 | RE | - |
testcase_20 | RE | - |
testcase_21 | RE | - |
testcase_22 | RE | - |
testcase_23 | RE | - |
testcase_24 | RE | - |
ソースコード
#include <string> #include <vector> #include<iostream> #include<cstdio> #include<cstdlib> #include<stack> #include<queue> #include<cmath> #include<algorithm> #include<functional> #include<list> #include<deque> #include<bitset> #include<set> #include<map> #include<unordered_map> #include<cstring> #include<sstream> #include<complex> #include<iomanip> #include<numeric> #include<cassert> #define X first #define Y second #define pb push_back #define rep(X,Y) for (int (X) = 0;(X) < (Y);++(X)) #define rrep(X,Y) for (int (X) = (Y-1);(X) >=0;--(X)) #define repe(X,Y) for ((X) = 0;(X) < (Y);++(X)) #define peat(X,Y) for (;(X) < (Y);++(X)) #define all(X) (X).begin(),(X).end() #define rall(X) (X).rbegin(),(X).rend() using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; template<class T> using vv=vector<vector<T>>; template<class T> ostream& operator<<(ostream &os, const vector<T> &t) { os<<"{"; rep(i,t.size()) {os<<t[i]<<",";} os<<"}"<<endl; return os;} template<class S, class T> ostream& operator<<(ostream &os, const pair<S,T> &t) { return os<<"("<<t.first<<","<<t.second<<")";} pll modFibPair(ll i,ll q){ if(!i) return pll(0,1); if(i%2){ pll f=modFibPair(i/2,q); ll a=f.X,b=f.Y,c=(a+b)%q; return pll((a*a%q+b*b%q)%q,(a*b%q+b*c%q)%q); }else{ pll f=modFibPair(i-1,q); return pll(f.Y, (f.X+f.Y)%q); } } ll modFib(ll i,ll q){ return modFibPair(i,q).X; } pll inv(ll a,ll b){ if(a>=b)return pii(a,b); return min(inv(b-a,a),pll(a,b)); } int main(){ ios_base::sync_with_stdio(false); cout<<fixed<<setprecision(0); int i,j,k; vector<ll> a(3),f={0,1}; while(f.back()<2e9) f.pb(f.back()+f[f.size()-2]); rep(i,3) cin>>a[i]; sort(all(a)); a.erase(unique(all(a)),a.end()); //cout<<a<<f; ll m=f.size(),INF=2e9; pll re=pii(INF,INF); if(a.size()>1){ rep(i,m-1){ ll x=a[1]-f[i]*a[0]; if(x%f[i+1])continue; x/=f[i+1]; int flg=1; if(a.size()==3){assert(0); rep(j,m-1){ ll tmp=f[j]*a[0]+f[j+1]*x; if(tmp>a[2]){flg=0;break;} if(tmp==a[2])break; } } if(flg)re=min(re,inv(a[0],x)); if(f[i]){ ll x=a[1]-f[i+1]*a[0]; if(x%f[i])continue; x/=f[i]; int flg=1; if(a.size()==3){ rep(j,m-1){ ll tmp=f[j+1]*a[0]+f[j]*x; if(tmp>a[2]){flg=0;break;} if(tmp==a[2])break; } } if(flg)re=min(re,inv(x,a[0])); } } }else{ //assert(0); re.X=1; if(a[0]==1) re.Y=1; else rep(i,m-1){ if((a[0]-f[i])%f[i+1]==0 && a[0]-f[i]>0) re.Y=min<ll>(re.Y,(a[0]-f[i])/f[i+1]); } } if(re.X==INF) cout<<-1<<endl; else cout<<re.X<<" "<<re.Y<<endl; return 0; }