Submission #1340127

#TimeUsernameProblemLanguageResultExecution timeMemory
1340127iulimorariuTrener (COCI20_trener)C++20
0 / 110
4 ms836 KiB
#include <algorithm>
#include <iostream>
#include <fstream>
#include <climits>
#include <vector>
#include <stack>
#include <cmath>
#include <map>
// #include <bits/std++.h>
#define in  cin
#define out cout

using namespace std;
const int MOD = 1e9 + 7;

signed main(){
    ios_base::sync_with_stdio(false);
    in.tie(NULL);

    int n, k; in >> n >> k;
    vector<string> v[n];
    int dp[n][k];

    for(int i = 0; i < n; i++){
        v[i].resize(k);
        for(int j = 0; j < k; j++) in >> v[i][j];
    }

    for(int i = 0; i < k; i++) dp[n - 1][i] = 1;
    for(int i = n - 2; i >= 0; i--){
        // fac toate subsecv si add dinamicile la un map sau cv
        map<string, int> mp;
        for(int j = 0; j < k; j++){
            // pt secv v[i + 1][j] osa am 2 var
            string v1 = v[i + 1][j];
            v1.pop_back();
            mp[v1] = (mp[v1] + dp[i + 1][j]) % MOD;
            string ok = v1;

            // cout << "pt " << v[i + 1][j] << " am var " << v1 << " cu ";

            v1 = v[i + 1][j];
            v1.erase(v1.begin());
            if(v1 != ok) mp[v1] = (mp[v1] + dp[i + 1][j]) % MOD;
            cout << v1 << '\n';
        }

        for(int j = 0; j < k; j++){
            dp[i][j] = mp[ v[i][j] ];
        }
    }

    // cout << "dp : \n";
    // for(int i = 0; i < n; i++){
    //     for(int j = 0; j < k; j++) cout << dp[i][j] << " ";
    //     cout << '\n';
    // }

    int s = 0;
    for(int i = 0; i < k; i++) s = (s + dp[0][i]) % MOD;
    out << s << '\n';

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...