TLE70pts求调【悬关】
查看原帖
TLE70pts求调【悬关】
723171
fqEason楼主2023/1/20 16:23

RT,调好久了,最后三个点总是T

#include<bits/stdc++.h>
#define R register
using namespace std;
const long long MOD=10000007;
long long f[101][101];
long long a[201];
int cnt;
long long n;
long long power(int a, int b){
	long long ans=1LL,now=a;
	while(b){
		if(b&1) ans*=now,ans%=MOD;
        now*=now,now%=MOD;
		b>>=1;
	}
	return ans%MOD;
}
long long dfs(int pos,int now,int need,int limit){
	if(pos<1) return now==need;
	if(~f[pos][now]&&!limit) return f[pos][now];
	int maxn=limit?a[pos]:1;
	long long res=0;
	for(int i=0;i<=maxn;i++)res+=dfs(pos-1,now+(i==1),need,limit&&i==maxn);
	if (!limit)f[pos][now]=res;
	return res;
}
long long solve(long long x) {
	while(x) a[++cnt]=x&1,x>>=1;
	long long ans=1LL;
	for(int i=1;i<=cnt;i++) {
		memset(f,-1,sizeof(f));
		ans=ans*power(i,dfs(cnt,0,i,1))%MOD;
		ans%=MOD;
	}
	return ans;
}
int main() {
	cin >> n;
	cout << solve(n);
	return 0;
}

2023/1/20 16:23
加载中...