Submission #1079174

# Submission time Handle Problem Language Result Execution time Memory
1079174 2024-08-28T11:41:38 Z Andrey Selling RNA Strands (JOI16_selling_rna) C++14
35 / 100
396 ms 269204 KB
#include<bits/stdc++.h>
using namespace std;

vector<vector<int>> trie[100001];
vector<int> sb[100001];
vector<int> yo[100001];
vector<int> idk[100001];
vector<int> lol[100001];
vector<string> haha(100001);
vector<pair<string,string>> query(100001);
vector<int> ans(100001);

int wow(char a) {
    if(a == 'A') {
        return 0;
    }
    if(a == 'G') {
        return 1;
    }
    if(a == 'C') {
        return 2;
    }
    if(a == 'U') {
        return 3;
    }
}

void ins(int p, int x, string& s, int d, int br, bool no) {
    if(d >= s.size()) {
        if(br != -1) {
            if(no) {
                yo[x].push_back(br);
            }
            else {
                idk[x].push_back(br);
            }
        }
        sb[p][x]++;
        return;
    }
    int c = wow(s[d]);
    if(trie[p][x][c] == -1) {
        trie[p][x][c] = trie[p].size();
        trie[p].push_back({-1,-1,-1,-1});
        sb[p].push_back(0);
    }
    sb[p][x]-=sb[p][trie[p][x][c]];
    ins(p,trie[p][x][c],s,d+1,br,no);
    sb[p][x]+=sb[p][trie[p][x][c]];
}

int calc(int p, int x, int d, string& s) {
    if(x == -1) {
        return 0;
    }
    if(d == s.size()) {
        return sb[p][x];
    }
    int c = wow(s[d]);
    return calc(p,trie[p][x][c],d+1,s);
}

void dfs(int x, int d) {
    vector<pair<int,int>> wut(0);
    for(int i = 0; i < 4; i++) {
        if(trie[0][x][i] != -1) {
            dfs(trie[0][x][i],d+1);
            wut.push_back({trie[trie[0][x][i]].size(),trie[0][x][i]});
        }
    }
    sort(wut.begin(),wut.end());
    reverse(wut.begin(),wut.end());
    if(wut.size() > 0) {
        swap(trie[x],trie[wut[0].second]);
        swap(lol[x],lol[wut[0].second]);
        swap(sb[x],sb[wut[0].second]);
        for(int i = 1; i < wut.size(); i++) {
            for(int v: lol[wut[i].second]) {
                reverse(haha[v].begin(),haha[v].end());
                ins(x,0,haha[v],0,-1,1);
                reverse(haha[v].begin(),haha[v].end());
                lol[x].push_back(v);
            }
        }
    }
    for(int i = 0; i < yo[x].size(); i++) {
        int v = yo[x][i];
        reverse(haha[v].begin(),haha[v].end());
        ins(x,0,haha[v],0,-1,1);
        reverse(haha[v].begin(),haha[v].end());
        lol[x].push_back(yo[x][i]);
    }
    for(int v: idk[x]) {
        ans[v] = calc(x,0,0,query[v].second);
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n,q;
    cin >> n >> q;
    string s,a,b;
    for(int i = 0; i <= 100000; i++) {
        trie[i].push_back({-1,-1,-1,-1});
        sb[i].push_back(0);
    }
    trie[0].push_back({-1,-1,-1,-1});
    sb[0].push_back(0);
    for(int i = 0; i < n; i++) {
        cin >> s;
        haha[i] = s;
        ins(0,1,s,0,i,1);
    }
    for(int i = 0; i < q; i++) {
        cin >> a >> b;
        reverse(b.begin(),b.end());
        query[i] = {a,b};
        ins(0,1,a,0,i,0);
    }
    dfs(1,0);
    for(int i = 0; i < q; i++) {
        cout << ans[i] << endl;
    }
    return 0;
}

Compilation message

selling_rna.cpp: In function 'void ins(int, int, std::string&, int, int, bool)':
selling_rna.cpp:29:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     if(d >= s.size()) {
      |        ~~^~~~~~~~~~~
selling_rna.cpp: In function 'int calc(int, int, int, std::string&)':
selling_rna.cpp:56:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |     if(d == s.size()) {
      |        ~~^~~~~~~~~~~
selling_rna.cpp: In function 'void dfs(int, int)':
selling_rna.cpp:77:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |         for(int i = 1; i < wut.size(); i++) {
      |                        ~~^~~~~~~~~~~~
selling_rna.cpp:86:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |     for(int i = 0; i < yo[x].size(); i++) {
      |                    ~~^~~~~~~~~~~~~~
selling_rna.cpp: In function 'int wow(char)':
selling_rna.cpp:26:1: warning: control reaches end of non-void function [-Wreturn-type]
   26 | }
      | ^
# Verdict Execution time Memory Grader output
1 Correct 20 ms 31324 KB Output is correct
2 Correct 21 ms 31364 KB Output is correct
3 Correct 20 ms 31216 KB Output is correct
4 Correct 20 ms 31320 KB Output is correct
5 Correct 21 ms 31324 KB Output is correct
6 Correct 22 ms 31212 KB Output is correct
7 Correct 24 ms 31388 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 377 ms 267800 KB Output is correct
2 Correct 396 ms 269204 KB Output is correct
3 Runtime error 83 ms 101096 KB Execution killed with signal 11
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 85 ms 32808 KB Output is correct
2 Correct 65 ms 33696 KB Output is correct
3 Correct 78 ms 33468 KB Output is correct
4 Correct 65 ms 32592 KB Output is correct
5 Correct 75 ms 33628 KB Output is correct
6 Correct 77 ms 33488 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 20 ms 31324 KB Output is correct
2 Correct 21 ms 31364 KB Output is correct
3 Correct 20 ms 31216 KB Output is correct
4 Correct 20 ms 31320 KB Output is correct
5 Correct 21 ms 31324 KB Output is correct
6 Correct 22 ms 31212 KB Output is correct
7 Correct 24 ms 31388 KB Output is correct
8 Correct 377 ms 267800 KB Output is correct
9 Correct 396 ms 269204 KB Output is correct
10 Runtime error 83 ms 101096 KB Execution killed with signal 11
11 Halted 0 ms 0 KB -