結果
問題 | No.28 末尾最適化 |
ユーザー | ktg |
提出日時 | 2016-05-09 22:48:22 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 513 ms / 5,000 ms |
コード長 | 2,682 bytes |
コンパイル時間 | 1,011 ms |
コンパイル使用メモリ | 99,860 KB |
実行使用メモリ | 6,816 KB |
最終ジャッジ日時 | 2024-10-05 13:18:43 |
合計ジャッジ時間 | 2,082 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,816 KB |
testcase_01 | AC | 513 ms
6,816 KB |
ソースコード
//#include <bits/stdc++.h> #include <assert.h> #include <algorithm> #include <cmath> #include <cstring> #include <iostream> #include <map> #include <numeric> #include <queue> #include <set> #include <sstream> #include <stack> #include <string> #include <vector> #include <iterator> using namespace std; typedef signed long long ll; #define pp(...) (void)printf(__VA_ARGS__) #define For(x,to) for(x=0;x<(to);x++) #define ForAuto(x,arr) for(auto& x:arr) #define ForBeginEnd(x,c) for(__typeof(c.begin()) x=c.begin();x!=c.end();x++) #define All(a) (a.begin()),(a.end()) #define Zeros(a) memset(a,0,sizeof(a)) #define Minus(a) memset(a,0xff,sizeof(a)) #define PI 3.14159265 #define EPS (1e-10) #define EPS_eq(a,b) (abs((a)-(b)) < EPS) #pragma GCC diagnostic ignored "-Wconversion" //#define int long long #define INF 1000*1000 int dxy[] = {0, 1, 0, -1, 0}; typedef pair<int, int> P; void pp_int(int x){ printf("%d\n", x); }; int i,j,k; ll M = 100000009; //------------------------------------------------- void init() { ios::sync_with_stdio(false); } map<ll, ll> fact(ll n){ map<ll, ll> mp_fact; ll a = 2; while (n > 1) { while (n % a == 0) { mp_fact[a]++; n /= a; } a++; } return mp_fact; } signed main() { init(); int q;cin>>q; while(q--){ ll seed, N,K,B; vector<ll> xn; cin>>seed>>N>>K>>B; auto mp_fact = fact(B); xn.push_back(seed); map<int, vector<ll> > mp_set; For(i, N){ ll prev = xn.back(); ll next = 1 + (prev * prev + prev * 12345) % M; xn.push_back(next); } For(i, xn.size()){ for(auto it : mp_fact) { ll factor = it.first; ll cnt = 0; ll t = xn[i]; while(t % factor == 0) { t /= factor; cnt++; } mp_set[factor].push_back(cnt); } } ll mn = INF; // printf("seed: %lld\n", seed); // // for(auto it : mp_fact){ // printf("mp_fact[%lld] = %lld\n", it.first, it.second); // } // // For(i, xn.size()){ // printf("xn[%d] = %lld\n", i, xn[i]); // } for(auto it : mp_set) { // printf("mp_set_first: %d\n", it.first); sort(it.second.begin(), it.second.end()); ll cnt = 0; for(i = 0; i < K; i++){ cnt += it.second[i]; } ll factor = it.first; mn = min(mn, cnt / mp_fact[factor]); } printf("%lld\n", mn); } return 0; }