Submission #1279510

#TimeUsernameProblemLanguageResultExecution timeMemory
1279510LmaoLmaoSelling RNA Strands (JOI16_selling_rna)C++20
100 / 100
567 ms679056 KiB
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define name "a"
using namespace std;

using ii = pair<int,int>;
using aa = array<int,3>;
const int N = 1e5+5;

string s[N];

struct TRIYEUMINHEM {
    int trie[N*20][26];
    vector<int> a[N*20];
    int timer=0;
    void add(string s,int id) {
        int u=0;
        for(char c:s) {
            int v=c-'A';
            if(!trie[u][v]) {
                trie[u][v]=++timer;
            }
            u=trie[u][v];
            a[u].push_back(id);
        }
    }
    int get(string s,int l,int r) {
        int u=0;
        for(char c:s) {
            int v=c-'A';
            if(!trie[u][v]) return 0;
            u=trie[u][v];
        }
        int x=lower_bound(a[u].begin(),a[u].end(),l)-a[u].begin();
        int y=upper_bound(a[u].begin(),a[u].end(),r)-a[u].begin();
        return y-x;
    }
    ii getlr(string s) {
        int u=0;
        for(char c:s) {
            int v=c-'A';
            if(!trie[u][v]) return {-1,-1};
            u=trie[u][v];
        }
        return {*a[u].begin(),*a[u].rbegin()};
    }
} rev,trie;

int bs(string s) {

}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n,q;
    cin >> n >> q;
    for(int i=1;i<=n;i++) {
        cin >> s[i];
    }
    sort(s+1,s+1+n);
    for(int i=1;i<=n;i++) {
        reverse(s[i].begin(),s[i].end());
        rev.add(s[i],i);
        reverse(s[i].begin(),s[i].end());
        trie.add(s[i],i);
    }
    while(q--) {
        string pre,suf;
        cin >> pre >> suf;
        reverse(suf.begin(),suf.end());
        ii res=trie.getlr(pre);
        if(res.fi==-1) cout << 0 << endl;
        else {

            cout << rev.get(suf,res.fi,res.se) << endl;
        }
    }
    return 0;
}

Compilation message (stderr)

selling_rna.cpp: In function 'long long int bs(std::string)':
selling_rna.cpp:53:1: warning: no return statement in function returning non-void [-Wreturn-type]
   53 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...