이번 라운드 B번 윷놀이 풀다가 멘붕 일으켰습니다 ㅠ..ㅠ Chaos.PP 이 문제 풀다가 계속 오답이 나와서 멘붕 일으켰습니다 ㅜ..ㅜ 누가 좀 왜 틀렸는지 알려주세용 훌.. 아래 코드는 문제에 나와있는대로 시뮬레이션 돌리고 결과 비교한 것입니다. #include <stdio.h> #include <map> #include <iostream> #include <string> #include <vector> using namespace std; vector < vector< int > > G; map<string, int> TABLE; map<int, int> path; void init() { TABLE["Do"] = 1; TABLE["Gae"] = 2; TABLE["Gul"] = 3; TABLE["Yut"] = 4; TABLE["Mo"] = 5; G.resize(30); for (int i=0; i<19; i++) G[i].push_back(i+1); for (int i=20; i<24; i++) G[i].push_back(i+1); for (int i=25; i<28; i++) G[i].push_back(i+1); G[0].push_back(29); G[5].push_back(20); G[10].push_back(25); G[22].push_back(27); G[24].push_back(15); G[28].push_back(0); G[19].push_back(0); path[5] = -1; path[10] = -1; path[22] = -1; } int main() { FILE *fp = fopen("B-small-attempt1.in", "r"); FILE *fout = fopen("output.txt", "w"); init(); int T; fscanf(fp, "%d", &T); for (int w=0; w<T; w++) { int U, N, A, B; fscanf(fp, "%d %d %d %d", &U, &N, &A, &B); int turn = 0; bool state[2] = {false, false}; int cur[2] = {29, 29}; for (int i=0; i<N; i++) { char temp[10]; fscanf(fp, "%s", temp); int res = TABLE[temp]; if (cur[turn] == 29) cur[turn] = 0; if (cur[turn] == 0 && state[turn] == true) { //game end cur[turn] = 29; break; } state[turn] = true; if (path.find(cur[turn]) != path.end()) { cur[turn] = G[cur[turn]][1]; res--; } else { cur[turn] = G[cur[turn]][0]; res--; } for (int k=1; k<=res; k++) { if (cur[turn] == 0 && state[turn] == true) { //game end cur[turn] = 29; break; } cur[turn] = G[cur[turn]][0]; } if (cur[turn] == 29) break; if (cur[0] == cur[1]) { if (turn == 0) { cur[1] = 29; state[1] = false; } else { cur[0] = 29; state[0] = false; } } else if (strcmp(temp, "Yut") == 0 || strcmp(temp, "Mo") == 0) { } else { if (turn == 0) turn = 1; else turn = 0; } } char temp[1000]; fgets(temp, 1000, fp); int last[2]; if (A == 0) last[0] = 29; else fscanf(fp, "%d", &last[0]); if (B == 0) last[1] = 29; else fscanf(fp, "%d", &last[1]); if (temp[0] != '\n') { fprintf(fout, "Case #%d: NO\n", w+1); continue; } if (cur[0] == last[0] && cur[1] == last[1]) fprintf(fout, "Case #%d: YES\n", w+1); else fprintf(fout, "Case #%d: NO\n", w+1); } return 0; } 12년 전
4개의 댓글이 있습니다. Pekaz 저도 멘붕 .. 아 .. 그거때문에 시간 다 잡아먹고 C번 읽고 풀던 도중에 대회가 끝나버렸으여 ㅠㅠ... 저도 제 코드를 더 읽고 생각해보고 싶기 때문에 님 코드는 안읽지 않았습니다 > <ㅋ 12년 전 link hyunhwan 그나저나 markdown 문법에 맞게 글을 작성하셨는데, 구문 강조 기능이 깨지는 것처럼 보이네요. 이상합니다. 12년 전 link Being code lang = 'c++' 이라 된 것을 code lang="c++" 으로 고쳤습니다. 표준 XML에 가깝게 씁시다. :) 12년 전 link hyunhwan 대회 끝나고 저도 한번 구현해봤는데 저랑 비슷한 곳에서 틀리신거 같습니다. 아마 문제에서 22번 좌표에 대한 처리가 문제인거 같은데요, 저의 경우에 막혔던 데이터는 다음과 같습니다. 1 1 16 1 0 Gae Do Yut Gae Do Gae Gul Do Do Do Do Do Do Do Gae Gul 2 답이 YES가 나와야 하는데, Chaos.PP 님의 것에서는 NO가 나오는 것으로 확인됩니다. 12년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
Chaos.PP
이 문제 풀다가 계속 오답이 나와서 멘붕 일으켰습니다 ㅜ..ㅜ
누가 좀 왜 틀렸는지 알려주세용 훌..
아래 코드는 문제에 나와있는대로 시뮬레이션 돌리고 결과 비교한 것입니다.
12년 전