91492024-02-15 22:14:34111Periodikus Szavakcpp17Időlimit túllépés 41/100570ms34420 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;
			if (g[i][j] >= MOD) {
				g[i][j] -= 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
1Elfogadva3ms1824 KiB
subtask214/14
2Elfogadva3ms2016 KiB
3Elfogadva3ms2256 KiB
4Elfogadva3ms2472 KiB
5Elfogadva3ms2820 KiB
6Elfogadva3ms2804 KiB
7Elfogadva3ms3004 KiB
8Elfogadva3ms2972 KiB
9Elfogadva3ms3156 KiB
10Elfogadva3ms3296 KiB
11Elfogadva3ms3376 KiB
12Elfogadva3ms3376 KiB
subtask327/27
13Elfogadva3ms3580 KiB
14Elfogadva3ms3580 KiB
15Elfogadva4ms3580 KiB
16Elfogadva3ms3612 KiB
17Elfogadva3ms4048 KiB
18Elfogadva3ms4008 KiB
19Elfogadva3ms4004 KiB
20Elfogadva3ms4008 KiB
21Elfogadva3ms4012 KiB
22Elfogadva4ms4112 KiB
subtask40/59
23Elfogadva21ms6492 KiB
24Elfogadva4ms4384 KiB
25Elfogadva18ms6120 KiB
26Elfogadva21ms6168 KiB
27Elfogadva8ms6168 KiB
28Elfogadva24ms6172 KiB
29Elfogadva26ms6424 KiB
30Elfogadva21ms6528 KiB
31Időlimit túllépés510ms34388 KiB
32Elfogadva488ms34396 KiB
33Elfogadva52ms9476 KiB
34Elfogadva412ms30776 KiB
35Elfogadva483ms34404 KiB
36Elfogadva483ms34420 KiB
37Elfogadva86ms34392 KiB
38Időlimit túllépés505ms34400 KiB
39Időlimit túllépés566ms18572 KiB
40Időlimit túllépés517ms34416 KiB
41Időlimit túllépés570ms18572 KiB