2 条题解

  • 0
    @ 2025-10-8 16:52:49
    #include <bits/stdc++.h> 
    using namespace std; 
    typedef long long LL; 
    const int mod = 1e9;
    struct node
    {
        LL a[110]; int len;
        node() { memset(a, 0, sizeof(a)); len = 1; }
    };
    
    node operator* (node n1, int x)
    {
        node no; no.len = n1.len;
        for (int i = 1; i <= no.len; i++) no.a[i] = n1.a[i] * x;
        for (int i = 1; i <= no.len; i++) no.a[i + 1] += no.a[i] / mod, no.a[i] %= mod;
        int i = no.len;
        while (no.a[i + 1] > 0)
        {
            i++, no.a[i + 1] += no.a[i] / mod, no.a[i] %= mod;
        }
        no.len = i;
        return no;
    }
    int ksm(int a, int b)  
    {
        int res = 1; a = a % 1000;
        for (; b; b >>= 1, a = a * a % 1000) if (b & 1) res = res * a % 1000;
        return res;
    }  
    
    int a[110], b[110];
    node C(int n, int m)  
    {
        node no;
        if (m > n) return no;
        for (int i = 1; i <= m; i++) a[i] = n - i + 1, b[i] = i;
        for (int i = 1; i <= m; i++)
        {
            for (int j = 1; j <= m; j++)
            {
                if (b[i] == 1) break;
                int d = __gcd(b[i], a[j]);
                b[i] /= d;
                a[j] /= d;
            }
        }
        no.a[1] = 1;
        for (int i = 1; i <= m; i++) no = no * a[i];
        return no;  
    }  
    
    int main()  
    {
        int k, x; cin >> k >> x;
        x = ksm(x, x);
        node ans = C(x - 1, k - 1); // 插板法
        printf("%lld", ans.a[ans.len]);
        for (int i = ans.len - 1; i >= 1; i--) printf("%09lld", ans.a[i]);
        printf("\n");
        return 0;  
    }
    
    • 0
      @ 2025-10-8 16:52:39
      #include<bits/stdc++.h> 
      using namespace std; 
      typedef long long LL; 
      const int mod=1e9;
      struct node
      {
          LL a[110];int len;
          node(){memset(a,0,sizeof(a));len=1;}
      };
      
      node operator* (node n1,int x)
      {
          node no;no.len=n1.len;
          for(int i=1;i<=no.len;i++)no.a[i]=n1.a[i]*x;
          for(int i=1;i<=no.len;i++)no.a[i+1]+=no.a[i]/mod,no.a[i]%=mod;
          int i=no.len;
          while(no.a[i+1]>0)
          {
              i++,no.a[i+1]+=no.a[i]/mod,no.a[i]%=mod;
          }
          no.len=i;
          return no;
      }
      int ksm(int a,int b)  
      {
      	int res=1;a=a%1000;
      	for(;b;b>>=1,a=a*a%1000)if(b&1)res=res*a%1000;
      	return res;
      }  
      
      int a[110],b[110];
      node C(int n,int m)  
      {
      	node no;
      	if(m>n)return no;
      	for(int i=1;i<=m;i++)a[i]=n-i+1,b[i]=i;
      	for(int i=1;i<=m;i++)
      	{
      		for(int j=1;j<=m;j++)
      		{
      			if(b[i]==1) break;
      			int d= __gcd(b[i],a[j]);
      			b[i]/=d;
      			a[j]/=d;
      		}
      	}
      	no.a[1]=1;
      	for(int i=1;i<=m;i++)no=no*a[i];
      	return no;  
      }  
      
      int main()  
      {
      	int k,x;cin>>k>>x;
      	x=ksm(x,x);
      	node ans=C(x-1,k-1);//插板法
      	printf("%lld",ans.a[ans.len]);
      	for(int i=ans.len-1;i>=1;i--)printf("%09lld",ans.a[i]);
      	printf("\n");
      	return 0;  
      }  
      • 1

      信息

      ID
      617
      时间
      1000ms
      内存
      128MiB
      难度
      8
      标签
      递交数
      148
      已通过
      27
      上传者