Submission #931666

# Submission time Handle Problem Language Result Execution time Memory
931666 2024-02-22T08:34:25 Z Whisper Trener (COCI20_trener) C++17
55 / 110
601 ms 43092 KB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

#define int long long
#define FOR(i, a, b) for ( int i = a ; i <= b ; i++ )
#define FORD(i, a, b) for (int i = b; i >= a; i --)
#define REP(i, n) for (int i = 0; i < n; ++i)
#define REPD(i, n) for (int i = n - 1; i >= 0; --i)
#define pii pair<int , int>
#define Lg(x) 31 - __builtin_clz(x)

#define MASK(i) (1LL << (i))
#define BIT(x, i) (((x) >> (i)) & 1)

constexpr ll LINF = (1ll << 60);
constexpr int INF = (1ll << 30);
constexpr int MAX = 2e3 + 5;
constexpr int Mod = 1e9 + 7;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

void setupIO(){
    #define name "Whisper"
    //Phu Trong from Nguyen Tat Thanh High School for gifted student
    srand(time(NULL));
    cin.tie(nullptr)->sync_with_stdio(false); cout.tie(nullptr);
    //freopen(name".inp", "r", stdin);
    //freopen(name".out", "w", stdout);
    cout << fixed << setprecision(10);
}

template <class X, class Y>
    bool minimize(X &x, const Y &y){
        X eps = 1e-9;
        if (x > y + eps) {x = y; return 1;}
        return 0;
    }

template <class X, class Y>
    bool maximize(X &x, const Y &y){
        X eps = 1e-9;
        if (x + eps < y) {x = y; return 1;}
        return 0;
    }
int nGroup, nMember;
string s[51][MAX];
int Hash[51][MAX][51], Pow[MAX];

int getHash(int i, int j, int l, int r){
    return (Hash[i][j][r] - Pow[r - l + 1] * Hash[i][j][l - 1] % Mod + Mod) % Mod;
}

int dp[MAX][MAX];

void add(int &x, int y){
    x += y;
    if (x >= Mod) x -= Mod;
}
void sub(int &x, int y){
    x -= y;
    if (x < 0) x %= Mod;
}

#define Base 41
void Whisper(){
    cin >> nGroup >> nMember;
    FOR(i, 1, nGroup) FOR(j, 1, nMember) cin >> s[i][j];
    Pow[0] = 1;
    for (int i = 1; i <= nGroup; ++i) Pow[i] = Pow[i - 1] * Base % Mod;

    FOR(i, 1, nGroup) FOR(j, 1, nMember){
        for (int v = 1; v <= (int)s[i][j].size(); ++v){
            Hash[i][j][v] = (Hash[i][j][v - 1] * Base + s[i][j][v - 1] - 'a' + 1) % Mod;
        }
    }
    for (int i = 1; i <= nMember; ++i) dp[1][i] = 1;
    FOR(i, 2, nGroup) FOR(cur, 1, nMember) FOR(prv, 1, nMember){
        for (int v = 0; v <= 1; ++v){
            if (getHash(i - 1, prv, 1, i - 1) == getHash(i, cur, v + 1, (i - 1) + v)){
                add(dp[i][cur], dp[i - 1][prv]);
                break;
            }
        }
    }
    int ans = 0;
    for (int i = 1; i <= nMember; ++i) add(ans, dp[nGroup][i]);
    cout << ans;
}


signed main(){
    setupIO();
    int Test = 1;
//    cin >> Test;
    for ( int i = 1 ; i <= Test ; i++ ){
        Whisper();
        if (i < Test) cout << '\n';
    }
}


# Verdict Execution time Memory Grader output
1 Correct 1 ms 5976 KB Output is correct
2 Correct 1 ms 5980 KB Output is correct
3 Correct 1 ms 6024 KB Output is correct
4 Correct 1 ms 5980 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 10588 KB Output is correct
2 Correct 7 ms 10584 KB Output is correct
3 Correct 7 ms 10588 KB Output is correct
4 Correct 6 ms 10588 KB Output is correct
5 Correct 7 ms 10588 KB Output is correct
6 Correct 7 ms 10588 KB Output is correct
7 Correct 6 ms 10588 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 5976 KB Output is correct
2 Correct 1 ms 5980 KB Output is correct
3 Correct 1 ms 6024 KB Output is correct
4 Correct 1 ms 5980 KB Output is correct
5 Correct 7 ms 10588 KB Output is correct
6 Correct 7 ms 10584 KB Output is correct
7 Correct 7 ms 10588 KB Output is correct
8 Correct 6 ms 10588 KB Output is correct
9 Correct 7 ms 10588 KB Output is correct
10 Correct 7 ms 10588 KB Output is correct
11 Correct 6 ms 10588 KB Output is correct
12 Correct 594 ms 43076 KB Output is correct
13 Correct 583 ms 42984 KB Output is correct
14 Correct 590 ms 42868 KB Output is correct
15 Correct 599 ms 43040 KB Output is correct
16 Correct 398 ms 42816 KB Output is correct
17 Correct 601 ms 42812 KB Output is correct
18 Incorrect 595 ms 43092 KB Output isn't correct
19 Halted 0 ms 0 KB -