답안 #866763

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
866763 2023-10-27T03:14:44 Z vjudge1 Selling RNA Strands (JOI16_selling_rna) C++17
10 / 100
404 ms 596048 KB
#include<bits/stdc++.h>
using namespace std;

const int N = 2e5+7;
const int M = 2e6+7;
const int mod = 1e9+7;
const int base = 33;
const int maxn = 2e3+7;
using ll = long long;

int n,m, cnt = 0, cnt1 = 0, max_len = 0;
int T[M][30], T1[M][30], cntpre[M],cntpre1[M];
bool isEnd[M],isEnd1[M];
ll ha1[maxn][maxn],ha2[maxn][maxn],h[maxn];
string s[N];

void add(string s)
{
    int cur = 0;
    for(char c : s)
    {
        int k = c - 'A';
        if(!T[cur][k])
        {
            T[cur][k] = ++cnt;
        }
        cur = T[cur][k];
        cntpre[cur]++;
    }
    isEnd[cur] = 1;
}

void add1(string s)
{
    int cur = 0;
    for(int i = s.size() - 1; i >= 0; i--)
    {
        char c = s[i];
        int k = c - 'A';
        if(!T1[cur][k])
        {
            T1[cur][k] = ++cnt1;
        }
        cur = T1[cur][k];
        cntpre1[cur]++;
    }
    isEnd1[cur] = 1;
}

int cnt_pre(string s)
{
    int cur = 0;
    for(char c : s)
    {
        int k = c - 'A';
        if(!T[cur][k]) return 0;
        cur = T[cur][k];
    }
    return cntpre[cur];
}

int cnt_pre1(string s)
{
    int cur = 0;
    for(int i = s.size() - 1; i >= 0; i--)
    {
        char c = s[i];
        int k = c - 'A';
        if(!T1[cur][k]) return 0;
        cur = T1[cur][k];
    }
    return cntpre1[cur];
}

ll get1(int i, int l, int r)
{
    return (ha1[i][r] - ha1[i][l-1]*h[r-l+1] + 1ll*mod*mod)%mod;
}

ll get2(int i, int l, int r)
{
    return (ha2[i][r] - ha2[i][l-1]*h[r-l+1] + 1ll*mod*mod)%mod;
}

void sub1()
{
    int max_len = 0;
    for(int i = 1; i <= n; i++)
    {
        max_len = max(max_len,(int)s[i].size());
    }

    for(int i = 1; i <= n; i++)
    {
        ha1[i][0] = 0;
        string st = s[i];
        int sz = s[i].size();
        s[i] = " " + s[i];
        reverse(st.begin(),st.end());
        st = " " + st;
        for(int j = 1; j <= sz; j++)
        {
            ha1[i][j] = (ha1[i][j-1]*base + s[i][j])%mod;
            ha2[i][j] = (ha2[i][j-1]*base + st[j])%mod;
        }
    }

    h[0] = 1;
    for(int i = 1; i <= max_len; i++)
    {
        h[i] = (h[i-1]*base)%mod;
    }

    for(int i = 1; i <= m; i++)
    {
        string s1,s2;
        cin>>s1>>s2;
        int sz1 = s1.size(), sz2 = s2.size();
        reverse(s2.begin(),s2.end());
        s1 = " " + s1, s2 = " " + s2;
        ll ha1 = 0, ha2 = 0;
        for(int j = 1; j <= sz1; j++)
        {
            ha1 = (ha1*base + s1[j])%mod;
        }
        for(int j = 1; j <= sz2; j++)
        {
            ha2 = (ha2*base + s2[j])%mod;
        }

        int cnt = 0;
        for(int i1 = 1; i1 <= n; i1++)
        {
            int sz = s[i1].size() - 1;
            if(get1(i1,1,sz1) == ha1 && get2(i1,1,sz2) == ha2) cnt++;
        }
        cout<<cnt<<"\n";
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

//    freopen("RNA.inp","r",stdin);
//    freopen("RNA.out","w",stdout);

    cin>>n>>m;
    for(int i = 1; i <= n; i++)
    {
        cin>>s[i];
        add(s[i]);
        add1(s[i]);
    }
        sub1();

}

Compilation message

selling_rna.cpp: In function 'void sub1()':
selling_rna.cpp:134:17: warning: unused variable 'sz' [-Wunused-variable]
  134 |             int sz = s[i1].size() - 1;
      |                 ^~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 19292 KB Output is correct
2 Correct 3 ms 19292 KB Output is correct
3 Correct 3 ms 19292 KB Output is correct
4 Correct 3 ms 19292 KB Output is correct
5 Correct 3 ms 19548 KB Output is correct
6 Correct 3 ms 19352 KB Output is correct
7 Correct 3 ms 19544 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 212 ms 308940 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 404 ms 596048 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 19292 KB Output is correct
2 Correct 3 ms 19292 KB Output is correct
3 Correct 3 ms 19292 KB Output is correct
4 Correct 3 ms 19292 KB Output is correct
5 Correct 3 ms 19548 KB Output is correct
6 Correct 3 ms 19352 KB Output is correct
7 Correct 3 ms 19544 KB Output is correct
8 Incorrect 212 ms 308940 KB Output isn't correct
9 Halted 0 ms 0 KB -