답안 #442049

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
442049 2021-07-06T23:25:23 Z zaneyu Selling RNA Strands (JOI16_selling_rna) C++14
35 / 100
139 ms 35008 KB
/*input
3 3
AA
AA
AGA
AA AA
AG GA
AG GA
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update> indexed_set;
//order_of_key #of elements less than x
// find_by_order kth element
using ll=long long;
using ld=long double;
using pii=pair<int,int>;
#define f first
#define s second
#define pb push_back
#define REP(i,n) for(int i=0;i<n;i++)
#define REP1(i,n) for(int i=1;i<=n;i++)
#define FILL(n,x) memset(n,x,sizeof(n))
#define ALL(_a) _a.begin(),_a.end()
#define sz(x) (int)x.size()
#define SORT_UNIQUE(c) (sort(c.begin(),c.end()),c.resize(distance(c.begin(),unique(c.begin(),c.end()))))
const ll INF64=1e18+1;
const int INF=0x3f3f3f3f;
int MOD=1e9+7;
const ld PI=acos(-1);
const ld eps=1e-3;
#define lowb(x) x&(-x)
#define MNTO(x,y) x=min(x,(__typeof__(x))y)
#define MXTO(x,y) x=max(x,(__typeof__(x))y)
inline ll mult(ll a,ll b){
    if(a>=MOD) a%=MOD;
    if(b>=MOD) b%=MOD;
    return (a*b)%MOD;
}
inline ll mypow(ll a,ll b){
    if(b<=0) return 1;
    ll res=1LL;
    while(b){
        if(b&1) res=mult(res,a);
        a=mult(a,a);
        b>>=1;
    }
    return res;
}
const int maxn=1e5+5;
const int maxlg=__lg(maxn)+2;
string asd="ACGU";
int get(char x){
    REP(i,4) if(asd[i]==x) return i;
}
struct trie{
    vector<int> v[maxn];
    int arr[maxn][4];
    int cnt=1;
    int search(string s){
        int cur=0;
        REP(i,sz(s)){
            int z=get(s[i]);
            if(!arr[cur][z]){
                return -1;
            }
            cur=arr[cur][z];
        }
        return cur;
    }
    void insert(string s,int idx){
        int cur=0;
        REP(i,sz(s)){
            int z=get(s[i]);
            if(!arr[cur][z]) arr[cur][z]=cnt++;
            cur=arr[cur][z];
            v[cur].pb(idx);
        }
    }
}orig,rev;
string arr[maxn];
int32_t main(){
    int n,q;
    cin>>n>>q;
    REP(i,n) cin>>arr[i];
    sort(arr,arr+n);
    REP(i,n){
        orig.insert(arr[i],i);
        reverse(ALL(arr[i]));
        rev.insert(arr[i],i);
    }
    while(q--){
        string a,b;
        cin>>a>>b;
        reverse(ALL(b));
        int x=orig.search(a),y=rev.search(b);
        if(x==-1 or y==-1){
            cout<<"0\n";
            continue;
        }
        int l=orig.v[x][0],r=orig.v[x].back();
        vector<int> &tmp=rev.v[y];
        cout<<upper_bound(ALL(tmp),r)-lower_bound(ALL(tmp),l)<<'\n';
    }
}  

Compilation message

selling_rna.cpp: In function 'int get(char)':
selling_rna.cpp:58:1: warning: control reaches end of non-void function [-Wreturn-type]
   58 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 8140 KB Output is correct
2 Correct 5 ms 8136 KB Output is correct
3 Correct 5 ms 8140 KB Output is correct
4 Correct 5 ms 8140 KB Output is correct
5 Correct 5 ms 8140 KB Output is correct
6 Correct 5 ms 8112 KB Output is correct
7 Correct 5 ms 8140 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 77 ms 35008 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 139 ms 9964 KB Output is correct
2 Correct 89 ms 9884 KB Output is correct
3 Correct 108 ms 9736 KB Output is correct
4 Correct 92 ms 9780 KB Output is correct
5 Correct 96 ms 9804 KB Output is correct
6 Correct 115 ms 9756 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 8140 KB Output is correct
2 Correct 5 ms 8136 KB Output is correct
3 Correct 5 ms 8140 KB Output is correct
4 Correct 5 ms 8140 KB Output is correct
5 Correct 5 ms 8140 KB Output is correct
6 Correct 5 ms 8112 KB Output is correct
7 Correct 5 ms 8140 KB Output is correct
8 Runtime error 77 ms 35008 KB Execution killed with signal 11
9 Halted 0 ms 0 KB -