Submission #477797

#TimeUsernameProblemLanguageResultExecution timeMemory
477797mychecksedadTrener (COCI20_trener)C++17
110 / 110
824 ms40904 KiB
/* Author : Mychecksdead */ #include<bits/stdc++.h> using namespace std; typedef long long int ll; typedef long double ld; #define MOD (1000000000+7) #define MOD1 (998244353) #define PI 3.1415926535 #define pb push_back #define setp() cout << setprecision(15) #define all(x) x.begin(), x.end() const int N = 1e6+100, M = 1e5+10, F = 2147483646, K = 20; ll fp(ll a, ll b){ ll res = 1; while(b){ if(b & 1) (res *= a) %= MOD; (a*=a)%=MOD; b>>=1; } return res; } int n, k; ll dp[55][1600], h[55][1600][55]; string s[55][1600]; void solve(){ cin >> n >> k; for(int i = 1; i <= n; ++i) for(int j = 1; j <= k; ++j) cin >> s[i][j]; for(int i = 1; i <= n; ++i){ for(int j = 1; j <= k; ++j){ h[i][j][0] = 0; ll e = 1; for(int c = 1; c <= i; ++c, (e*=31)%=MOD){ h[i][j][c] = (h[i][j][c - 1] + e * (s[i][j][c - 1] - 'a')) % MOD; } } } for(int i = 0; i <= n; i++) for(int j = 0; j <= k; ++j) dp[i][j] = 0; for(int j = 1; j <= k; ++j) dp[1][j] = 1; ll f = fp(31 * 1LL, MOD-2); for(int i = 2; i <= n; ++i){ for(int j = 1; j <= k; ++j){ for(int back = 1; back <= k; ++back){ ll l = h[i][j][i - 1]; ll r = ((((h[i][j][i] - h[i][j][1]) * f)%MOD)+MOD)%MOD; if(l == h[i - 1][back][i - 1] || r == h[i - 1][back][i - 1]){ (dp[i][j] += dp[i - 1][back]) %= MOD; } } } } ll sum = 0; for(int i = 1; i <= k; ++i) (sum += dp[n][i]) %= MOD; cout << sum; } int main(){ cin.tie(0); ios::sync_with_stdio(0); int T = 1, aa; // cin >> T;aa=T; while(T--){ // cout << "Case #" << aa-T << ": "; solve(); } return 0; }

Compilation message (stderr)

trener.cpp: In function 'int main()':
trener.cpp:62:16: warning: unused variable 'aa' [-Wunused-variable]
   62 |     int T = 1, aa;
      |                ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...