結果
問題 | No.1383 Numbers of Product |
ユーザー | ok |
提出日時 | 2021-02-07 22:03:47 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 592 ms / 2,000 ms |
コード長 | 2,279 bytes |
コンパイル時間 | 884 ms |
コンパイル使用メモリ | 93,768 KB |
実行使用メモリ | 84,480 KB |
最終ジャッジ日時 | 2024-11-22 23:19:58 |
合計ジャッジ時間 | 16,961 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 51 |
ソースコード
#include<iostream> #include<string> #include<iomanip> #include<cmath> #include<vector> #include<algorithm> #include<utility> #include<map> using namespace std; // #define int long long #define int __int128 #define endl "\n" constexpr long long INF = (long long)2e9; constexpr long long MOD = 1'000'000'007; struct fast_io { fast_io(){ std::cin.tie(nullptr); std::ios::sync_with_stdio(false); }; } fio; int cal(int num){ int res = 0; for(int i = 1; i <= num; i++){ if(num % i == 0) res++; } return res; } int input(){ long long in; cin>>in; return in; } int check(int P, int K){ int l = 0, r = INF, m = 0; while(l + 1 < r){ m = (l + r) / 2; if(m * (m + K) == P) return true; else if(m * (m + K) < P) l = m; else r = m; } return false; } signed main(){ cout<<fixed<<setprecision(10); int N, K, M; int con = 0; map<int,int> mp; N = input(); K = input(); M = input(); for(int A = 1; A * (A + K) * (A + 2 * K) <= N; A++){ int pro = A * (A + K) * (A + 2 * K); for(int B = 2; pro <= N; B++){ mp[pro]++; // cout<<"A = "<<(long long)A<<" B = "<<(long long)B<<" pro = "<<(long long)pro<<endl; pro *= A + K * (B + 1); } } if(M == 1) { int l = 0, r = INF, m; while(l + 1 < r){ m = (l + r) / 2; if(m * (m + K) <= N) { l = m; } else { r = m; } } con = l; // cout<<"con = "<<(long long)con<<endl; for(pair<int,int> p : mp){ // if((p.first) * (p.first + K) <= N) { if(check(p.first, K)) { con--; } else if(p.second == 1){ con++; } } } else { for(pair<int,int> p : mp){ int temp = p.second; // if((p.first) * (p.first + K) <= N) { if(check(p.first, K)) { temp++; } if(temp == M) con++; } } cout<<(long long)con<<endl; return 0; }