[editorial] YUTAR Local 2009 - C. Quod

  • Toivoa
    Toivoa

    http://wizard.ae.krakow.pl/~jb/Quod/ - 웹상에서 Quod 게임을 해볼 수 있는 곳입니다.
    Quod 게임 설명을 하느라 문제 설명은 장황하지만 결국 빨강 혹은 파랑으로 이루어지는 정사각형을 찾는 것이 문제이고, 판의 크기가 고정되어 있기 때문에 많은 분들이 쉽게 풀 것이라 생각했는데, 예상보다 정답률이 낮았습니다.
    judge의 솔루션은 게임판에 있는 빨강/파랑 조각들의 좌표를 기억해놓고, 그 중 두개를 선택해서 나머지 두 점의 좌표에 같은 색의 조각들이 있는지 판별하는 식으로 풀었습니다.

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    char table[12][12];
    int blues, reds;
    pair<int, int> blue[121], red[121];
    bool proc(pair<int, int>* 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");
            }
    }
    
    [이 글은 과거 홈페이지에서 이전된 글입니다. 원문보기]

    14년 전
1개의 댓글이 있습니다.
  • VOCList
    VOCList

    파닥파닥


    14년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.