結果
問題 |
No.1664 Unstable f(n)
|
ユーザー |
|
提出日時 | 2021-09-03 23:41:49 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,333 bytes |
コンパイル時間 | 727 ms |
コンパイル使用メモリ | 68,296 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-12-15 18:49:19 |
合計ジャッジ時間 | 1,878 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 38 |
ソースコード
#include <iostream> #include <cmath> using namespace std; long long kpow(long long x, long long n) { if (n == 0) return 1; long long t = 1; while (n) { if (n & 1) t *= x; n >>= 1; x *= x; } return t; } int main() { long long n; scanf("%lld", &n); // if(n==1) // { // puts("1"); // return 0; // } long long ans = n; long long i = 0, j = 0, k = n; long long lst = n; while (1) { j++; i = pow(n, 1.0 / j); long long tmp1 = kpow(i + 1, j); long long tmp2 = kpow(i, j); if (tmp1 <= n&&tmp1>=0) { k = n - tmp1; ans = min(ans, i + j + k+1); } else { k = n - tmp2; ans = min(ans, i + j + k); } if (i == 1) { ans = min(ans, n); printf("%lld\n", ans); break; } } // for(long long i=0;i<=22;i++) // { // for(long long j=0;j<=22;j++) // { // for(long long k=0;k<=22;k++) // { // if(pow(i,j)+k==n) // { // ans=min(ans,i+j+k); // } // } // } // } // printf("%lld",ans); return 0; }