Submission #1158540

#TimeUsernameProblemLanguageResultExecution timeMemory
1158540ReLiceSelling RNA Strands (JOI16_selling_rna)C++20
35 / 100
1596 ms17884 KiB
#include <bits/stdc++.h>
#define ll long long
#define ld double
#define pb push_back
#define pf push_front
#define ins insert
#define fr first
#define sc second
#define endl "\n"
#define ar array
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()

using namespace std;
void start(){ios_base::sync_with_stdio(NULL);cin.tie(nullptr);cout.tie(nullptr);}

const ll inf = 1e17;
const ll mod = 1e9 + 7;
const ll N = 2e5 + 8;

void solve() {
    ll i, j;

    ll n, m;
    cin>>n>>m;

    vector<vector<ll>> ans(n);

    ll pp[N];
    pp[0] = 1;
    for(i=1;i<N;i++) pp[i] = pp[i - 1] * 29 % mod;

    for(i=0;i<n;i++){
        string s;
        cin>>s;

        ans[i].resize(s.size(), 0);

        for(j=0;j<(ll)s.size();j++){
            ans[i][j] = (j ? ans[i][j - 1] : 0) * 29 + s[j] - 'A' + 1;
            ans[i][j] %= mod;
        }
    }

    for(i=0;i<m;i++){
        string p, q;
        cin>>p>>q;

        ll x = 0, y = 0;
        ll a = p.size(), b = q.size();

        for(j=0;j<a;j++){
            x = x * 29 + (p[j] - 'A' + 1);
            x %= mod;
        }

        for(j=0;j<b;j++){
            y = y * 29 + (q[j] - 'A' + 1);
            y %= mod;
        }

        ll sum = 0;

        for(j=0;j<n;j++){
            ll c = ans[j].size();
            if(c >= max(a, b)){
                if(ans[j][a - 1] == x && (ans[j][c - 1] - (c - b ? ans[j][c - b - 1] * pp[b] % mod : 0) + mod) % mod == y){
                    sum++;
                }
            }
        }

        cout<<sum<<endl;
    }
}

signed main(){
    start();

    ll t = 1;
    //cin>>t;

    while(t--) solve();
}

/*

*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...