| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 259555 | cheeheng | Fishing Game (RMI19_fishing) | C++14 | 2087 ms | 5376 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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);
    }
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
