# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1166444 | aminabouakaz | Pyramids (IOI24_pyramids) | C++20 | 0 ms | 0 KiB |
#include <vector>
using namespace std;
vector<long long> pyramidsA, pyramidsB;
vector<long long> diffA, diffB;
void init(vector<long long> A, vector<long long> B) {
pyramidsA = A;
pyramidsB = B;
long long N = A.size();
diffA.resize(N);
diffB.resize(N);
for (long long i = 1; i < N; ++i) {
diffA[i] = A[i] - A[i - 1];
diffB[i] = B[i] - B[i - 1];
}
}
bool can_transform(long long L, long long R, long long X, long long Y) {
if (L == R) {
return pyramidsA[L] == pyramidsB[X];
}
long long sumA = pyramidsA[L], sumB = pyramidsB[X];
for (long long i = L + 1; i <= R; ++i) {
sumA += pyramidsA[i];
}
for (long long i = X + 1; i <= Y; ++i) {
sumB += pyramidsB[i];
}
if (sumA != sumB) {
return false;
}
for (long long i = 1; i <= (R - L); ++i) {
if (diffA[L + i] != diffB[X + i]) {
return false;
}
}
return true;
}