1 条题解

  • 0
    @ 2026-5-5 16:43:41
    #include<bits/stdc++.h>
    #define v(x,y) (n/((1<<(x))*((y)?3:1)))
    #define int long long
    using namespace std;
    const int N=1e6+5,mod=1e9+7;
    int n,m,f[21][2];
    signed main(){
    	scanf("%lld",&n);m=log2(n);
    	f[m][0]=1;if((1<<(m-1))*3<=n)f[m-1][1]=1;
    	for(int i=2;i<=n;i++)for(int j=0;j<=m;j++)
    		f[j][0]=(f[j][0]*(v(j,0)-i+1)+f[j+1][0]*(v(j,0)-v(j+1,0))+f[j][1]*(v(j,0)-v(j,1)))%mod,
    		f[j][1]=(f[j][1]*(v(j,1)-i+1)+f[j+1][1]*(v(j,1)-v(j+1,1)))%mod;
    	printf("%lld\n",f[0][0]);
    	return 0;
    }
    
    • 1

    信息

    ID
    6862
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者