题解:P12022 [USACO25OPEN] Hoof Paper Scissors Minus One
Bessie 和 Elsie 在玩一个变种的石头剪刀布游戏。她们各自出两个手势,然后选择其中一个进行对决。Bessie 需要确保无论 Elsie 选择哪一个手势,自己都能选择一个手势击败对方。题目要求计算 Bessie 有多少种手势组合满足这一条件。
首先读取手势胜负关系表,构建每个手势能击败的所有手势的集合。
对于每个查询,找到能同时击败 Elsie 两个手势的集合
计算属于
Code
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3001;
bitset<MAXN> b[MAXN];
int main() {
int N, M;
cin >> N >> M;
for (int i = 1; i <= N; ++i) {
string s;
cin >> s;
for (int j = 1; j <= i; ++j) {
char c = s[j-1];
if (c == 'W') {
b[j].set(i); // i输给j
} else if (c == 'L') {
b[i].set(j); // j输给i
}
}
}
while (M--) {
int s1, s2;
cin >> s1 >> s2;
auto ans = b[s1] & b[s2];
int cnt = ans.count();
cout << cnt * (2LL * N - cnt) << '\n';
}
return 0;
}