最难题解
2025-08-28 14:41:10
发布于:广东
2阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
bool allSame(const vector<int>& coins, int target) {
for (int c : coins) {
if (c != target) return false;
}
return true;
}
vector<int> flipCoins(const vector<int>& coins, const vector<int>& indices) {
vector<int> result = coins;
for (int i : indices) {
result[i] = 1 - result[i];
}
return result;
}
int main() {
vector<int> coins(4);
for (int i = 0; i < 4; i++) {
cin >> coins[i];
}
vector<vector<int>> flipOptions = {
{1, 2, 3},
{0, 2, 3},
{0, 1, 3},
{0, 1, 2}
};
int minSteps = INT_MAX;
for (int target : {0, 1}) {
if (allSame(coins, target)) {
minSteps = 0;
break;
}
for (const auto& option : flipOptions) {
vector<int> afterFlip = flipCoins(coins, option);
if (allSame(afterFlip, target)) {
minSteps = min(minSteps, 1);
}
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
vector<int> afterFirst = flipCoins(coins, flipOptions[i]);
vector<int> afterSecond = flipCoins(afterFirst, flipOptions[j]);
if (allSame(afterSecond, target)) {
minSteps = min(minSteps, 2);
}
}
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
for (int k = 0; k < 4; k++) {
vector<int> afterFirst = flipCoins(coins, flipOptions[i]);
vector<int> afterSecond = flipCoins(afterFirst, flipOptions[j]);
vector<int> afterThird = flipCoins(afterSecond, flipOptions[k]);
if (allSame(afterThird, target)) {
minSteps = min(minSteps, 3);
}
}
}
}
}
cout << minSteps << endl;
return 0;
}
这里空空如也
有帮助,赞一个