Submission #238713

#TimeUsernameProblemLanguageResultExecution timeMemory
238713BorbiTrener (COCI20_trener)C++14
110 / 110
1138 ms130812 KiB
#include <bits/stdc++.h> using namespace std; const int MAXK = 1505; const int MAXN = 55; int n, k; vector <string> v[MAXN]; map <string, vector<int>> str[MAXN]; void read_input() { cin >> n >> k; string s; for(int i = 0; i < n; i++) { for(int j = 0; j < k; j++) { cin >> s; v[i].push_back(s); if(i > 0) { string f = s.substr(0, i); str[i][f].push_back(j); //cout << f << "\n"; f = s.substr(1, i + 1); str[i][f].push_back(j); //cout << f << "\n"; } } } } bool sr[MAXN][MAXK][MAXK]; const int MOD = 1e9 + 7; int add(int f, int s) { f += s; if(f >= MOD) f %= MOD; return f; } int T[MAXN][MAXK]; int rec(int i, int j) { if(i == n - 1) return 1; if(T[i][j] != -1) return T[i][j]; int ans = 0; for(int z = 0; z < k; z++) { if(sr[i][j][z]) { ans = add(ans, rec(i + 1, z)); } } return T[i][j] = ans; } void solve() { for(int i = 0; i < n - 1; i++) { for(int j = 0; j < k; j++) { for(auto x : str[i + 1][v[i][j]]) { //cout << i << " " << j << " " << x << "\n"; sr[i][j][x] = true; } } } memset(T, -1, sizeof(T)); int ans = 0; for(int i = 0; i < k; i++) { ans = add(ans, rec(0, i)); } cout << ans << "\n"; } int main() { ios::sync_with_stdio(0); cin.tie(0); read_input(); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...