답안 #959688

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
959688 2024-04-08T18:50:34 Z Cadoc Trener (COCI20_trener) C++14
110 / 110
443 ms 5736 KB
/*
    Author: Cadocx
    Codeforces: https://codeforces.com/profile/Kadoc
    VNOJ: oj.vnoi.info/user/Cadoc
*/

#include <bits/stdc++.h>
using namespace std;

// input/output
#define fastIO ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define el cout << '\n'
#define execute cerr << "Time elapsed: " << (1.0 * clock() / CLOCKS_PER_SEC) << "s"
// #pragma GCC optimize("O2")
// #pragma GCC optimize("Ofast")
// #pragma GCC target("avx,avx2,fma")
//data type
#define ll long long
#define ull unsigned long long
#define pii pair<int, int>
#define pll pair<ll, ll>
#define piv pair<int, vector<int>>
#define vi vector<int>
#define vl vector<ll>
#define vc vector<char>
//STL
#define sz(x) (int)(x).size()
#define for1(i,l,r) for(auto i = l; i <= r; i++)
#define for2(i,r,l) for(auto i = r; i >= l; i--)
#define forin(i,a) for(auto i : a)
#define pb push_back
#define eb emplace_back
#define pf push_front
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
//bitmask
#define bitcnt(n) __builtin_popcount(n)
#define mask(i) (1 << (i))
#define bit(n, i) (((n) >> (i)) & 1)
#define set_on(n, i) ((n) | mask(i))
#define set_off(n, i) ((n) & ~mask(i))
//constant
#define N 3000005
#define MOD 1000000007
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define base 31
#define Kadoc 0

int n, k;
ll f[55][1505], h[55][1505][3], pw[N];

void solve(){
    cin >> n >> k;
    pw[0] = 1;
    for(int i=1; i<=n; ++i) pw[i] = pw[i-1] * base % MOD;
    for(int i=1; i<=n; ++i) for(int j=1; j<=k; ++j){
        string s; cin >> s;
        ll cur = 0, pre = 0;
        for(char c:s){
            h[i][j][1] = pre;
            cur = (pre*base % MOD + c-'a'+1) % MOD;
            pre = cur;
        }
        h[i][j][0] = cur;
        if(i==1) continue;
        pre = cur = 0;
        for(int v=1; v<i; ++v) cur = (pre*base % MOD + s[v]-'a'+1) % MOD, pre = cur;
        h[i][j][2] = cur;
    }

    for(int i=1; i<=k; ++i) f[1][i] = 1;
    for(int i=2; i<=n; ++i){
        for(int j=1; j<=k; ++j){
            for(int v=1; v<=k; ++v) if(h[i-1][v][0] == h[i][j][1] || h[i-1][v][0] == h[i][j][2]){
                (f[i][j] += f[i-1][v]) %= MOD;
            }
        }
    }

    ll ans = 0;
    for(int i=1; i<=k; ++i) (ans += f[n][i]) %= MOD;
    cout << ans;
}

int main(){
    #define NAME "TASK"
    if(fopen(NAME".inp", "r")){
        freopen(NAME".inp", "r", stdin);
        freopen(NAME".out", "w", stdout);
    }

    fastIO;
    
    if(Kadoc){
        int tc; cin >> tc;
        while(tc--){
            solve();
        }
    } else solve();
}

Compilation message

trener.cpp: In function 'int main()':
trener.cpp:90:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   90 |         freopen(NAME".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
trener.cpp:91:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   91 |         freopen(NAME".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2396 KB Output is correct
2 Correct 1 ms 2392 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2908 KB Output is correct
2 Correct 4 ms 2908 KB Output is correct
3 Correct 3 ms 2908 KB Output is correct
4 Correct 5 ms 2904 KB Output is correct
5 Correct 3 ms 2904 KB Output is correct
6 Correct 4 ms 2972 KB Output is correct
7 Correct 5 ms 3160 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2396 KB Output is correct
2 Correct 1 ms 2392 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2512 KB Output is correct
5 Correct 4 ms 2908 KB Output is correct
6 Correct 4 ms 2908 KB Output is correct
7 Correct 3 ms 2908 KB Output is correct
8 Correct 5 ms 2904 KB Output is correct
9 Correct 3 ms 2904 KB Output is correct
10 Correct 4 ms 2972 KB Output is correct
11 Correct 5 ms 3160 KB Output is correct
12 Correct 114 ms 4852 KB Output is correct
13 Correct 120 ms 5048 KB Output is correct
14 Correct 107 ms 4688 KB Output is correct
15 Correct 107 ms 4692 KB Output is correct
16 Correct 442 ms 5736 KB Output is correct
17 Correct 120 ms 5432 KB Output is correct
18 Correct 121 ms 5488 KB Output is correct
19 Correct 120 ms 5468 KB Output is correct
20 Correct 120 ms 5456 KB Output is correct
21 Correct 124 ms 5456 KB Output is correct
22 Correct 443 ms 5312 KB Output is correct