Submission #1193811
Source Code Expand
#include <iostream> #include <list> #include <vector> #include <map> #include <set> #include <queue> #include <stack> #include <numeric> #include <algorithm> #include <cmath> using namespace std; typedef long long lli; typedef vector<lli> vll; typedef vector<bool> vbl; typedef vector<vector<lli> > mat; typedef vector<vector<bool> > matb; typedef vector<string> vst; typedef pair<lli,lli> pll; typedef pair<double,double> pdd; const lli MOD = 1000000007; lli pow(lli a,lli n,lli mod = 1000000007){ lli ret = 1; for(;n!=0;n=n>>1){ if(n&1) ret = (ret * a) % mod; a = (a * a) % mod; } return ret; } lli invarse(lli x){ return pow(x,MOD-2); } lli factrial(lli x){ static lli dp[100001]; if(dp[x]) return dp[x]; if(x == 0) return dp[x] = 1; return dp[x] = (factrial(x-1) * x) % MOD; } lli combination(lli n,lli k){ return (((factrial(n) * invarse(factrial(k))) % MOD) * invarse(factrial(n-k))) % MOD; } lli n,m; vll d; mat dp; lli u; vll ans; vll ans_; bool f; int main(){ cin >> n >> m; if(n < 0) n = abs(n),f = true; lli i; for(i = 1;i*i < n;i++){ if(n % i == 0) d.push_back(i),d.push_back(n/i); } if(i*i == n) d.push_back(i); sort(d.begin(),d.end()); i = 0; for(lli t = 1;t < m;i++) t <<= 1; u = i+1; dp = mat(u,vll(d.size())); for(lli i = 0;i < d.size();i++) dp[0][i] = 1; for(lli i = 0;i < u-1;i++){ for(lli j = 0;j < d.size();j++){ for(lli k = 0;k < d.size();k++){ lli mul = d[j]*d[k]; lli t = lower_bound(d.begin(),d.end(),mul) - d.begin(); if(t == d.size()) break; if(d[t] == mul) dp[i+1][t] += (dp[i][j]*dp[i][k]) % MOD,dp[i+1][t] %= MOD; } } } ans = vll(d.size(),0); lli m_ = m; for(lli i = 0;m_ > 0;m_ >>= 1,i++){ if(m_ & 1){ if(ans.back() == 0){ for(lli j = 0;j < d.size();j++){ ans[j] = dp[i][j]; } continue; } ans_ = vll(d.size(),0); for(lli j = 0;j < d.size();j++){ for(lli k = 0;k < d.size();k++){ lli mul = d[j]*d[k]; lli t = lower_bound(d.begin(),d.end(),mul) - d.begin(); if(t == d.size()) break; if(d[t] == mul) ans_[t] += (ans[j]*dp[i][k]) % MOD,ans_[j] %= MOD; } } swap(ans,ans_); } } lli c = 0; for(lli i = (f ? 1 : 0);i <= m;i += 2){ c += combination(m,i); c %= MOD; } cout << ans.back()*c % MOD << endl; }
Submission Info
Submission Time | |
---|---|
Task | D - 表現の自由 ( Freedom of expression ) |
User | deoxy |
Language | C++14 (GCC 5.4.1) |
Score | 100 |
Code Size | 2744 Byte |
Status | AC |
Exec Time | 443 ms |
Memory | 2816 KB |
Judge Result
Set Name | All | ||
---|---|---|---|
Score / Max Score | 100 / 100 | ||
Status |
|
Set Name | Test Cases |
---|---|
All | 00_max.txt, 00_max2.txt, 00_max3.txt, 00_min.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 01_rnd_00.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 01_rnd_04.txt, 01_rnd_05.txt, 01_rnd_06.txt, 01_rnd_07.txt, 01_rnd_08.txt, 01_rnd_09.txt, 01_rnd_10.txt, 01_rnd_11.txt, 01_rnd_12.txt, 01_rnd_13.txt, 01_rnd_14.txt, 01_rnd_15.txt, 01_rnd_16.txt, 01_rnd_17.txt, 01_rnd_18.txt, 01_rnd_19.txt, 01_rnd_20.txt, 01_rnd_21.txt, 01_rnd_22.txt, 01_rnd_23.txt, 01_rnd_24.txt, 01_rnd_25.txt, 01_rnd_26.txt, 01_rnd_27.txt, 01_rnd_28.txt, 01_rnd_29.txt, 04_primes_01.txt, 04_primes_02.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00_max.txt | AC | 443 ms | 2816 KB |
00_max2.txt | AC | 21 ms | 2560 KB |
00_max3.txt | AC | 19 ms | 2560 KB |
00_min.txt | AC | 1 ms | 256 KB |
00_sample_01.txt | AC | 1 ms | 256 KB |
00_sample_02.txt | AC | 2 ms | 256 KB |
00_sample_03.txt | AC | 1 ms | 256 KB |
00_sample_04.txt | AC | 1 ms | 256 KB |
01_rnd_00.txt | AC | 8 ms | 1152 KB |
01_rnd_01.txt | AC | 3 ms | 512 KB |
01_rnd_02.txt | AC | 5 ms | 256 KB |
01_rnd_03.txt | AC | 8 ms | 1152 KB |
01_rnd_04.txt | AC | 7 ms | 1024 KB |
01_rnd_05.txt | AC | 9 ms | 1280 KB |
01_rnd_06.txt | AC | 4 ms | 512 KB |
01_rnd_07.txt | AC | 4 ms | 640 KB |
01_rnd_08.txt | AC | 20 ms | 2560 KB |
01_rnd_09.txt | AC | 11 ms | 1536 KB |
01_rnd_10.txt | AC | 12 ms | 1664 KB |
01_rnd_11.txt | AC | 13 ms | 1792 KB |
01_rnd_12.txt | AC | 16 ms | 2304 KB |
01_rnd_13.txt | AC | 9 ms | 1280 KB |
01_rnd_14.txt | AC | 11 ms | 1408 KB |
01_rnd_15.txt | AC | 4 ms | 640 KB |
01_rnd_16.txt | AC | 14 ms | 1920 KB |
01_rnd_17.txt | AC | 19 ms | 2560 KB |
01_rnd_18.txt | AC | 15 ms | 2048 KB |
01_rnd_19.txt | AC | 4 ms | 512 KB |
01_rnd_20.txt | AC | 10 ms | 1408 KB |
01_rnd_21.txt | AC | 10 ms | 1408 KB |
01_rnd_22.txt | AC | 5 ms | 768 KB |
01_rnd_23.txt | AC | 13 ms | 1664 KB |
01_rnd_24.txt | AC | 15 ms | 2048 KB |
01_rnd_25.txt | AC | 17 ms | 2304 KB |
01_rnd_26.txt | AC | 11 ms | 1536 KB |
01_rnd_27.txt | AC | 9 ms | 1152 KB |
01_rnd_28.txt | AC | 9 ms | 1280 KB |
01_rnd_29.txt | AC | 18 ms | 2304 KB |
04_primes_01.txt | AC | 19 ms | 2560 KB |
04_primes_02.txt | AC | 19 ms | 2560 KB |