int n, m, q, suf[maxn]; char s[maxn]; int mp[(int)5e7 + 5];
intmain(){ scanf("%s%d", s, &q); n = strlen(s); while (q--) { scanf("%d", &m); suf[n] = 0; mp[0] = n; int flag = 1, tot = 1; for (int i = n - 1; i >= 0; i--, tot = tot * 10 % m) { suf[i] = (suf[i + 1] + 1ll * (s[i] - '0') * tot) % m; if (mp[suf[i]]) { printf("%d %d\n", i + 1, mp[suf[i]]); flag = 0; break; } mp[suf[i]] = i; } if (flag) puts("-1"); for (int i = 0; i <= m; i++) mp[i] = 0; } return0; }
D
1 2 3 4 5 6 7 8 9 10
from math import pow
T = int(input())
defcal(x, k, m): return x // int(pow(k, m)) - x // int(pow(k, m + 1))
for i in range(T): l, r, k, m = map(int, input().split()) print(cal(r, k, m) - cal(l - 1, k, m))
vector<int> edge[maxn]; int n, m, a[maxn], b[maxn];
int vis[maxn], f[maxn]; intdp(int u){ if (vis[u]) return f[u]; vis[u] = 1; for (int& v: edge[u]) { f[u] = max(f[u], b[v] + dp(v)); } // dbg(u, f[u]); return f[u]; } intcheck(int x){ for (int i = 1; i <= n; i++) if (a[i] >= x) b[i] = 1; else b[i] = -1; for (int i = 1; i <= n; i++) f[i] = -inf, vis[i] = 0; f[n] = 0; return b[1] + dp(1) >= 0; }
intmain(){ scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) scanf("%d", a + i); while (m--) { int u, v; scanf("%d%d", &u, &v); edge[u].push_back(v); } int l = 0, r = 1e9, ans = -1; // check(4); while (l <= r) { int m = (l + r) >> 1; if (check(m)) ans = m, l = m + 1; else r = m - 1; } cout << ans << endl; return0; }