题解 P7566 「MCOI-05」饱食

读题可以发现:答案只和首字母是 MCOI 的数量有关。
那么可以分别统计首字母是 MCOI 的编号的数量,设数量分别为 \(a,b,c,d\)

  • 若分别选三个首字母是 M , C , O 的编号,由组合数学的排列的问题可以知道,数量是 \(a \times b \times c\)
  • 若分别选三个首字母是 M , C , I 的编号,由组合数学的排列的问题可以知道,数量是 \(a \times b \times d\)
  • 若分别选三个首字母是 M , O , I 的编号,由组合数学的排列的问题可以知道,数量是 \(a \times c \times d\)
  • 若分别选三个首字母是 C , O , I 的编号,由组合数学的排列的问题可以知道,数量是 \(b \times c \times d\)

最终的答案是上面三种情况的和。

代码如下:

#include <iostream>
#include <string>
typedef long long LL;
using namespace std;
string s;
LL a ,b ,c ,d ,ans; int n;
//为了防止乘法的时候爆 long long 就全部定义为 long long 了
signed main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> s;
		if (s[0] == 'M') a++;
		else if (s[0] == 'C') b++;
		else if (s[0] == 'O') c++;
		else if (s[0] == 'I') d++;
	}
	cout << a * b * c + a * b * d + a * c * d + b * c * d << endl;
	return 0;
}
posted @ 2021-05-01 22:40  recollector  阅读(180)  评论(0编辑  收藏  举报