87052024-01-25 20:32:01mraronTúlcsorduláscpp17Elfogadva 100/100219ms24256 KiB
// @check-accepted: examples quadratic X=Y no-limits
#include <algorithm>
#include <iostream>
#include <string>
#include <utility>
#include <vector>
#define int long long
using namespace std;
int N;
string A, B;
constexpr int mod = 1e9 + 7;
constexpr int base1 = 2;
constexpr int base2 = 7;
vector<int> p1;
vector<int> p2;
struct Hash {
    vector<int> h1;
    vector<int> h2;
    Hash(const string& s) {
        int n = s.size();
        h1.resize(n + 1);
        h2.resize(n + 1);
        for (int i = 0; i < n; ++i) {
            h1[i + 1] = (h1[i] * base1 + s[i] - '0') % mod;
            h2[i + 1] = (h2[i] * base2 + s[i] - '0') % mod;
        }
    }
    pair<int, int> get(int l, int r) {
        return {(h1[r + 1] - h1[l] * p1[r - l + 1] % mod + mod) % mod, (h2[r + 1] - h2[l] * p2[r - l + 1] % mod + mod) % mod};
    }
};
signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> N;
    p1.resize(N + 1);
    p1[0] = 1;
    for (int i = 1; i <= N; ++i) {
        p1[i] = p1[i - 1] * base1 % mod;
    }
    p2.resize(N + 1);
    p2[0] = 1;
    for (int i = 1; i <= N; ++i) {
        p2[i] = p2[i - 1] * base2 % mod;
    }
    cin >> A;
    cin >> B;
    for (int i = 0; i < N; ++i) {
        B[i] = 1 - (B[i] - '0') + '0';
    }
    Hash ha(A), hb(B);

    int Q;
    cin >> Q;

    for (int i = 0; i < Q; ++i) {
        int X, Y, L;
        cin >> X >> Y >> L;

        int l = 0, r = L;
        while (l < r) {
            int m = (l + r) / 2;
            if (ha.get(X, X + m) == hb.get(Y, Y + m)) {
                l = m + 1;
            } else {
                r = m;
            }
        }
        if (l == L) {
            cout << 1 << " ";
        } else {
            cout << B[Y + l] << " ";
        }
    }
    cout << '\n';
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva3ms2020 KiB
subtask240/40
3Elfogadva3ms2104 KiB
4Elfogadva3ms2232 KiB
5Elfogadva4ms2472 KiB
6Elfogadva3ms3088 KiB
7Elfogadva3ms3048 KiB
8Elfogadva4ms3048 KiB
9Elfogadva4ms3296 KiB
subtask330/30
10Elfogadva3ms3080 KiB
11Elfogadva17ms4156 KiB
12Elfogadva79ms11464 KiB
13Elfogadva59ms15468 KiB
14Elfogadva149ms23284 KiB
15Elfogadva145ms22224 KiB
16Elfogadva143ms21480 KiB
17Elfogadva202ms23312 KiB
subtask430/30
18Elfogadva8ms4616 KiB
19Elfogadva37ms23500 KiB
20Elfogadva56ms8676 KiB
21Elfogadva86ms18412 KiB
22Elfogadva219ms23756 KiB
23Elfogadva216ms24040 KiB
24Elfogadva143ms22940 KiB
25Elfogadva211ms22112 KiB
26Elfogadva212ms24160 KiB
27Elfogadva145ms24244 KiB
28Elfogadva216ms24256 KiB