| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 259555 | cheeheng | Fishing Game (RMI19_fishing) | C++14 | 2087 ms | 5376 KiB | 
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int cnt = 0;
int recCnt = 0;
void rec(set<int> A, set<int> B, set<int> C, int mode, int numDiscarded){
    recCnt ++;
    //if(recCnt > 100){exit(0);}
    if(mode == 0 && numDiscarded == 0){return;}
    if(mode == 0){numDiscarded = 0;}
    if(A.empty() && B.empty() && C.empty()){
        cnt ++;
        return;
    }
    /*printf("rec(mode = %d, numDiscarded = %d)\n", mode, numDiscarded);
    for(int x: A){
        printf("%d ", x);
    }
    printf("\n");
    for(int x: B){
        printf("%d ", x);
    }
    printf("\n");
    for(int x: C){
        printf("%d ", x);
    }
    printf("\n");*/
    if(mode == 0){
        if(A.empty()){
            rec(A, B, C, 1, numDiscarded);
        }else{
            set<int> A2;
            for(int x: A){
                A2.insert(x);
            }
            set<int> B2;
            for(int x: B){
                B2.insert(x);
            }
            for(int x: A){
                A2.erase(x);
                if(B.find(x) != B.end()){
                    B2.erase(x);
                    rec(A2, B2, C, 1, numDiscarded+1);
                    B2.insert(x);
                }else{
                    B2.insert(x);
                    rec(A2, B2, C, 1, numDiscarded);
                    B2.erase(x);
                }
                A2.insert(x);
            }
        }
    }else if(mode == 1){
        if(B.empty()){
            rec(A, B, C, 2, numDiscarded);
        }else{
            set<int> B2;
            for(int x: B){
                B2.insert(x);
            }
            set<int> C2;
            for(int x: C){
                C2.insert(x);
            }
            for(int x: B){
                B2.erase(x);
                if(C.find(x) != C.end()){
                    C2.erase(x);
                    rec(A, B2, C2, 2, numDiscarded+1);
                    C2.insert(x);
                }else{
                    C2.insert(x);
                    rec(A, B2, C2, 2, numDiscarded);
                    C2.erase(x);
                }
                B2.insert(x);
            }
        }
    }else if(mode == 2){
        if(C.empty()){
            rec(A, B, C, 0, numDiscarded);
        }else{
            set<int> C2;
            for(int x: C){
                C2.insert(x);
            }
            set<int> A2;
            for(int x: A){
                A2.insert(x);
            }
            for(int x: C){
                C2.erase(x);
                if(A.find(x) != A.end()){
                    A2.erase(x);
                    rec(A2, B, C2, 0, numDiscarded+1);
                    A2.insert(x);
                }else{
                    A2.insert(x);
                    rec(A2, B, C2, 0, numDiscarded);
                    A2.erase(x);
                }
                C2.insert(x);
            }
        }
    }
}
int main(){
    int N, T;
    scanf("%d%d", &N, &T);
    while(T --){
        set<int> A;
        set<int> B;
        set<int> C;
        for(int i = 0; i < 2*N; i ++){
            int x;
            scanf("%d", &x);
            if(A.count(x)){
                A.erase(x);
            }else{
                A.insert(x);
            }
        }
        for(int i = 0; i < 2*N; i ++){
            int x;
            scanf("%d", &x);
            if(B.count(x)){
                B.erase(x);
            }else{
                B.insert(x);
            }
        }
        for(int i = 0; i < 2*N; i ++){
            int x;
            scanf("%d", &x);
            if(C.count(x)){
                C.erase(x);
            }else{
                C.insert(x);
            }
        }
        cnt = 0;
        rec(A, B, C, 0, 1);
        printf("%d\n", cnt);
    }
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
