題目
這道題只給了一部分表格,剩下的需要自己去推,我最開始以爲灰色部分屬於不存在的組合,不進行判斷。
我的做法
#include <iostream>
#include <cmath>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_SIZE = 200;
int Awin(int a, int b)
{
if (a == 0) {
switch (b) {
case 0: return 0;
case 1: return -1;
case 2: return 1;
case 3: return 1;
case 4: return -1;
}
}
else if (a == 1) {
switch (b) {
case 0: return 1;
case 1: return 0;
case 2: return -1;
case 3: return 1;
case 4: return -1;
}
}
else if (a == 2) {
switch (b) {
case 0: return -1;
case 1: return 1;
case 2: return 0;
case 3: return -1;
case 4: return 1;
}
}
else if (a == 3) {
switch (b) {
case 0: return -1;
case 1: return -1;
case 2: return 1;
case 3: return 0;
case 4: return 1;
}
}
else {
switch (b) {
case 0: return 1;
case 1: return 1;
case 2: return -1;
case 3: return -1;
case 4: return 0;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int N, NA, NB;
cin >> N >> NA >> NB;
int A[MAX_SIZE], B[MAX_SIZE];
memset(A, -1, sizeof(A));
memset(B, -1, sizeof(B));
for (int i = 0; i < NA; i++) {
cin >> A[i];
}
for (int i = 0; i < NB; i++) {
cin >> B[i];
}
int cnt_A = 0, cnt_B = 0, idx_A = 0, idx_B = 0;
for (int i = 0; i < N; i++, idx_A++, idx_B++) {
if (A[idx_A] == -1) {
idx_A = 0;
}
if (B[idx_B] == -1) {
idx_B = 0;
}
if (Awin(A[idx_A], B[idx_B]) == 1) {
cnt_A++;
}
else if (Awin(A[idx_A], B[idx_B]) == -1 ) {
cnt_B++;
}
else if (Awin(A[idx_A], B[idx_B]) == 2) {
i--;
}
}
cout << cnt_A << ' ' << cnt_B << endl;
return 0;
}
題解裏看到的簡易做法
#include <iostream>
#include <cmath>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_SIZE = 200;
const int pk[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 main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int N, NA, NB;
cin >> N >> NA >> NB;
int A[MAX_SIZE], B[MAX_SIZE];
for (int i = 0; i < NA; i++) {
cin >> A[i];
}
for (int i = 0; i < NB; i++) {
cin >> B[i];
}
int cnt_A = 0, cnt_B = 0, idx_A = 0, idx_B = 0;
for (int i = 0; i < N; i++, idx_A++, idx_B++) {
if (pk[A[idx_A % NA]][B[idx_B % NB]] == 1) {
cnt_A++;
}
else if (pk[A[idx_A % NA]][B[idx_B % NB]] == -1) {
cnt_B++;
}
}
cout << cnt_A << ' ' << cnt_B << endl;
return 0;
}