제출 #1248447

#제출 시각아이디문제언어결과실행 시간메모리
1248447dophuAnagramistica (COCI21_anagramistica)C++20
110 / 110
24 ms29252 KiB
#include <bits/stdc++.h> #define ll long long #define pb push_back using namespace std; const ll N=2e3+7; const ll mod=1e9+7; ll dp[N][N],n,k,siz=0; ll bc[N][N],ap[N],st[N]; string a[N]; vector <string> cmress; map <ll,ll> mp; ll sq(ll x) { return x*x; } ll poww(ll a,ll b,ll mod) { if (b==0) return 1; if (a==1) return b%mod; if (b % 2==0) { return sq(poww(a,b/2,mod)%mod)%mod; } else { return ((a%mod)*(sq(poww(a,b/2,mod)%mod)%mod)%mod)%mod; } return 0; } void pre() { for (ll i=1;i<=2002;i++) { bc[i][0]=bc[i][i]=1; bc[i][1]=i; } for (ll i=2;i<=2002;i++) { for (ll j=2;j<=2002;j++) { if (i > j) { bc[i][j]=(bc[i-1][j]%mod+bc[i-1][j-1]%mod)%mod; } } } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); pre(); cin>>n>>k; for (ll i=1;i<=n;i++) { cin>>a[i]; sort(a[i].begin(),a[i].end()); cmress.pb(a[i]); } sort(cmress.begin(),cmress.end()); cmress.resize(unique(cmress.begin(),cmress.end())-cmress.begin()); for (ll i=1;i<=n;i++) { st[i]=lower_bound(cmress.begin(),cmress.end(),a[i])-cmress.begin(); st[i]++; siz=max(siz,st[i]); ap[st[i]]++; } sort(st+1,st+n+1); // for (ll i=1;i<=n;i++) { // cout<<st[i]<<' '; // } // cout<<endl; // for (ll i=1;i<=n;i++) { // cout<<st[i]<<' '<<ap[st[i]]<<endl; // } // cout<<endl; // for (ll i=0;i<=k;i++) dp[0][i]=1; // for (ll i=1;i<=siz;i++) { // cout<<i<<' '<<ap[i]<<endl; // } ll rem=1e9+7; // cout<<siz<<endl; dp[0][0]=1; // for (ll i=1;i<=siz;i++) dp[i][0]=poww(2,i-1,rem); // cout<<bc[6][2]<<endl; // cout<<bc[6][1]<<endl; // for (ll i=1;i<=k;i++) { for (ll j=1;j<=siz;j++) { for (ll i=0;i<=k;i++) { for (ll rr=0;rr<=ap[j];rr++) { ll calc=(rr*(rr-1))/2; if (i >= calc) { dp[j][i]=(dp[j][i]%mod+(dp[j-1][i-calc]*bc[ap[j]][rr]%mod))%mod; } } } } // for (ll i=1;i<=siz;i++) cout<<dp[i][k]<<" "; // cout<<endl; cout<<dp[siz][k]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...