제출 #434351

#제출 시각아이디문제언어결과실행 시간메모리
434351ommivorousSelling RNA Strands (JOI16_selling_rna)C++17
100 / 100
457 ms189636 KiB
/*
thisiscaau's code
trying my best for a better future
*/
#include <bits/stdc++.h>

#define fileopen(a, b) freopen(((std::string)a + ".inp").c_str(), "r", stdin); freopen(((std::string)b + ".out").c_str(), "w", stdout);
#define fileopen1(a) freopen(((std::string)a + ".inp").c_str(), "r", stdin); freopen(((std::string)a + ".out").c_str(), "w", stdout);

using namespace std;
#define ll int
#define fi first
#define se second
#define pb push_back
#define mp make_pair
typedef pair<ll,ll> ii;
ll const mod = 1e9 + 7, MAXN = 3e6 + 5;


ll encode (char c){
	if (c == 'A') return 0;
	if (c == 'C') return 1;
	if (c == 'G') return 2;
	if (c == 'U') return 3;
	return 69696;
}

struct node {
	ll child[4];
	vector<ll> idx;
} trie[MAXN];

void gen (ll id){
	memset(trie[id].child,-1,sizeof(trie[id].child));
}

ll triesize = 0;
void push(string s,ll id){
    ll p = 0;
    for (int i = 0 ; i < s.size() ; i++){
    	char c = s[i];
        if (trie[p].child[encode(c)] == -1){
            gen(++triesize);
            trie[p].child[encode(c)] = triesize;
        }
        p = trie[p].child[encode(c)];
        trie[p].idx.pb(id);
    }
}

ll query (string s,ll l,ll r){
	ll p = 0;
	for (int i = 0 ; i < s.size() ; i++){
		char c = s[i];
		p = trie[p].child[encode(c)];
	}
	return lower_bound(trie[p].idx.begin(),trie[p].idx.end(),r) - lower_bound(trie[p].idx.begin(),trie[p].idx.end(),l);
}


ll tc,n,m;
string a[100005],suf[100005];
void aurelion_sol(){
	// solution goes here
	cin >> n >> m;
	for (int i = 1 ; i <= n ; i++){
		cin >> a[i];
	}
	sort(a + 1,a + n + 1);
	for (int i = 1 ; i <= n ; i++){
		suf[i] = a[i];
		reverse(suf[i].begin(),suf[i].end());
	}
	gen(0);
	for (int i = 1 ; i <= n ; i++){
		push(suf[i],i);
	}
	while (m--){
		string p,q; cin >> p >> q;
		reverse(q.begin(),q.end());
		ll lf,rt;
		lf = lower_bound(a + 1,a + n + 1,p) - a;
		p[p.size() - 1]++;
		rt = upper_bound(a + 1,a + n + 1,p) - a;
		cout << query(q,lf,rt) << endl;
	}
}

signed main() {
#ifdef thisiscaau
	fileopen("input", "output");
#endif
#ifndef thisiscaau
	// fileopen1("LAH");
#endif
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

	tc = 1;
	while (tc--) aurelion_sol();
}

컴파일 시 표준 에러 (stderr) 메시지

selling_rna.cpp: In function 'void push(std::string, int)':
selling_rna.cpp:40:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |     for (int i = 0 ; i < s.size() ; i++){
      |                      ~~^~~~~~~~~~
selling_rna.cpp: In function 'int query(std::string, int, int)':
selling_rna.cpp:53:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |  for (int i = 0 ; i < s.size() ; i++){
      |                   ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...