[editorial] YUTAR Local 2009 - C. Quod

  • User Avatar
    Toivoa

    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>
    

    17년 전
1개의 댓글이 있습니다.
  • User Avatar
    VOCList

    파닥파닥


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