1 条题解
-
0
得分预处理:生成所有可能的单次投掷得分,包括: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
- 上传者