Submission #332708

# Submission time Handle Problem Language Result Execution time Memory
332708 2020-12-03T03:56:01 Z daniel920712 Selling RNA Strands (JOI16_selling_rna) C++14
60 / 100
1500 ms 80580 KB
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
#include <string.h>
#include <map>

using namespace std;
int MOD=1e9+7;
vector < int > a[100005],b[100005];
vector < int > can;
map < pair < int , int > , int > con[65][65];
char tt[100005];
char tt2[100005];
int sz[100005];
int main()
{
    int N,M,K,t=0,i,j,k,t2,xx,yy,ans;
    scanf("%d %d",&N,&M);
    for(i=0;i<N;i++)
    {
        scanf("%s",tt);
        K=(int) strlen(tt);
        sz[i]=K;
        if(K>50) can.push_back(i);
        t=0;
        for(j=0;j<K;j++)
        {
            t=(int) ( ((long long) t)*4%MOD);
            if(tt[j]=='U') t++;
            if(tt[j]=='C') t+=2;
            if(tt[j]=='G') t+=3;
            t%=MOD;
            a[i].push_back(t);
        }

        t=0;
        for(j=K-1;j>=0;j--)
        {
            t=(int) ( ((long long) t)*4%MOD);
            if(tt[j]=='U') t++;
            if(tt[j]=='C') t+=2;
            if(tt[j]=='G') t+=3;
            t%=MOD;
            b[i].push_back(t);
        }


        if(K<=50)
        {
            for(j=0;j<K;j++) for(k=0;k<K;k++) con[j][k][make_pair(a[i][j],b[i][k])]++;
            a[i].clear();
            b[i].clear();
        }
    }
    while(M--)
    {
        ans=0;
        scanf("%s %s",tt,tt2);

        xx=strlen(tt);
        yy=strlen(tt2);

        t=0;
        for(j=0;j<xx;j++)
        {
            t=(int) ( ((long long) t)*4%MOD);
            if(tt[j]=='U') t++;
            if(tt[j]=='C') t+=2;
            if(tt[j]=='G') t+=3;
            t%=MOD;
        }

        t2=0;
        for(j=yy-1;j>=0;j--)
        {
            t2=(int) (((long long) t2)*4%MOD);
            if(tt2[j]=='U') t2++;
            if(tt2[j]=='C') t2+=2;
            if(tt2[j]=='G') t2+=3;
            t2%=MOD;
        }

        for(auto i:can)
        {
            if(sz[i]<xx||sz[i]<yy) continue;
            if(a[i][xx-1]==t&&b[i][yy-1]==t2) ans++;
        }
        if(xx<=50&&yy<=50&&con[xx-1][yy-1].find(make_pair(t,t2))!=con[xx-1][yy-1].end()) ans+=con[xx-1][yy-1][make_pair(t,t2)];
        printf("%d\n",ans);


    }
    return 0;
}

Compilation message

selling_rna.cpp: In function 'int main()':
selling_rna.cpp:20:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   20 |     scanf("%d %d",&N,&M);
      |     ~~~~~^~~~~~~~~~~~~~~
selling_rna.cpp:23:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   23 |         scanf("%s",tt);
      |         ~~~~~^~~~~~~~~
selling_rna.cpp:60:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   60 |         scanf("%s %s",tt,tt2);
      |         ~~~~~^~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 4 ms 5228 KB Output is correct
2 Correct 4 ms 5228 KB Output is correct
3 Correct 4 ms 5356 KB Output is correct
4 Correct 4 ms 5228 KB Output is correct
5 Correct 4 ms 5228 KB Output is correct
6 Correct 4 ms 5228 KB Output is correct
7 Correct 4 ms 5228 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 185 ms 33772 KB Output is correct
2 Correct 578 ms 55660 KB Output is correct
3 Correct 296 ms 41836 KB Output is correct
4 Correct 393 ms 53612 KB Output is correct
5 Correct 396 ms 48364 KB Output is correct
6 Correct 380 ms 44908 KB Output is correct
7 Correct 247 ms 22252 KB Output is correct
8 Correct 432 ms 25580 KB Output is correct
9 Correct 382 ms 25452 KB Output is correct
10 Correct 453 ms 25580 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 35 ms 8812 KB Output is correct
2 Correct 88 ms 11372 KB Output is correct
3 Correct 70 ms 9964 KB Output is correct
4 Correct 31 ms 7660 KB Output is correct
5 Correct 80 ms 11244 KB Output is correct
6 Correct 65 ms 9964 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 5228 KB Output is correct
2 Correct 4 ms 5228 KB Output is correct
3 Correct 4 ms 5356 KB Output is correct
4 Correct 4 ms 5228 KB Output is correct
5 Correct 4 ms 5228 KB Output is correct
6 Correct 4 ms 5228 KB Output is correct
7 Correct 4 ms 5228 KB Output is correct
8 Correct 185 ms 33772 KB Output is correct
9 Correct 578 ms 55660 KB Output is correct
10 Correct 296 ms 41836 KB Output is correct
11 Correct 393 ms 53612 KB Output is correct
12 Correct 396 ms 48364 KB Output is correct
13 Correct 380 ms 44908 KB Output is correct
14 Correct 247 ms 22252 KB Output is correct
15 Correct 432 ms 25580 KB Output is correct
16 Correct 382 ms 25452 KB Output is correct
17 Correct 453 ms 25580 KB Output is correct
18 Correct 35 ms 8812 KB Output is correct
19 Correct 88 ms 11372 KB Output is correct
20 Correct 70 ms 9964 KB Output is correct
21 Correct 31 ms 7660 KB Output is correct
22 Correct 80 ms 11244 KB Output is correct
23 Correct 65 ms 9964 KB Output is correct
24 Execution timed out 1593 ms 80580 KB Time limit exceeded
25 Halted 0 ms 0 KB -