我的Code:
#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f,maxn2=1e9,mod=1e9+7,N=25;
const double pai=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713;
#define mem(a,b) memset(a,b,sizeof(a))
priority_queue<int,vector<int>,greater<int> >pq;
map<string,vector<int> >mp;
vector<int>v,ve;
map<string,vector<int> >::iterator it1;
int n,m,k,x;
string s,s1;
map<string,int>vis;
map<string,int>::iterator it;
ll ans,dp[110][110];
void solve()
{
mem(dp,0);
x=v.size();
dp[0][0]=1;
for(int i=1;i<=x;i++)
{
dp[i][0]=1;
for(int j=1;j<=i;j++) dp[i][j]=(dp[i-1][j-1]*v[i-1]+dp[i-1][j])%mod;
}
ans+=dp[x][m];
ans%=mod;
}
signed main(int argc,char **argv)
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++)
{
cin >> s;
vis.clear();
for(int j=0;j+k<=s.size();j++)
{
s1=s.substr(j,k);
vis[s1]++;
}
for(it=vis.begin();it!=vis.end();i++t)
{
s=it->first;
ve=mp[s];
ve.push_back(it->second);
mp[s]=ve;
}
}
for(it1=mp.begin();it1!=mp.end();i++t1)
{
v=it1->second;
if(v.size()<m)continue;
solve();
}
return 0;
}
请求大佬帮忙看看