Silver: Hoof, Paper, Scissor S
Silver: Hoof, Paper, Scissor S
P3609 USACO17JAN] Hoof, Paper, Scissor G
这个银组的话很简单,维护三个前缀和,然后枚举每一个时刻作为唯一一次变换手势的时间点就可以了。
代码:
/*
* Created by: Friedforks
* Date: 2024-11-12
*/
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> paper(n + 1), hoof(n + 1), scissor(n + 1);
char c;
for (int i = 1; i <= n; i++) {
cin >> c;
// keep track of the number of each type of move
paper[i] = paper[i - 1];
hoof[i] = hoof[i - 1];
scissor[i] = scissor[i - 1];
// update the number of each type of move
switch (c) {
case 'P':
paper[i]++;
break;
case 'H':
hoof[i]++;
break;
case 'S':
scissor[i]++;
break;
}
}
int ans = 0;
for (int i = 1; i <= n; i++) {
int win[2][3] = {
{paper[i] - paper[0], hoof[i] - hoof[0], scissor[i] - scissor[0]},
{paper[n] - paper[i], hoof[n] - hoof[i], scissor[n] - scissor[i]}};
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 3; k++) {
if (j != k) {
ans = max(ans, win[0][j] + win[1][k]);
}
}
}
}
cout << ans << endl;
return 0;
}
评论
其他文章