제출 #1316143

#제출 시각아이디문제언어결과실행 시간메모리
1316143antarbanikPyramids (IOI24_pyramids)C++20
0 / 100
1093 ms4348 KiB
#include<bits/stdc++.h>
using namespace std;

/*

N pyramids

i-th pyramid -> a[i] stones


everyday,
same length er A & B array er ekta subarr choose korbo


jana lagbo if it's possible to transform A[l-r] -> B[x-y]



transformation rules:







*/

vector<int> a, b;

void init(vector<int> A, vector<int> B) {
    a = A;
    b = B;
}



bool can_transform(int l, int r, int x, int y){
    int n = a.size();
    vector<int> prefA(n+1), prefB(n+1);
    prefA[0] = a[0];
    prefB[0] = b[0];

    for(int i = 1;i<n;++i){
        prefA[i] = prefA[i-1] + a[i];
        prefB[i] = prefB[i-1] + b[i];
    }


    // for(int i = 0;i<n;++i){
    //     cout<<prefA[i]<<" ";
    // }
    // cout<<endl<<endl;




    int tot = r - l + 1;

    map<int,int> s1;


    for(int i = 0;i<=n-tot;++i){

        // cout<<tot+i-1<<" "<<i<<endl;
        int minus = 0;
        if(i > 0){
            minus = prefA[i-1];
        }   

        int s = prefA[tot+i-1] - minus;
        s1[s] = 1;
    }       

    // cout<<endl;

    // for(auto e : s1){
    //     cout<<e.first<<" ";
    // }

    // cout<<endl;

    for(int i = 0;i<=n-tot;++i){

        int minus = 0;
        if(i > 0){
            minus = prefB[i-1];
        }   

        int s = prefB[tot+i-1] - minus;


        if(s1.count(s)){
            return 1;
        }



    }



    return 0;
}


// int32_t main(){

//     init({1, 20, 3, 40, 5}, {2, 2, 2, 4, 5});

//     cout<<can_transform(0, 2, 0, 2);


//     return 0;
// }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...