1 条题解

  • 0
    @ 2025-5-25 22:49:58

    题意分析

    杰克叔叔有 DD独一无二的 CD,要分给 NN 个侄子。每个侄子可以分到任意数量的 CD(包括 0 张)。题目要求计算所有可能的分配方式的总数。

    由于每张 CD 都是不同的,因此分配方式需要考虑 CD 的排列组合。例如:

    • 如果 N=2N=2(侄子 A 和 B),D=2D=2(CD1 和 CD2),那么可能的分配方式有:
      • A: CD1, CD2;B: 无
      • A: CD1;B: CD2
      • A: CD2;B: CD1
      • A: 无;B: CD1, CD2
        44 种方式,即 22=42^2 = 4

    解题思路

    由于每张 CD 可以独立地分配给任何一个侄子,因此:

    • 第 1 张 CD 有 NN 种选择(给任意一个侄子)。
    • 第 2 张 CD 也有 NN 种选择(不受前一张影响)。
    • ……
    • DD 张 CD 仍然有 NN 种选择。

    因此,总分配方式数为:

    N×N××N=NDN \times N \times \dots \times N = N^D

    NNDD 次方

    算法实现

    直接计算 NDN^D 即可。由于 N10N \leq 10D25D \leq 25102510^{25} 可以用 long long 存储(在 C++ 中,pow(N, D) 或循环计算均可)。

    标程

    #include<stdio.h>
    #include<string.h>
    #define max 105
    char str[max]; 
    int b[max+10],z[max*max+10];
    int s[max*max+10];
    void mi(int b[],int z[],int k)
    {
    	int i,j;
    	memset(s,0,sizeof(s));
    	for(i=0;i<k;i++)
    		for(j=0;j<max*max;j++)
    			s[i+j]+=b[i]*z[j];
    	for(i=0;i<max*max;i++)
    	{
    		if(s[i]>=10)
    			s[i+1]+=s[i]/10;	
    		z[i]=s[i]%10;
    	}
    }
    int main()
    {
    	int i,j,k,n,m;
    	while(~scanf("%s%d",str,&n))
    	{
    		memset(z,0,sizeof(z));
    		k=strlen(str);
    		if(k==1&&str[0]=='0'&&n==0)
    			break;
    		j=0;
    		m=0;
    		if(k==2&&str[0]=='1'&&str[1]=='0')
    		{
    			printf("1");
    			for(i=1;i<=n;i++)
    				printf("0");
    			printf("\n");
    			continue;	
    		}
    		if(n==0)
    		{
    			printf("1\n");
    			continue;
    		}
    		for(i=0;i<k;i++)
    		{
    			b[j++]=str[i]-'0';
    			z[m++]=str[i]-'0';		
    		}
    		n--;
    		while(n)
    		{
    			mi(b,z,k);
    			n--;
    		}
    		for(i=max*max-1;i>=0;i--)
    		{
    			if(z[i]==0)
    				continue;
    			else
    				break;
    		}
    		
    		memset(str,0,sizeof(str));
    		for(;i>=0;i--)
    			printf("%d",z[i]);
    		printf("\n");
    	}
    	return 0;
    }
    
    • 1

    信息

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