/*
#pragma GCC optimize("O2")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx,avx2,sse,sse2,fma")
⣿⣿⣿⡷⠊⡢⡹⣦⡑⢂⢕⢂⢕⢂⢕⢂⠕⠔⠌⠝⠛⠶⠶⢶⣦⣄⢂⢕⢂⢕
⣿⣿⠏⣠⣾⣦⡐⢌⢿⣷⣦⣅⡑⠕⠡⠐⢿⠿⣛⠟⠛⠛⠛⠛⠡⢷⡈⢂⢕⢂
⠟⣡⣾⣿⣿⣿⣿⣦⣑⠝⢿⣿⣿⣿⣿⣿⡵⢁⣤⣶⣶⣿⢿⢿⢿⡟⢻⣤⢑⢂
⣾⣿⣿⡿⢟⣛⣻⣿⣿⣿⣦⣬⣙⣻⣿⣿⣷⣿⣿⢟⢝⢕⢕⢕⢕⢽⣿⣿⣷⣔
⣿⣿⠵⠚⠉⢀⣀⣀⣈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣗⢕⢕⢕⢕⢕⢕⣽⣿⣿⣿⣿
⢷⣂⣠⣴⣾⡿⡿⡻⡻⣿⣿⣴⣿⣿⣿⣿⣿⣿⣷⣵⣵⣵⣷⣿⣿⣿⣿⣿⣿⡿
⢌⠻⣿⡿⡫⡪⡪⡪⡪⣺⣿⣿⣿⣿⣿⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃
⠣⡁⠹⡪⡪⡪⡪⣪⣾⣿⣿⣿⣿⠋⠐⢉⢍⢄⢌⠻⣿⣿⣿⣿⣿⣿⣿⣿⠏⠈
⡣⡘⢄⠙⣾⣾⣾⣿⣿⣿⣿⣿⣿⡀⢐⢕⢕⢕⢕⢕⡘⣿⣿⣿⣿⣿⣿⠏⠠⠈
⠌⢊⢂⢣⠹⣿⣿⣿⣿⣿⣿⣿⣿⣧⢐⢕⢕⢕⢕⢕⢅⣿⣿⣿⣿⡿⢋⢜⠠⠈
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int , int> pii;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int maxn = 2020;
const ll mod = 1e9+7;
const ld PI = acos((ld)-1);
#define pb push_back
#define endl '\n'
#define dokme(x) cout << x , exit(0)
#define migmig ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define ms(x , y) memset(x , y , sizeof x)
ll pw(ll a, ll b, ll md = mod){ll res = 1;while(b){if(b&1){res=(a*res)%md;}a=(a*a)%md;b>>=1;}return(res);}
int n , k;
map < string , int > cnt;
int dp[maxn] , pd[maxn];
ll fact[maxn] , inv[maxn];
int C(int r , int n){
if(r > n)return(0);
return((fact[n] * inv[r])%mod * inv[n - r])%mod;
}
int32_t main(){
migmig;
cin >> n >> k;
fact[0] = inv[0] = 1;
for(int i = 1 ; i < maxn ; i ++)
fact[i] = (fact[i - 1] * i)%mod , inv[i] = pw(fact[i] , mod - 2);
for(int i = 1 ; i <= n ; i ++){
string s;
cin >> s;
sort(s.begin() , s.end());
cnt[s]++;
}
dp[0] = 1;
for(auto u : cnt){
int v = u.second;
for(int i = 0 ; i < maxn ; i ++)pd[i] = dp[i];
for(int i = 1 ; i <= v ; i ++){
int c = C(2, i);
for(int j = c ; j < maxn ; j ++){
pd[j] = (pd[j] + (dp[j - c] * 1LL * C(i , v))%mod)%mod;
}
}
for(int i = 0 ; i < maxn ; i ++)dp[i] = pd[i];
}
cout << dp[k];
return(0);
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
2 ms |
320 KB |
Output is correct |
3 |
Correct |
1 ms |
324 KB |
Output is correct |
4 |
Correct |
1 ms |
332 KB |
Output is correct |
5 |
Correct |
1 ms |
332 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
26 ms |
332 KB |
Output is correct |
2 |
Correct |
32 ms |
332 KB |
Output is correct |
3 |
Correct |
38 ms |
452 KB |
Output is correct |
4 |
Correct |
46 ms |
340 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
2 ms |
320 KB |
Output is correct |
3 |
Correct |
1 ms |
324 KB |
Output is correct |
4 |
Correct |
1 ms |
332 KB |
Output is correct |
5 |
Correct |
1 ms |
332 KB |
Output is correct |
6 |
Correct |
26 ms |
332 KB |
Output is correct |
7 |
Correct |
32 ms |
332 KB |
Output is correct |
8 |
Correct |
38 ms |
452 KB |
Output is correct |
9 |
Correct |
46 ms |
340 KB |
Output is correct |
10 |
Correct |
15 ms |
332 KB |
Output is correct |
11 |
Correct |
14 ms |
376 KB |
Output is correct |
12 |
Correct |
21 ms |
380 KB |
Output is correct |
13 |
Correct |
22 ms |
332 KB |
Output is correct |
14 |
Correct |
35 ms |
332 KB |
Output is correct |
15 |
Correct |
32 ms |
364 KB |
Output is correct |
16 |
Correct |
52 ms |
460 KB |
Output is correct |
17 |
Correct |
39 ms |
332 KB |
Output is correct |
18 |
Correct |
45 ms |
332 KB |
Output is correct |