답안 #1087852

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1087852 2024-09-13T10:19:02 Z LOLOLO Selling RNA Strands (JOI16_selling_rna) C++17
35 / 100
53 ms 67152 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

#define           f     first
#define           s     second
#define           pb    push_back
#define           ep    emplace
#define           eb    emplace_back
#define           lb    lower_bound
#define           ub    upper_bound
#define       all(x)    x.begin(), x.end()
#define      rall(x)    x.rbegin(), x.rend()
#define   uniquev(v)    sort(all(v)), (v).resize(unique(all(v)) - (v).begin())
#define     mem(f,x)    memset(f , x , sizeof(f))
#define        sz(x)    (int)(x).size()
#define  __lcm(a, b)    (1ll * ((a) / __gcd((a), (b))) * (b))
#define          mxx    *max_element
#define          mnn    *min_element
#define    cntbit(x)    __builtin_popcountll(x)
#define       len(x)    (int)(x.length())

const int N = 2e5 + 100;
map <int, int> id[N];
vector <int> pos[N];

int cnt = 1;

void add(string s, int i) {
    int cur = 0;
    for (auto x : s) {
        if (id[cur][x] == 0)
            id[cur][x] = cnt++;

        cur = id[cur][x];
        pos[cur].pb(i);
    }
}

int get(string s, int l, int r) {
    int cur = 0;
    for (auto x : s) {
        if (id[cur][x] == 0)
            return 0;

        cur = id[cur][x];
    }

    int L = lower_bound(all(pos[cur]), l) - pos[cur].begin();
    int R = upper_bound(all(pos[cur]), r) - pos[cur].begin();
    return R - L;
}

void solve() {
    int n, m;
    cin >> n >> m;

    vector <string> ss;

    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        ss.pb(s);
    }

    sort(all(ss));

    for (int i = 0; i < sz(ss); i++) {
        string s = ss[i];
        reverse(all(s));
        add(s, i);
    }

    for (int i = 0; i < m; i++) {
        string a, b;
        cin >> a >> b;
        int l = lower_bound(all(ss), a) - ss.begin();
        a.back()++;
        int r = lower_bound(all(ss), a) - ss.begin() - 1;

        if (l > r) {
            cout << 0 << '\n';
            continue;
        }

        reverse(all(b));
        cout << get(b, l, r) << '\n';
    } 
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    
    int t = 1;
    //cin >> t;

    while (t--) {
        solve();
        //cout << solve() << '\n';
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 14424 KB Output is correct
2 Correct 6 ms 14448 KB Output is correct
3 Correct 6 ms 14556 KB Output is correct
4 Correct 6 ms 14428 KB Output is correct
5 Correct 6 ms 14428 KB Output is correct
6 Correct 6 ms 14428 KB Output is correct
7 Correct 7 ms 14732 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 53 ms 67152 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 17364 KB Output is correct
2 Correct 25 ms 16600 KB Output is correct
3 Correct 28 ms 17112 KB Output is correct
4 Correct 30 ms 17112 KB Output is correct
5 Correct 25 ms 16588 KB Output is correct
6 Correct 31 ms 17112 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 14424 KB Output is correct
2 Correct 6 ms 14448 KB Output is correct
3 Correct 6 ms 14556 KB Output is correct
4 Correct 6 ms 14428 KB Output is correct
5 Correct 6 ms 14428 KB Output is correct
6 Correct 6 ms 14428 KB Output is correct
7 Correct 7 ms 14732 KB Output is correct
8 Runtime error 53 ms 67152 KB Execution killed with signal 11
9 Halted 0 ms 0 KB -