标签:back 字符串 variables test 包含 ack 另一个 添加 turn
有一个游戏包含三个变量,分别表示为\(A\),\(B\)和\(C\)。随着游戏的进行,将会有\(N\)个事件要求您做出选择。这些选项中的每一个都由一个字符串Si?表示。如果Si是\(A\) || \(B\),你必须在\(A\)或\(B\)上加\(1\),然后从另一个上减去1;如果Si是\(A\)|| \(C\),你必须在\(A\)或\(C\)上加1,然后从另一个上减去1;如果Si是\(B\) || \(C\) ,你必须在\(B\)或\(C\)上加1,然后从上减去1。每次选择后,\(A\)、\(B\)和\(C\)都不应为负。确定在这种情况下是否可以做出\(N\)个选择。如果可能的话,也给一个这样的方式来做选择。
\(N\) \(A\) \(B\) \(C\)
S1 S2
:
SN
输出如果在这种情况下可以做出\(N\)个选择,则打印“是”;否则,打印“否”。
另外,在前一种情况下,展示一种这样的方法来在随后的N行中进行选择。第(\(i\)+1)行应该包含变量(\(A\)、\(B\)或\(C\))的名称,您在第\(i\)-\(th\)选项中向其添加1。
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, a[3];
cin >> n >> a[0] >> a[1] >> a[2];
vector<string> q(n);
for (auto &e : q)
cin >> e;
vector<char> result;
for (int i = 0; i < n; ++i)
{
string s = q[i];
int x = s[0] - ‘A‘;
int y = s[1] - ‘A‘;
if (!a[x] && !a[y])
{
result.clear();
break;
}
if (a[x] > a[y])
{
--a[x];
++a[y];
result.push_back(s[1]);
continue;
}
if (a[x] < a[y])
{
++a[x];
--a[y];
result.push_back(s[0]);
continue;
}
if (i + 1 < n && q[i + 1].find(s[0]) != string::npos)
{
++a[x];
--a[y];
result.push_back(s[0]);
continue;
}
--a[x];
++a[y];
result.push_back(s[1]);
}
if (result.empty())
{
cout << "No\n";
return 0;
}
cout << "Yes\n";
for (char c : result)
cout << c << ‘\n‘;
}
标签:back 字符串 variables test 包含 ack 另一个 添加 turn
原文地址:https://www.cnblogs.com/rex-blog/p/12832913.html