답안 #259538

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
259538 2020-08-08T01:47:49 Z tqbfjotld Fishing Game (RMI19_fishing) C++14
100 / 100
328 ms 405112 KB
#include <bits/stdc++.h>
using namespace std;

long long memo[205][205][205][3][2];
const long long MOD = 1000000007LL;

long long func(int p12,int p13,int p23,int cur,bool disc){
    if (p12==0 && p13==0&&p23==0) return 1;
    if (memo[p12][p13][p23][cur][disc]!=-1) return memo[p12][p13][p23][cur][disc];
    if (cur==0){
        long long ans = 0;
        if (p12>0){
            ans += p12*func(p12-1,p13,p23,1,false);
        }
        ans %= MOD;
        if (p13>0){
            ans += p13*func(p12,p13-1,p23+1,1,disc);
        }
        ans %= MOD;
        if (p12==0 && p13==0){
            ans = func(p12,p13,p23,1,disc);
        }
        return memo[p12][p13][p23][cur][disc] = ans;
    }
    if (cur==1){
        long long ans = 0;
        if (p12>0){
            ans += p12*func(p12-1,p13+1,p23,2,disc);
        }
        ans %= MOD;
        if (p23>0){
            ans += p23*func(p12,p13,p23-1,2,false);
        }
        ans %= MOD;
        if (p12==0&&p23==0){
            ans = func(p12,p13,p23,2,disc);
        }
        return memo[p12][p13][p23][cur][disc] = ans;
    }
    if (cur==2){
        if (disc){
            long long ans = 0;
            if (p13>0){
                ans += p13*func(p12,p13-1,p23,0,true);
            }
            ans %= MOD;
            return memo[p12][p13][p23][cur][disc] = ans;
        }
        else{
            long long ans = 0;
            if (p13>0){
                ans += p13*func(p12,p13-1,p23,0,true);
            }
            ans %= MOD;
            if (p23>0){
                ans += p23*func(p12+1,p13,p23-1,0,true);
            }
            ans %= MOD;
            if (p13==0 && p23==0){
                ans = func(p12,p13,p23,0,true);
            }
            return memo[p12][p13][p23][cur][disc] = ans;
        }
    }
}

int match[305];

int main(){
    //printf("%d\n",sizeof(memo));
    memset(memo,-1,sizeof(memo));
    int n,T;
    scanf("%d%d",&n,&T);
    while (T--){
        memset(match,-1,sizeof(match));
        int c12=0,c13=0,c23=0;
        for (int x = 0; x<2*n; x++){
            int t;
            scanf("%d",&t);match[t] = 0;
        }
        for (int x = 0; x<2*n; x++){
            int t;
            scanf("%d",&t);
            if (match[t]==0){
                c12++;
            }
            match[t] = 1;
        }
        for (int x = 0; x<2*n; x++){
            int t;
            scanf("%d",&t);
            if (match[t]==0){
                c13++;
            }
            else if (match[t]==1){
                c23++;
            }
            match[t] = 2;
        }
        //printf("nums %d %d %d\n",c12,c13,c23);
        printf("%lld\n",func(c12,c13,c23,0,true));
    }
}

Compilation message

fishing.cpp: In function 'long long int func(int, int, int, int, bool)':
fishing.cpp:65:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
fishing.cpp: In function 'int main()':
fishing.cpp:73:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&n,&T);
     ~~~~~^~~~~~~~~~~~~~
fishing.cpp:79:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d",&t);match[t] = 0;
             ~~~~~^~~~~~~~~
fishing.cpp:83:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d",&t);
             ~~~~~^~~~~~~~~
fishing.cpp:91:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d",&t);
             ~~~~~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 198 ms 404984 KB Output is correct
2 Correct 203 ms 404976 KB Output is correct
3 Correct 198 ms 404984 KB Output is correct
4 Correct 200 ms 404856 KB Output is correct
5 Correct 215 ms 404984 KB Output is correct
6 Correct 228 ms 404984 KB Output is correct
7 Correct 244 ms 404984 KB Output is correct
8 Correct 263 ms 404984 KB Output is correct
9 Correct 292 ms 404988 KB Output is correct
10 Correct 328 ms 405112 KB Output is correct