# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1165972 | aminabouakaz | Pyramids (IOI24_pyramids) | C++20 | 0 ms | 0 KiB |
#include "pyramids.h"
#include <vector>
using namespace std;
vector<int> prefixA, prefixB;
void init(vector<int> A, vector<int> B) {
int N = A.size();
prefixA.resize(N + 1, 0);
prefixB.resize(N + 1, 0);
for (int i = 0; i < N; ++i) {
prefixA[i + 1] = prefixA[i] + A[i];
prefixB[i + 1] = prefixB[i] + B[i];
}
}
bool can_transform(int L, int R, int X, int Y) {
if (prefixA[R + 1] - prefixA[L] != prefixB[Y + 1] - prefixB[X]) {
return false;
}
for (int i = L + 1, j = X + 1; i <= R; ++i, ++j) {
// Calculate the difference between adjacent pyramids
int diffA = A[i] - A[i - 1];
int diffB = B[j] - B[j - 1];
// Check if the differences have the same parity
if ((diffA % 2) != (diffB % 2)) {
return false;
}
}
return true;
}