91482024-02-15 22:12:00111Periodikus Szavakcpp17Időlimit túllépés 41/100578ms35544 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;
		}
	}
	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
2Elfogadva3ms2020 KiB
3Elfogadva3ms2256 KiB
4Elfogadva3ms2336 KiB
5Elfogadva3ms2560 KiB
6Elfogadva3ms2756 KiB
7Elfogadva3ms2976 KiB
8Elfogadva3ms3104 KiB
9Elfogadva3ms3184 KiB
10Elfogadva3ms3548 KiB
11Elfogadva3ms3580 KiB
12Elfogadva3ms3708 KiB
subtask327/27
13Elfogadva3ms4036 KiB
14Elfogadva3ms3948 KiB
15Elfogadva4ms4084 KiB
16Elfogadva3ms4064 KiB
17Elfogadva4ms4472 KiB
18Elfogadva4ms4520 KiB
19Elfogadva4ms4516 KiB
20Elfogadva3ms4656 KiB
21Elfogadva3ms4744 KiB
22Elfogadva4ms4736 KiB
subtask40/59
23Elfogadva21ms7008 KiB
24Elfogadva4ms5000 KiB
25Elfogadva18ms6736 KiB
26Elfogadva21ms7060 KiB
27Elfogadva8ms7016 KiB
28Elfogadva24ms6956 KiB
29Elfogadva26ms7212 KiB
30Elfogadva21ms7424 KiB
31Elfogadva486ms35308 KiB
32Elfogadva486ms35288 KiB
33Elfogadva52ms10364 KiB
34Elfogadva405ms31656 KiB
35Elfogadva477ms35284 KiB
36Elfogadva500ms35276 KiB
37Elfogadva81ms35300 KiB
38Időlimit túllépés501ms35396 KiB
39Időlimit túllépés570ms19588 KiB
40Időlimit túllépés517ms35544 KiB
41Időlimit túllépés578ms19648 KiB