Submission #1267591

#TimeUsernameProblemLanguageResultExecution timeMemory
1267591quangykqhSelling RNA Strands (JOI16_selling_rna)C++20
35 / 100
1593 ms236964 KiB
#include<bits/stdc++.h>
using namespace std;
const int MN=1e5+1209;
long long n,m,k,ans,pos[500],MIN;
string skibidi,sex,s[MN];
struct trie
{
    struct Node
    {
        vector<int>in;
        Node *child[4];
        Node()
        {
            for(int i=0;i<4;i++)
                child[i]=NULL;
        }
    };
    Node *root=new Node;
    void addstring(int id)
    {
        Node *cur=root;
        cur->in.push_back(id);
        for(int i=0;i<s[id].length();i++)
        {
            if(!cur->child[pos[s[id][i]]])
                cur->child[pos[s[id][i]]]=new Node;
            cur=cur->child[pos[s[id][i]]];
            cur->in.push_back(id);
        }
    }
};
trie TRIEPF,TRIESF;
int takeans(string &p,string &q)
{
    trie::Node* curpf=TRIEPF.root;
    for(int i=0;i<p.length();i++)
    {
        if(!curpf->child[pos[p[i]]])return 0;
        curpf=curpf->child[pos[p[i]]];
    }
    trie::Node* cursf=TRIESF.root;
    for(int i=0;i<q.length();i++)
    {
        if(!cursf->child[pos[q[i]]])return 0;
        cursf=cursf->child[pos[q[i]]];
    }
    int res=0;
    for(auto i:cursf->in)
    {
        int id=lower_bound(curpf->in.begin(),curpf->in.end(),i)-curpf->in.begin();
        if(id>=curpf->in.size())continue;
        if(curpf->in[id]==i)res++;
    }
    return res;


}
int main()
{
    if(fopen("GAME.INP","r"))
    {
        freopen("GAME.INP","r",stdin);
        freopen("GAME.OUT","w",stdout);
    }
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m;
    pos['A']=1;
    pos['C']=2;
    pos['U']=3;
    pos['G']=0;
    for(int i=1;i<=n;i++)
    {
        cin>>s[i];
    }
    sort(s+1,s+n+1);
    for(int i=1;i<=n;i++)
    {
        TRIEPF.addstring(i);
        reverse(s[i].begin(),s[i].end());
        TRIESF.addstring(i);
    }
    while(m--)
    {
        cin>>skibidi>>sex;
        reverse(sex.begin(),sex.end());
        cout<<takeans(skibidi,sex)<<'\n';
    }
}

Compilation message (stderr)

selling_rna.cpp: In function 'int main()':
selling_rna.cpp:62:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   62 |         freopen("GAME.INP","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
selling_rna.cpp:63:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   63 |         freopen("GAME.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...