# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
58450 | 2018-07-17T21:42:21 Z | ruhanhabib39 | Selling RNA Strands (JOI16_selling_rna) | C++17 | 653 ms | 377776 KB |
#include <bits/stdc++.h> using namespace std; typedef unsigned long long Long; int N, M; char inp[100 * 1000 + 10]; char P[100 * 1000 + 10], Q[100 * 1000 + 10]; int V[256]; int ii = 0; int lv = 0; struct Trie { Trie* nxt[4]; Trie* suff; int cc; Trie() { for(int i = 0; i < 4; i++) { nxt[i] = NULL; } } ~Trie() { for(int i = 0; i < 4; i++) { if(nxt[i]) delete nxt[i]; } } }; Trie* pref; int f() { Trie *p = pref; int ln = strlen(P); for(int i = 0; i < ln; i++) { if(p->nxt[V[P[i]]] == NULL) return 0; p = p->nxt[V[P[i]]]; } Trie* s = p->suff; if(s == NULL) return 0; ln = strlen(Q); for(int i = ln-1; i >= 0; i--) { if(s->nxt[V[Q[i]]] == NULL) return 0; s = s->nxt[V[Q[i]]]; } return s->cc; } Trie* mix(Trie* a, Trie* b) { if(b == NULL) return a; if(a == NULL) return b; Trie* t = new Trie(); t->cc = a->cc + b->cc; for(int i = 0; i < 4; i++) { t->nxt[i] = mix(a->nxt[i], b->nxt[i]); } return t; } // merges the suffixes of trie a, b into a void merge(Trie* a, Trie* b) { if(b == NULL) return; if(a->suff == NULL) { a->suff = b->suff; return; } if(b->suff == NULL) return; a->suff = mix(a->suff, b->suff); } void dfs(Trie* t) { if(!t) return; for(int i = 0; i < 4; i++) { dfs(t->nxt[i]); merge(t, t->nxt[i]); } } int main() { V['A'] = 0; V['G'] = 1; V['C'] = 2; V['U'] = 3; pref = new Trie(); scanf("%d%d", &N, &M); for(int i = 0; i < N; i++) { scanf("%s", inp); int ln = strlen(inp); Trie* cn = pref; for(int j = 0; j < ln; j++) { // cerr << "Prefix Adding " << inp[j] << "\n"; cn->cc++; int vi = V[inp[j]]; if(cn->nxt[vi] == NULL) cn->nxt[vi] = new Trie(); cn = cn->nxt[vi]; } cn->cc++; if(cn->suff == NULL) cn->suff = new Trie(); Trie* sf = cn->suff; for(int j = ln-1; j >= 0; j--) { sf->cc++; int vj = V[inp[j]]; if(sf->nxt[vj] == NULL) sf->nxt[vj] = new Trie(); sf = sf->nxt[vj]; } sf->cc++; } dfs(pref); for(int i = 0; i < M; i++) { scanf("%s %s", P, Q); printf("%d\n", f()); } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 504 KB | Output is correct |
2 | Correct | 2 ms | 612 KB | Output is correct |
3 | Correct | 2 ms | 668 KB | Output is correct |
4 | Correct | 3 ms | 668 KB | Output is correct |
5 | Correct | 2 ms | 668 KB | Output is correct |
6 | Correct | 2 ms | 668 KB | Output is correct |
7 | Correct | 3 ms | 668 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 212 ms | 129572 KB | Output is correct |
2 | Correct | 199 ms | 129572 KB | Output is correct |
3 | Correct | 653 ms | 377776 KB | Output is correct |
4 | Correct | 616 ms | 377776 KB | Output is correct |
5 | Correct | 327 ms | 377776 KB | Output is correct |
6 | Correct | 348 ms | 377776 KB | Output is correct |
7 | Correct | 383 ms | 377776 KB | Output is correct |
8 | Correct | 501 ms | 377776 KB | Output is correct |
9 | Correct | 427 ms | 377776 KB | Output is correct |
10 | Correct | 281 ms | 377776 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 22 ms | 377776 KB | Output is correct |
2 | Correct | 20 ms | 377776 KB | Output is correct |
3 | Correct | 19 ms | 377776 KB | Output is correct |
4 | Correct | 19 ms | 377776 KB | Output is correct |
5 | Correct | 21 ms | 377776 KB | Output is correct |
6 | Correct | 21 ms | 377776 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 504 KB | Output is correct |
2 | Correct | 2 ms | 612 KB | Output is correct |
3 | Correct | 2 ms | 668 KB | Output is correct |
4 | Correct | 3 ms | 668 KB | Output is correct |
5 | Correct | 2 ms | 668 KB | Output is correct |
6 | Correct | 2 ms | 668 KB | Output is correct |
7 | Correct | 3 ms | 668 KB | Output is correct |
8 | Correct | 212 ms | 129572 KB | Output is correct |
9 | Correct | 199 ms | 129572 KB | Output is correct |
10 | Correct | 653 ms | 377776 KB | Output is correct |
11 | Correct | 616 ms | 377776 KB | Output is correct |
12 | Correct | 327 ms | 377776 KB | Output is correct |
13 | Correct | 348 ms | 377776 KB | Output is correct |
14 | Correct | 383 ms | 377776 KB | Output is correct |
15 | Correct | 501 ms | 377776 KB | Output is correct |
16 | Correct | 427 ms | 377776 KB | Output is correct |
17 | Correct | 281 ms | 377776 KB | Output is correct |
18 | Correct | 22 ms | 377776 KB | Output is correct |
19 | Correct | 20 ms | 377776 KB | Output is correct |
20 | Correct | 19 ms | 377776 KB | Output is correct |
21 | Correct | 19 ms | 377776 KB | Output is correct |
22 | Correct | 21 ms | 377776 KB | Output is correct |
23 | Correct | 21 ms | 377776 KB | Output is correct |
24 | Correct | 209 ms | 377776 KB | Output is correct |
25 | Correct | 240 ms | 377776 KB | Output is correct |
26 | Correct | 169 ms | 377776 KB | Output is correct |
27 | Correct | 491 ms | 377776 KB | Output is correct |
28 | Correct | 141 ms | 377776 KB | Output is correct |
29 | Correct | 70 ms | 377776 KB | Output is correct |