1 条题解

  • 0
    @ 2025-5-4 14:15:13

    得分预处理:生成所有可能的单次投掷得分,包括:1 到 20 分的单倍区(20 种)。1 到 20 分的双倍区(20 种)。1 到 20 分的三倍区(20 种)。外圈 25 分(1 种)。内圈 50 分(1 种)。将这些得分存储在数组 da 中,共 63 种可能值。组合枚举:使用三重循环枚举所有可能的三次投掷组合,确保组合不重复(通过 j>=i 和 k>=j 保证)。对于每个组合,检查其得分总和是否等于目标值 n,若是则计数器加 1。

    #include <iostream>
    #include <cstdio>
    using namespace std;
    //英语     看博友分析    抄博友程序     枚举 
    int da[63];
    int main()
    {
    	da[0]=0;
    	for(int i=1;i<=20;i++)
    	{
    		da[i]=i;
    		da[i+20]=i*2;
    		da[i+40]=i*3;
    	}
    	da[61]=25;
    	da[62]=50;
    	int T;
    	cin>>T;
    	for(int o=1;o<=T;o++)
    	{
    		int n;
    		cin>>n;
    		int js=0;
    		for(int i=0;i<=62;i++)
    		{
    			for(int j=i;j<=62;j++)//抄博友程序 
    			{
    				for(int k=j;k<=62;k++)
    				{
    					if(da[i]+da[j]+da[k]==n)
    					{
    						js++;
    					}
    				}
    			}
    		}
    		printf("Scenario #%d:\n",o);
    		cout<<js<<endl<<endl;
    	}
    	return 0;
    }
    
    
    
    • 1

    信息

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