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
AC × 40
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