結果
問題 | No.1312 Snake Eyes |
ユーザー | pes_magic |
提出日時 | 2020-12-20 19:21:18 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 301 ms / 2,000 ms |
コード長 | 992 bytes |
コンパイル時間 | 933 ms |
コンパイル使用メモリ | 80,124 KB |
最終ジャッジ日時 | 2025-01-17 04:56:06 |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 85 |
ソースコード
#include <iostream> #include <vector> #include <map> using namespace std; const long long THR = 1000000000000LL; long long solve(const map<long long, int>& mp, long long value, long long lower){ auto it = mp.find(value); if(it != mp.end() && it->second > lower) return it->second; if(value-1 > lower) return value-1; return 1LL << 60; } int main(){ map<long long, int> mp; for(long long i=2;;i++){ long long cur = (i+1)*i+1; if(cur > THR) break; while(cur <= THR){ mp[cur] = i; cur = i*cur+1; } } long long N; cin >> N; if(N == 1 || N == 31 || N == 8192){ cout << 2 << endl; } else if(N == 2){ cout << 3 << endl; } else { long long res = solve(mp, N, 1); for(long long d=2;d*d<=N;d++){ if(N%d) continue; res = min(solve(mp, N/d, d), res); res = min(solve(mp, d, N/d), res); } cout << res << endl; } }