Submission #680020

#TimeUsernameProblemLanguageResultExecution timeMemory
680020Shadii_usfAnagramistica (COCI21_anagramistica)C++14
110 / 110
29 ms32040 KiB
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e3 + 10, mod = 1e9 + 7;
long long  dp[maxn][maxn] , f[maxn] , invf[maxn]  , anss;
long long power(int a , int b){
    if(b == 0){
        return 1;
    }
    anss = power(a , b/2);
    anss *= anss;
    anss %= mod;
    if(b & 1){
        anss *= a;
        anss %= mod;
    }
    return anss;
}
long long c(int n , int k){
    if(k > n){
        return 0;
    }
    return (((f[n] * invf[k]) % mod) * invf[n - k]) % mod;
}
int main(){
    long long n , k , cnt = 0 , sizee;
    string a[maxn];
    bool mark[maxn] , markk[maxn];
    vector <int> v;
    cin >> n >> k;
    for(int i=1 ; i<=n ; i++){
        cin >> a[i];
        sort(a[i].begin() , a[i].end());
    }
    for(int i=0 ; i<maxn ; i++){
        mark[i] = 0;
        for(int j=0 ; j<maxn ; j++){
            dp[i][j] = 0;
        }
    }
    for(int i=1 ; i<=n ; i++){
        if(!mark[i]){
            for(int j = 1 ; j<=n ; j++){
                if(a[i] == a[j] && !mark[j]){
                    mark[j] = true;
                    cnt++;
                }
            }
            v.push_back(cnt);
            cnt = 0;
        }
    }
    f[0] = invf[0] = 1;
    for(int i=1 ; i<maxn ; i++){
        f[i] = f[i-1] * i;
        f[i] %= mod;
        invf[i] = power(f[i] , mod - 2);
    }
    sizee = v.size();
    dp[0][0] = 1;
    for(int i=1 ; i<=sizee ; i++){
        for(int j=0 ; j<=k ; j++){
            for(int m = 0 ; m <= v[i - 1] ; m++){
                if(c(m , 2) <= j){
                    dp[i][j] = (dp[i][j] + ((dp[i - 1][j - c(m , 2)] * c(v[i-1] , m)) % mod)) % mod;
                    dp[i][j] %= mod;
                }
            }
        }
    }
    sizee = v.size();
    cout << dp[sizee][k];
}

Compilation message (stderr)

anagramistica.cpp: In function 'int main()':
anagramistica.cpp:27:23: warning: unused variable 'markk' [-Wunused-variable]
   27 |     bool mark[maxn] , markk[maxn];
      |                       ^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...