답안 #1079179

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1079179 2024-08-28T11:44:29 Z Andrey Selling RNA Strands (JOI16_selling_rna) C++14
35 / 100
968 ms 1048576 KB
#include<bits/stdc++.h>
using namespace std;

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

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) {
        if(!no) {
            return;
        }
        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 <= 2000000; 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] << "\n";
    }
    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:59:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |     if(d == s.size()) {
      |        ~~^~~~~~~~~~~
selling_rna.cpp: In function 'void dfs(int, int)':
selling_rna.cpp:80: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]
   80 |         for(int i = 1; i < wut.size(); i++) {
      |                        ~~^~~~~~~~~~~~
selling_rna.cpp:89:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 |     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 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Correct 358 ms 618832 KB Output is correct
2 Correct 373 ms 618712 KB Output is correct
3 Correct 429 ms 618836 KB Output is correct
4 Correct 393 ms 618836 KB Output is correct
5 Correct 391 ms 618832 KB Output is correct
6 Correct 393 ms 618780 KB Output is correct
7 Correct 382 ms 618832 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 768 ms 853464 KB Output is correct
2 Correct 787 ms 854892 KB Output is correct
3 Correct 968 ms 866456 KB Output is correct
4 Correct 958 ms 858008 KB Output is correct
5 Runtime error 856 ms 1048576 KB Execution killed with signal 9
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 468 ms 620492 KB Output is correct
2 Correct 475 ms 621420 KB Output is correct
3 Correct 519 ms 620940 KB Output is correct
4 Correct 414 ms 620052 KB Output is correct
5 Correct 476 ms 621140 KB Output is correct
6 Correct 473 ms 621008 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 358 ms 618832 KB Output is correct
2 Correct 373 ms 618712 KB Output is correct
3 Correct 429 ms 618836 KB Output is correct
4 Correct 393 ms 618836 KB Output is correct
5 Correct 391 ms 618832 KB Output is correct
6 Correct 393 ms 618780 KB Output is correct
7 Correct 382 ms 618832 KB Output is correct
8 Correct 768 ms 853464 KB Output is correct
9 Correct 787 ms 854892 KB Output is correct
10 Correct 968 ms 866456 KB Output is correct
11 Correct 958 ms 858008 KB Output is correct
12 Runtime error 856 ms 1048576 KB Execution killed with signal 9
13 Halted 0 ms 0 KB -