91512024-02-15 22:20:28111Periodikus Szavakcpp17Elfogadva 100/100358ms71320 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

#define pii pair<int, int>

#define MOD 1000000007
#define BASE 256

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
#ifdef CB
	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
#endif
	int N;
	string S;
	cin >> N >> S;
	vector<int> h(N + 1);
	vector<int> p(N + 1);
	vector<vector<int>> g(N + 1);
	p[0] = 1;
	for (int i = 1; i <= N; i++) {
		h[i] = (h[i - 1] * BASE + S[i - 1]) % MOD;
		p[i] = (p[i - 1] * BASE) % MOD;
		g[i].resize(N / i + 1);
		g[i][0] = 1;
		for (int j = 1, k = p[i]; i * j <= N; j++, k = k * p[i] % MOD) {
			g[i][j] = (g[i][j - 1] + k) % MOD;
		}
	}
	vector<vector<int>> f(N + 1);
	for (int i = 1; i <= N; i++) {
		f[i].reserve(8);
	}
	for (int i = 2; i <= N; i++) {
		for (int j = 2; i * j <= N; j++) {
			f[i * j].push_back(i);
		}
	}
	int Q;
	cin >> Q;
	while (Q--) {
		int l, r;
		cin >> l >> r;
		r++;
		int ans = 0;
		auto check = [&](int i) {
			int x = ((h[l + i] - h[l] * p[i]) % MOD + MOD) % MOD;
			int y = 0;
			y += x * g[i][(r - l) / i - 1] % MOD;
			y += h[l] * p[r - l];
			y %= MOD;
			return y == h[r];
		};
		if (check(1)) {
			cout << "YES" << '\n';
			continue;
		}
		for (int i : f[r - l]) {
			if (check(i)) {
				ans = 1;
				break;
			}
		}
		cout << (ans ? "YES" : "NO") << '\n';
	}
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
subtask214/14
2Elfogadva3ms2056 KiB
3Elfogadva3ms2436 KiB
4Elfogadva3ms2712 KiB
5Elfogadva3ms2952 KiB
6Elfogadva3ms2996 KiB
7Elfogadva3ms3136 KiB
8Elfogadva3ms3208 KiB
9Elfogadva3ms3552 KiB
10Elfogadva3ms3664 KiB
11Elfogadva3ms3848 KiB
12Elfogadva3ms3768 KiB
subtask327/27
13Elfogadva4ms4388 KiB
14Elfogadva3ms4472 KiB
15Elfogadva3ms4476 KiB
16Elfogadva3ms4132 KiB
17Elfogadva4ms4532 KiB
18Elfogadva4ms4680 KiB
19Elfogadva3ms4532 KiB
20Elfogadva3ms4472 KiB
21Elfogadva4ms4704 KiB
22Elfogadva4ms4788 KiB
subtask459/59
23Elfogadva14ms10156 KiB
24Elfogadva4ms5276 KiB
25Elfogadva14ms9680 KiB
26Elfogadva14ms10316 KiB
27Elfogadva12ms10312 KiB
28Elfogadva19ms10364 KiB
29Elfogadva20ms10412 KiB
30Elfogadva14ms10368 KiB
31Elfogadva272ms71260 KiB
32Elfogadva231ms71188 KiB
33Elfogadva32ms16676 KiB
34Elfogadva196ms63464 KiB
35Elfogadva230ms71292 KiB
36Elfogadva229ms71184 KiB
37Elfogadva138ms71176 KiB
38Elfogadva293ms71224 KiB
39Elfogadva319ms71184 KiB
40Elfogadva342ms71320 KiB
41Elfogadva358ms71312 KiB