// Problem: P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1328#submit
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// User: Pannnn
#include
using namespace std;
int main() {
// 使用二维数组存储a对b猜拳各种情况下的结果
int res[5][5] = {
{0, -1, 1, 1, -1},
{1, 0, -1, 1, -1},
{-1, 1, 0, -1, 1},
{-1, -1, 1, 0, 1},
{1, 1, -1, -1, 0}
};
int n, na, nb;
cin >> n >> na >> nb;
vector a(na);
vector b(nb);
for (int i = 0; i < na; ++i) {
cin >> a[i];
}
for (int i = 0; i < nb; ++i) {
cin >> b[i];
}
int cntA = 0, cntB = 0;
for (int i = 0; i < n; ++i) {
// a[i % na]是本次a出拳,出拳序列为循环,可以用取余拿到
if (res[a[i % na]][b[i % nb]] == 1) {
++cntA;
} else if (res[a[i % na]][b[i % nb]] == -1) {
++cntB;
}
}
cout << cntA << " " << cntB << endl;
return 0;
}
/*
错误的写法:
1.
vector a(n);
for (int i = 0; i < na; ++i) { cin >> a[i]; }
可能n比na小,越界。
2.
vector a(n);
for (int i = 0; i < na && i < n; ++i) { cin >> a[i]; }
避免了越界,但n比na小,有数据还在流内,读到下一个vector中。
*/