http://wizard.ae.krakow.pl/~jb/Quod/ - 웹상에서 Quod 게임을 해볼 수 있는 곳입니다.
Quod 게임 설명을 하느라 문제 설명은 장황하지만 결국 빨강 혹은 파랑으로 이루어지는 정사각형을 찾는 것이 문제이고, 판의 크기가 고정되어 있기 때문에 많은 분들이 쉽게 풀 것이라 생각했는데, 예상보다 정답률이 낮았습니다.
judge의 솔루션은 게임판에 있는 빨강/파랑 조각들의 좌표를 기억해놓고, 그 중 두개를 선택해서 나머지 두 점의 좌표에 같은 색의 조각들이 있는지 판별하는 식으로 풀었습니다.
~~~ cpp
#include
#include
using namespace std;
char table[12][12];
int blues, reds;
pair blue[121], red[121];
bool proc(pair* tbl, int N, char c)
{
for (int i = 0; i < N; ++i)
{
for (int j = i + 1; j < N; ++j)
{
int dx = tbl[j].first - tbl[i].first;
int dy = tbl[j].second - tbl[i].second;
int x3 = tbl[i].first - dy;
int y3 = tbl[i].second + dx;
int x4 = x3 + dx;
int y4 = y3 + dy;
if (x3 < 0 || x3 >= 11 || y3 < 0 || y3 >= 11) continue;
if (x4 < 0 || x4 >= 11 || y4 < 0 || y4 >= 11) continue;
if (table[x3][y3] == c && table[x4][y4] == c) return true;
}
}
return false;
}
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
blues = reds = 0;
for (int i = 0; i < 11; ++i)
{
scanf("%s", table[i]);
for (int j = 0; j < 11; ++j)
{
if (table[i][j] == 'R')
red[reds++] = make_pair(i, j);
else if (table[i][j] == 'B')
blue[blues++] = make_pair(i, j);
}
}
if (proc(blue, blues, 'B'))
printf("Blue\n");
else if (proc(red, reds, 'R'))
printf("Red\n");
else
printf("No squares\n");
}
}
<div>[이 글은 과거 홈페이지에서 이전된 글입니다. <a href="http://algospot.andromeda-express.com/zbxe/editorial/59548">원문보기</a>]</div>
Toivoa
http://wizard.ae.krakow.pl/~jb/Quod/ - 웹상에서 Quod 게임을 해볼 수 있는 곳입니다.
Quod 게임 설명을 하느라 문제 설명은 장황하지만 결국 빨강 혹은 파랑으로 이루어지는 정사각형을 찾는 것이 문제이고, 판의 크기가 고정되어 있기 때문에 많은 분들이 쉽게 풀 것이라 생각했는데, 예상보다 정답률이 낮았습니다.
judge의 솔루션은 게임판에 있는 빨강/파랑 조각들의 좌표를 기억해놓고, 그 중 두개를 선택해서 나머지 두 점의 좌표에 같은 색의 조각들이 있는지 판별하는 식으로 풀었습니다.
~~~ cpp
#include blue[121], red[121];* tbl, int N, char c)
#include
using namespace std;
char table[12][12];
int blues, reds;
pair
bool proc(pair
{
for (int i = 0; i < N; ++i)
{
for (int j = i + 1; j < N; ++j)
{
int dx = tbl[j].first - tbl[i].first;
int dy = tbl[j].second - tbl[i].second;
int x3 = tbl[i].first - dy;
int y3 = tbl[i].second + dx;
int x4 = x3 + dx;
int y4 = y3 + dy;
if (x3 < 0 || x3 >= 11 || y3 < 0 || y3 >= 11) continue;
if (x4 < 0 || x4 >= 11 || y4 < 0 || y4 >= 11) continue;
if (table[x3][y3] == c && table[x4][y4] == c) return true;
}
}
return false;
}
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
blues = reds = 0;
for (int i = 0; i < 11; ++i)
{
scanf("%s", table[i]);
for (int j = 0; j < 11; ++j)
{
if (table[i][j] == 'R')
red[reds++] = make_pair(i, j);
else if (table[i][j] == 'B')
blue[blues++] = make_pair(i, j);
}
}
if (proc(blue, blues, 'B'))
printf("Blue\n");
else if (proc(red, reds, 'R'))
printf("Red\n");
else
printf("No squares\n");
}
}
17년 전