문제

링크

풀이

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
 
inline vector<int> init(int a, int b, int c, int d) {
	int e = 10 - a - b - c - d;
	vector<int> ret;
	while (a--) ret.push_back(1);
	while (b--) ret.push_back(2);
	while (c--) ret.push_back(3);
	while (d--) ret.push_back(4);
	while (e--) ret.push_back(5);
	return ret;
}
 
inline bool check(const vector<int> &p, const vector<int> &q) {
	for (int i=2; i<10; i++) {
		if (q[i-2] == q[i-1] && q[i-1] == q[i]) return false;
	}
	int cnt = 0;
	for (int i=0; i<10; i++) cnt += p[i] == q[i];
	return cnt >= 5;
}
 
void solve(void) {
	vector<int> p(10);
	for (int i=0; i<10; i++) cin >> p[i];
 
	int ans = 0;
	for (int a=0; a<=10; a++) for (int b=0; a+b<=10; b++) for (int c=0; a+b+c<=10; c++) for (int d=0; a+b+c+d<=10; d++) {
		vector<int> q = init(a, b, c, d);
		do {
			if (check(p, q)) ans++;
		} while (next_permutation(q.begin(), q.end()));
	}
	cout << ans;
}
 
int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
 
	solve();
	return 0;
}