Submission #447905

#TimeUsernameProblemLanguageResultExecution timeMemory
447905JasiekstrzAnagramistica (COCI21_anagramistica)C++17
110 / 110
30 ms37704 KiB
#include<bits/stdc++.h> #define fi first #define se second using namespace std; const int N=2e3; const int MOD=1e9+7; map<string,int> cnt; int t[N+10]; long long ch[N+10][N+10]; long long dp[N+10][N+10]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,k; cin>>n>>k; for(int i=1;i<=n;i++) { string s; cin>>s; sort(s.begin(),s.end()); cnt[s]++; } ch[0][0]=1; for(int i=1;i<=n;i++) { ch[i][0]=1; for(int j=1;j<=n;j++) ch[i][j]=(ch[i-1][j-1]+ch[i-1][j])%MOD; } n=0; for(auto &v:cnt) t[++n]=v.se; dp[0][0]=1; for(int i=1;i<=n;i++) { for(int j=0;j<=k;j++) { for(int l=0;l<=t[i] && ch[l][2]<=j;l++) dp[i][j]=(dp[i][j]+dp[i-1][j-ch[l][2]]*ch[t[i]][l])%MOD; } } cout<<dp[n][k]<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...