제출 #1331853

#제출 시각아이디문제언어결과실행 시간메모리
1331853ahmetlbktd4Anagramistica (COCI21_anagramistica)C++20
10 / 110
7 ms15944 KiB
#include "bits/stdc++.h"
#define ff first
#define ss second
#define ll long long
using namespace std;

const int N = 2e3+3;
const int mod = 1e9+7;

int f[N],in[N];
int dp[N][N];
vector <int> a;
int n,k,m;

int gos(ll a,ll b){
    return (a+b)%mod;
}

int kop(ll a,ll b){
    return a*b%mod;
}

int pw(ll a,ll b){
    if (!b)
    return 1;
    if (b&1)
    return kop(a,pw(a,b-1));
    else return pw(kop(a,a),b/2);
}

int bol(ll a,ll b){
    return kop(a,pw(b,mod-2));
}

int C(ll n,ll k){
    return bol(f[n],kop(f[k],f[n-k]));
}

int coz(int m,int k){
    int &h = dp[m][k];
    if (h == -1){
        if (!m){
            if (!k)
            h = 1;
            else h = 0;
        }
        else {
            h = 0;
            for (int i = 0;i <= a[m-1];i++){
                if (i*(i-1)/2 > k)
                break;
                h = gos(h,kop(C(a[m-1],i),coz(m-1,k-i*(i-1)/2)));
            } 
        }
    }
    return h;
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    for (int i = 0;i < N;i++){
        fill(dp[i],dp[i]+N,-1);
    }
    f[0] = 1;
    for (int i = 1;i < N;i++){
        f[i] = (f[i-1]*i)%mod;
    }
    in[N-1] = pw(f[N-1],mod-2);
    for (int i = N-2;i >= 0;i--){
        in[i] = (in[i+1]*(i+1))%mod;
    }
    cin >> n >> k;
    map <string,int> mp; 
    for (int i = 0;i < n;i++){
        string s;
        cin >> s;
        sort(s.begin(),s.end());
        mp[s]++;
    }
    m = 0;
    for (auto i : mp){
        a.push_back(i.ss);
        m++;
    }
    // dp[0][0] = 1;
    // for (int i = 1;i <= m;i++){
    //     for (int j = 0;j <= k;j++){
    //         for (int h = 0;h <= a[i-1];h++){
    //             if (h*(h-1)/2 > j)
    //             break;
    //             dp[i][j] = (dp[i][j] + C(a[i-1],h)*dp[i-1][j-h*(h-1)/2])%mod;
    //         }
    //     }
    // }
    cout << coz(m,k) << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...