Submission #74290850


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
string s1,s2;
vector<ll>sz;
vector<vector<ll>>p1,p2;
map<pair<ll,char>,ll>dp;

ll get_cnt(ll id,ll l,ll r,char ch){
    ll c=ch-'a';
    if(id==1)return p1[c][r]-p1[c][l-1];
    else return p2[c][r]-p2[c][l-1];
}

ll dfs(ll idx,ll l,ll r,char ch){
    if(l>r)return 0;

    if(l==1 && r==sz[idx]){
        if(dp.count({idx,ch}))return dp[{idx,ch}];
    }

    if(idx==1)return get_cnt(1,l,r,ch);
    if(idx==2)return get_cnt(2,l,r,ch);

    ll left_size=sz[idx-1];
    ll res;

    if(r<=left_size)res=dfs(idx-1,l,r,ch);
    else if(l>left_size)res=dfs(idx-2,l-left_size,r-left_size,ch);
    else{
        ll part1=dfs(idx-1,l,left_size,ch);
        ll part2=dfs(idx-2,1,r-left_size,ch);
        res=part1+part2;
    }

    if(l==1 && r==sz[idx])dp[{idx,ch}]=res;

    return res;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin>>s1>>s2;
    ll q;
    cin>>q;

    p1.assign(26,vector<ll>(s1.size()+1,0));
    p2.assign(26,vector<ll>(s2.size()+1,0));

    for(ll i=0;i<s1.size();i++){
        for(ll c=0;c<26;c++)p1[c][i+1]=p1[c][i];
        p1[s1[i]-'a'][i+1]++;
    }

    for(ll i=0;i<s2.size();i++){
        for(ll c=0;c<26;c++)p2[c][i+1]=p2[c][i];
        p2[s2[i]-'a'][i+1]++;
    }

    sz.push_back(0);
    sz.push_back(s1.size());
    sz.push_back(s2.size());

    while(sz.back()<(ll)1e18){
        ll nxt=sz[sz.size()-1]+sz[sz.size()-2];
        sz.push_back(min(nxt,(ll)1e18));
    }

    ll last=sz.size()-1;

    while(q--){
        ll l,r;
        char ch;
        cin>>l>>r>>ch;
        cout<<dfs(last,l,r,ch)<<endl;
    }
    return 0;
}

Submission Info

Submission Time
Task E - Fibonacci String
User bplizard
Language C++23 (GCC 15.2.0)
Score 450
Code Size 1732 Byte
Status AC
Exec Time 587 ms
Memory 7840 KiB

Compile Error

./Main.cpp: In function 'int main()':
./Main.cpp:52:17: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |     for(ll i=0;i<s1.size();i++){
      |                ~^~~~~~~~~~
./Main.cpp:57:17: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |     for(ll i=0;i<s2.size();i++){
      |                ~^~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 450 / 450
Status
AC × 1
AC × 15
Set Name Test Cases
Sample sample_01.txt
All random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, sample_01.txt
Case Name Status Exec Time Memory
random_01.txt AC 360 ms 3592 KiB
random_02.txt AC 360 ms 3732 KiB
random_03.txt AC 430 ms 3596 KiB
random_04.txt AC 435 ms 3672 KiB
random_05.txt AC 501 ms 3744 KiB
random_06.txt AC 498 ms 3668 KiB
random_07.txt AC 506 ms 3736 KiB
random_08.txt AC 502 ms 3616 KiB
random_09.txt AC 430 ms 3728 KiB
random_10.txt AC 506 ms 3696 KiB
random_11.txt AC 498 ms 3672 KiB
random_12.txt AC 571 ms 7688 KiB
random_13.txt AC 587 ms 7840 KiB
random_14.txt AC 561 ms 7648 KiB
sample_01.txt AC 1 ms 3620 KiB