16986 인싸들의 가위바위보
문제 링크
- 풀이
문제가 매우 길지만 차근차근 읽어 나가며 문제의 요구조건을 빠뜨리지 않도록 주의하며 문제를 풀어야 한다. 특히 변수의 더하거나 뺄 시점에 주의한다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
using namespace std;
int N, K;
int rel[10][10], win[3];
int gh[20], mh[20], ghi, mhi;
int used[10];
int game(int p1, int p2)
{
if (win[0] == K)
return 1;
if (win[1] == K || win[2] == K )
return 0;
int ret = 0;
if (p1 == 1)
{
if (rel[gh[ghi]][mh[mhi]] == 2)
{
ghi++;
mhi++;
win[1] += 1;
ret = game(0, 1);
win[1] -= 1;
}
else
{
ghi++;
mhi++;
win[2] += 1;
ret = game(0, 2);
win[2] -= 1;
}
ghi--;
mhi--;
return ret;
}
for (int i = 1; i <= N; i++)
{
if (!used[i])
{
used[i] = 1;
if (p2 == 1)
{
if (rel[i][gh[ghi]] == 2)
{
ghi++;
win[0] += 1;
ret = game(0, 2);
win[0] -= 1;
}
else
{
ghi++;
win[1] += 1;
ret = game(1, 2);
win[1] -= 1;
}
ghi--;
}
else
{
if (rel[i][mh[mhi]] == 2)
{
mhi++;
win[0] += 1;
ret = game(0, 1);
win[0] -= 1;
}
else
{
mhi++;
win[2] += 1;
ret = game(1, 2);
win[2] -= 1;
}
mhi--;
}
used[i] = 0;
if (ret)
return ret;
}
}
return 0;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> N >> K;
for (int r = 1; r <= N; r++)
for (int c = 1; c <= N; c++)
cin >> rel[r][c];
for (int i = 0; i < 20; i++)
cin >> gh[i];
for (int i = 0; i < 20; i++)
cin >> mh[i];
cout << game(0, 1) << "\n";
}
댓글남기기