結果
問題 | No.1330 Multiply or Divide |
ユーザー | re_re0101 |
提出日時 | 2021-03-20 16:40:16 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 5,186 bytes |
コンパイル時間 | 1,774 ms |
コンパイル使用メモリ | 179,952 KB |
実行使用メモリ | 9,536 KB |
最終ジャッジ日時 | 2024-11-21 05:04:12 |
合計ジャッジ時間 | 4,634 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | WA | - |
testcase_01 | AC | 27 ms
9,536 KB |
testcase_02 | WA | - |
testcase_03 | AC | 2 ms
6,820 KB |
testcase_04 | AC | 2 ms
6,816 KB |
testcase_05 | AC | 2 ms
6,816 KB |
testcase_06 | AC | 23 ms
9,392 KB |
testcase_07 | WA | - |
testcase_08 | AC | 37 ms
9,504 KB |
testcase_09 | AC | 41 ms
9,464 KB |
testcase_10 | AC | 36 ms
9,536 KB |
testcase_11 | AC | 35 ms
9,460 KB |
testcase_12 | AC | 38 ms
9,448 KB |
testcase_13 | AC | 2 ms
6,820 KB |
testcase_14 | WA | - |
testcase_15 | WA | - |
testcase_16 | AC | 2 ms
6,820 KB |
testcase_17 | WA | - |
testcase_18 | AC | 31 ms
9,532 KB |
testcase_19 | AC | 31 ms
9,448 KB |
testcase_20 | AC | 30 ms
9,480 KB |
testcase_21 | AC | 31 ms
9,504 KB |
testcase_22 | AC | 31 ms
9,460 KB |
testcase_23 | AC | 35 ms
9,380 KB |
testcase_24 | AC | 2 ms
6,816 KB |
testcase_25 | AC | 2 ms
6,816 KB |
testcase_26 | AC | 2 ms
6,820 KB |
testcase_27 | AC | 2 ms
6,816 KB |
testcase_28 | AC | 2 ms
6,820 KB |
testcase_29 | AC | 2 ms
6,820 KB |
testcase_30 | AC | 2 ms
6,816 KB |
testcase_31 | AC | 2 ms
6,816 KB |
testcase_32 | AC | 2 ms
6,820 KB |
testcase_33 | AC | 2 ms
6,816 KB |
testcase_34 | AC | 23 ms
7,912 KB |
testcase_35 | AC | 8 ms
6,816 KB |
testcase_36 | AC | 22 ms
7,296 KB |
testcase_37 | AC | 19 ms
6,912 KB |
testcase_38 | AC | 13 ms
6,820 KB |
testcase_39 | AC | 10 ms
6,820 KB |
testcase_40 | AC | 11 ms
6,820 KB |
testcase_41 | AC | 6 ms
6,820 KB |
testcase_42 | AC | 18 ms
6,820 KB |
testcase_43 | AC | 21 ms
7,168 KB |
testcase_44 | WA | - |
testcase_45 | WA | - |
ソースコード
#ifndef ONLINE_JUDGE #define _GLIBCXX_DEBUG #endif #include<bits/stdc++.h> using namespace std; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) #define bit(n,k) (((ll)n>>(ll)k)&1) /*nのk bit目*/ #define pb push_back #define pf push_front #define FI first #define SE second #define eb emplace_back #define endl '\n' #define SZ(x) ((ll)(x).size()) #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() #define PI 3.14159265359 const double eps = 1e-12; const long long INF= 1e+18+1; typedef long long ll; typedef vector<ll> vl; typedef vector<vector<ll> >vvl; typedef vector<vector<vector<ll> > >vvvl; typedef vector<vector<vector<vector<ll> > > >vvvvl; typedef vector<vector<vector<vector<vector<ll> > > > >vvvvvl; typedef pair<ll,ll> P; typedef tuple<ll,ll,ll> T; typedef struct Point_Coordinates { ll x, y; } point; template<class T> using minpq=priority_queue<T,vector<T>,greater<T>>; const ll MOD=1000000007LL; //ll MOD=1000000007LL; // const ll MOD=998244353LL; //const ll MOD=1777777777LL; //const ll MAX_V=114514LL; //const ll MAX = 500010LL; const ll mod=MOD; string abc="abcdefghijklmnopqrstuvwxyz"; string ABC="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; vl dx={0,0,1,-1,1,1,-1,-1}; vl dy={1,-1,0,0,-1,1,-1,1}; template<class T>bool chmax(T &a,const T &b){if(a<b){a=b;return true;}return false;} template<class T>bool chmin(T &a,const T &b){if(b<a){a=b;return true;}return false;} struct IOSetup{ IOSetup(){ cin.tie(0); ios::sync_with_stdio(0); cout<<fixed<<setprecision(12); } } iosetup; template<typename T> ostream &operator<<(ostream &os,const vector<T>&v){ for(int i=0;i<(int)v.size();i++) os<<v[i]<<(i+1==(int)v.size()?"":" "); return os; } template<typename T> istream &operator>>(istream &is,vector<T>&v){ for(T &x:v)is>>x; return is; } // 2^127 = 170141183460469231731687303715884105728 ~ 10^38 using int128=__int128; ostream &operator<<(ostream &os,const __int128 n){ if(n==0){ os<<0; return os; } __int128 num=n; bool neg=false; if(num<0)neg=true,num=-num; string res=""; while(num>0){ res.push_back('0'+num%10); num/=10; } if(neg) res.push_back('-'); reverse(begin(res),end(res)); os<<res; return os; } istream &operator>>(istream &is,__int128 &n){ string s; is>>s; int idx=0; bool neg=false; if(s[0]=='-')neg=true,idx++; n=0; for(;idx<(int)s.size();idx++){ n=10*n+s[idx]-'0'; } if(neg) n=-n; return is; } __int128 abs128(__int128 x){ return x<0?-x:x; } __int128 gcd128(__int128 a,__int128 b){ if(a==0) return b; if(b==0) return a; return b>0?gcd128(b,a%b):a; } namespace fastprime{ int128 pow_mod(int128 a,int128 n,int128 m){ int128 ret=1; while(n){ if(n&1)ret=ret*a%m; a=a*a%m; n>>=1; } return ret; } bool miller_rabin(int128 n){ if(n<=1) return false; if(n==2) return true; if(n%2==0) return false; int128 d=n-1,s=0; while(!(d&1))d>>=1,s++;// n-1=2^s*d for(int128 a:{2,3,5,7,11,13,17,19,23,29,31,37}){ if(n<=a) break; int128 y=pow_mod(a,d,n);// y=a^d (mod n) int128 t; for(t=d;t<n-1 and y!=1 and y!=n-1;t<<=1) y=y*y%n; if(y!=n-1 and t%2==0) return false; } return true; } int128 pollard_rho_single(int128 n){ auto f=[&](int128 x){return (x*x+1)%n;}; if(miller_rabin(n)) return n; if(!(n&1)) return 2; int128 a=0; while(true){ a++; int128 x=a; int128 y=f(x); while(true){ int128 g=gcd128(y-x+n,n); if(g==0 or g==n) break; if(g!=1) return g; x=f(x); y=f(f(y)); } } } vector<int128> pollard_rho(int128 n){ if(n==1) return {}; int128 x=pollard_rho_single(n); if(x==n) return {x}; vector<int128> l=pollard_rho(x); vector<int128> r=pollard_rho(n/x); l.insert(l.end(),r.begin(),r.end()); return l; } } #define ll int128 #define int int128 signed main(){ ll n,m,p; cin>>n>>m>>p; vector<ll> a(n); rep(i,n)cin>>a[i]; //a[i]=p^k*qのときコストk+1回で×qできる //1<=k<=log(max{A})なのでk<=[9*log(2,10)]=29より //コストは1~30 //全てのqが1のとき例外として"-1" vector<P>vec(n); bool one=true; rep(i,n){ ll cnt=0; ll now=a[i]; while(now%p==0)now/=p,cnt++; vec[i]={cnt+1,now}; if(now!=1)one=false; // cout<<cnt+1<<" "<<now<<endl; } if(one){ cout<<-1<<endl; return 0; } ll t=1000; vector<ll> dp(t,-1); dp[0]=1; for(int i=1;i<t;i++){ rep(j,n){ if(vec[j].second==1)continue; if(i>=vec[j].first)chmax(dp[i],dp[i-vec[j].first]*vec[j].second); } // cout<<dp[i]<<" "; if(dp[i]>m){ cout<<i<<endl; return 0; } } }