萌新刚学OI,求助大佬看看数位dp
  • 板块学术版
  • 楼主Push_Y
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/7/30 21:30
  • 上次更新2023/11/6 21:43:52
查看原帖
萌新刚学OI,求助大佬看看数位dp
135485
Push_Y楼主2020/7/30 21:30

P4317 花神的数论题

求助大佬改错。。。

我自认为思路和小粉兔的题解类似,就是他的一维我看不明白,我用了更好理解的二维然后不知道哪出问题了。

#include <bits/stdc++.h>
#define int long long
using namespace std;

inline int gin(){
	char c=getchar();
	int s=0,f=1;
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		s=(s<<3)+(s<<1)+(c^48);
		c=getchar();
	}
	return s*f;
}

const int mod=1e7+7;
int n,f[60][60];

int qPow(int a,int b){
	int ans=1;
	int base=a%mod;
	while(b){
		if(b&1!=0)ans=(ans*base)%mod;
		base=(base*base)%mod;
		b>>=1;
	}
	return ans;
}

signed main(){
	n=gin();
	int len=0;
	while(n){
		len++;
		n>>=1;
	}
	f[0][0]=1;
	for(int i=1;i<=len;i++){
		f[i][0]=f[i-1][0];
		for(int j=1;j<=i;j++)f[i][j]=f[i-1][j]+f[i-1][j-1];
	}
	int ans=1;
	for(int i=1;i<=len;i++)ans=ans*qPow(i,f[len][i]);
	printf("%lld\n",ans);
	return 0;
}
2020/7/30 21:30
加载中...