Submission #953483

#TimeUsernameProblemLanguageResultExecution timeMemory
953483RifalSelling RNA Strands (JOI16_selling_rna)C++14
35 / 100
1541 ms57944 KiB
#include <bits/stdc++.h>
#include <fstream>
#define endl '\n'
#define mod 1000000007
#define INF 1000000000
#define INF2 2000000000
///#define cin fin
///#define cout fout
using namespace std;
double const EPS = 1e-14;
const int P = 1007;
typedef long long ll;
///ofstream fout("herding.out");
///ifstream fin("herding.in");
const int N = 1e5 + 4;
vector<ll> v[N], v2[N];
int main()
{
    ios_base::sync_with_stdio(0);cout.tie(0);cin.tie(0);
    int n, m; cin >> n >> m; string arr[n]; pair<string,string> arr2[m];
    for(int i = 0; i < n; i++) cin >> arr[i];
    for(int i = 0; i < m; i++) cin >> arr2[i].first >> arr2[i].second;
    for(int i = 0; i < n; i++) {
        ll cur = 1;
        v[i].push_back(0);
        v2[i].push_back(0);
        for(int j = 0; j < arr[i].size(); j++) {
            ll val;
            if(arr[i][j] == 'A') val = 0;
            else if(arr[i][j] == 'U')val = 1;
            else if(arr[i][j] == 'G')val = 2;
            else val = 3;

            val *= cur;
            val %= mod;
            val += v[i].back();
            val %= mod;
            v[i].push_back(val);
            cur *= P;
            cur %= mod;
        }
        cur = 1;
        for(int j = arr[i].size()-1; j >= 0; j--) {
            ll val;
            if(arr[i][j] == 'A') val = 0;
            else if(arr[i][j] == 'U')val = 1;
            else if(arr[i][j] == 'G')val = 2;
            else val = 3;

            val *= cur;
            val %= mod;
            val += v2[i].back();
            val %= mod;
            v2[i].push_back(val);
            cur *= P;
            cur %= mod;
        }
    }

    for(int i = 0; i < m; i++) {
        int cnt = 0;
        ll ans1 = 0; ll ans2 = 0;
        ll cur = 1;
        for(int j = 0; j < arr2[i].first.size(); j++) {
            ll val;
            if(arr2[i].first[j] == 'A') val = 0;
            else if(arr2[i].first[j] == 'U')val = 1;
            else if(arr2[i].first[j] == 'G')val = 2;
            else val = 3;

            val *= cur;
            val %= mod;
            ans1 += val;
            ans1 %= mod;
            cur *= P;
            cur %= mod;
        }
         cur = 1;
        for(int j = arr2[i].second.size()-1; j >= 0; j--) {
            ll val;
            if(arr2[i].second[j] == 'A') val = 0;
            else if(arr2[i].second[j] == 'U')val = 1;
            else if(arr2[i].second[j] == 'G')val = 2;
            else val = 3;

            val *= cur;
            val %= mod;
            ans2 += val;
            ans2 %= mod;
            cur *= P;
            cur %= mod;
        }
        int siz1 = arr2[i].first.size();
        int siz2 = arr2[i].second.size();
        for(int j = 0; j < n; j++) {
            if(siz1 < v[j].size() && siz2 < v2[j].size() && ans1 == v[j][siz1] && ans2 == v2[j][siz2]) cnt++;
        }
        cout << cnt << endl;
    }
    return 0;
}

Compilation message (stderr)

selling_rna.cpp: In function 'int main()':
selling_rna.cpp:27:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |         for(int j = 0; j < arr[i].size(); j++) {
      |                        ~~^~~~~~~~~~~~~~~
selling_rna.cpp:64:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |         for(int j = 0; j < arr2[i].first.size(); j++) {
      |                        ~~^~~~~~~~~~~~~~~~~~~~~~
selling_rna.cpp:96:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   96 |             if(siz1 < v[j].size() && siz2 < v2[j].size() && ans1 == v[j][siz1] && ans2 == v2[j][siz2]) cnt++;
      |                ~~~~~^~~~~~~~~~~~~
selling_rna.cpp:96:43: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   96 |             if(siz1 < v[j].size() && siz2 < v2[j].size() && ans1 == v[j][siz1] && ans2 == v2[j][siz2]) cnt++;
      |                                      ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...