Submission #289253

#TimeUsernameProblemLanguageResultExecution timeMemory
289253leductoanSelling RNA Strands (JOI16_selling_rna)C++14
10 / 100
1610 ms393656 KiB
#include<bits/stdc++.h> using namespace std; #define task "JOI16_selling_rna" #define lb lower_bound #define ub upper_bound #define ALL(v) (v).begin(),(v).end() #define zs(v) (int)(v).size() #define fi first #define se second #define pb push_back #define mp make_pair #define cntbit __builtin_popcountll #define BIT(x, i) (((x) >> (i)) & 1) typedef long double ld; typedef long long ll; typedef pair<int,int> pii; const int d4i[4]={-1, 0, 1, 0}, d4j[4]={0, 1, 0, -1}; const int d8i[8]={-1, -1, 0, 1, 1, 1, 0, -1}, d8j[8]={0, 1, 1, 1, 0, -1, -1, -1}; const ll mod=1000000007; /// 998244353 const int base=311; const int N=2e6+5; int cnt1,cnt2,n,q; string s[100005]; vector<vector<int>> st1, st2, T1, T2; int conv(char c) { if(c=='A') return 0; if(c=='U') return 1; if(c=='G') return 2; if(c=='C') return 3; } void add(vector<vector<int>>&T, int id, string &s, int &cnt, vector<vector<int>> &st) { int root=0; for(int i=0;i<zs(s);++i) { int c=conv(s[i]); if(T[root][c]==0) T[root][c]=++cnt; root=T[root][c]; st[root].pb(id); } } vector<int> get(vector<vector<int>> &T, string &s, vector<vector<int>> &st) { int root=0; vector<int> ans={}; for(int i=0;i<zs(s);++i) { int c=conv(s[i]); if(T[root][c]==0) return ans; root=T[root][c]; } return st[root]; } void biot() { cin>>n>>q; int tot=0; for(int i=1;i<=n;++i) cin>>s[i], tot+=zs(s[i]); st1.resize(tot+4); st2.resize(tot+4); T1=T2=vector<vector<int>>(tot+5,vector<int>(5)); for(int i=1;i<=n;++i) { add(T1,i,s[i],cnt1,st1); reverse(ALL(s[i])); add(T2,i,s[i],cnt2,st2); } while(q--) { string pre,suf; cin>>pre>>suf; reverse(ALL(suf)); int ans=0; vector<int> tam1=get(T1,pre,st1), tam2=get(T2,suf,st2); // for(int i:tam1) cout<<i<<' '; // cout<<endl; for(int i:tam1) if(binary_search(ALL(tam2),i)) ++ans; cout<<ans<<'\n'; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); if(fopen(task".inp","r")) { freopen(task".inp","r",stdin); freopen(task".out","w",stdout); } biot(); }

Compilation message (stderr)

selling_rna.cpp: In function 'int conv(char)':
selling_rna.cpp:33:1: warning: control reaches end of non-void function [-Wreturn-type]
   33 | }
      | ^
selling_rna.cpp: In function 'int main()':
selling_rna.cpp:89:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   89 |         freopen(task".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
selling_rna.cpp:90:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   90 |         freopen(task".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...