专栏文章

题解:P2911 [USACO08OCT] Bovine Bones G

P2911题解参与者 4已保存评论 4

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
4 条
当前快照
1 份
快照标识符
@mip5r582
此快照首次捕获于
2025/12/03 06:36
3 个月前
此快照最后确认于
2025/12/03 06:36
3 个月前
查看原文
简单的枚举题

题目内容

Bessie买了三个骰子分别有 S1S_1S2S_2S3S_3 个面(2S120,2S220,2S3402 \le S_1 \le 20,2 \le S_2 \le 20,2 \le S_3 \le 40)。她不断掷骰子,要找出三个骰子的和出现得最频繁的那个(如果有多个和出现的频率相同,则输出其中最小的和)。

分析

枚举三个骰子所有可能的组合的和,统计每个和出现的次数。然后找出出现次数最多的和,如果有多个一样的就选最小的那个。这里我用了一个 hehe 数组记录每个和出现的次数,最后遍历 hehe 数组,打擂找到出现次数最多的和。

代码

CPP
#include<bits/stdc++.h>
using namespace std;
int s1,s2,s3,he[16005],maxn=-INT_MAX;
int maxx=-INT_MAX,h;
int main(){
	cin>>s1>>s2>>s3;
	for(int i=1;i<=s1;i++){
		for(int j=1;j<=s2;j++){
			for(int k=1;k<=s3;k++){//标记所有和出现次数。 
				he[i+j+k]++;
				maxn=max(maxn,i+k+j);
			}
		}
	}
	
	for(int i=1;i<=maxn;i++){//遍历所有可能的和,找到出现次数最多的最小的和。 
		if(he[i]>maxx){
			maxx=he[i];
			h=i;//用 h 记录最小的和。
		}
	}
	cout<<h;
	return 0;
}

评论

4 条评论,欢迎与作者交流。

正在加载评论...