#include "pyramids.h"
#include <vector>
using namespace std;
vector<int> pyramidsA, pyramidsB;
vector<long long> prefixSumA, prefixSumB;
void init(vector<int> A, vector<int> B) {
pyramidsA = A;
pyramidsB = B;
int N = A.size();
prefixSumA.resize(N);
prefixSumB.resize(N);
prefixSumA[0] = A[0];
prefixSumB[0] = B[0];
for (int i = 1; i < N; ++i) {
prefixSumA[i] = prefixSumA[i - 1] + A[i];
prefixSumB[i] = prefixSumB[i - 1] + B[i];
}
}
bool can_transform(int L, int R, int X, int Y) {
long long sumA = prefixSumA[R] - (L > 0 ? prefixSumA[L - 1] : 0);
long long sumB = prefixSumB[Y] - (X > 0 ? prefixSumB[X - 1] : 0);
if (sumA != sumB) {
return false;
}
vector<int> diffA(R - L), diffB(Y - X);
for (int i = L; i < R; ++i) {
diffA[i - L] = pyramidsA[i + 1] - pyramidsA[i];
}
for (int i = X; i < Y; ++i) {
diffB[i - X] = pyramidsB[i + 1] - pyramidsB[i];
}
sort(diffA.begin(), diffA.end());
sort(diffB.begin(), diffB.end());
return diffA == diffB;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |