91472024-02-15 22:09:57111Periodikus Szavakcpp17Időlimit túllépés 41/100579ms45512 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].reserve(8);
		g[i].push_back(1);
		for (int j = 1, k = p[i]; i * j <= N; j++, k = k * p[i] % MOD) {
			g[i].push_back((g[i][j - 1] + k) % MOD);
		}
	}
	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 = 2; i * i < r - l; i++) {
			if ((r - l) % i) {
				continue;
			}
			if (check(i) || check((r - l) / i)) {
				ans = 1;
				break;
			}
		}
		cout << (ans ? "YES" : "NO") << '\n';
	}
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
subtask214/14
2Elfogadva3ms2016 KiB
3Elfogadva3ms2240 KiB
4Elfogadva3ms2464 KiB
5Elfogadva3ms2672 KiB
6Elfogadva2ms2624 KiB
7Elfogadva3ms2640 KiB
8Elfogadva3ms2880 KiB
9Elfogadva3ms2968 KiB
10Elfogadva3ms3052 KiB
11Elfogadva3ms3052 KiB
12Elfogadva3ms2924 KiB
subtask327/27
13Elfogadva4ms3480 KiB
14Elfogadva3ms3404 KiB
15Elfogadva3ms3292 KiB
16Elfogadva3ms3024 KiB
17Elfogadva3ms3276 KiB
18Elfogadva4ms3300 KiB
19Elfogadva4ms3296 KiB
20Elfogadva3ms3496 KiB
21Elfogadva3ms3440 KiB
22Elfogadva4ms3440 KiB
subtask40/59
23Elfogadva21ms7136 KiB
24Elfogadva4ms3824 KiB
25Elfogadva18ms6504 KiB
26Elfogadva21ms7036 KiB
27Elfogadva8ms7028 KiB
28Elfogadva24ms7032 KiB
29Elfogadva27ms7284 KiB
30Elfogadva21ms7472 KiB
31Elfogadva488ms45512 KiB
32Elfogadva486ms45396 KiB
33Elfogadva52ms11152 KiB
34Elfogadva409ms40304 KiB
35Elfogadva486ms45456 KiB
36Elfogadva488ms45440 KiB
37Elfogadva81ms45432 KiB
38Időlimit túllépés508ms45424 KiB
39Időlimit túllépés566ms24016 KiB
40Időlimit túllépés518ms45468 KiB
41Időlimit túllépés579ms23992 KiB