intsolve(int st, int d) { int res = 0; for (int i = st; i <= n; i += d) chkmax(res, ++ cnt[s[i] - 'a']); for (int i = st; i <= n; i += d) -- cnt[s[i] - 'a']; // printf("%d %d %d\n", st, d, res); return res; }
intmain() { std::cin >> n >> k >> (s + 1); for (int i = 1; i <= n; ++ i) { if (n % i) continue; int res = n; for (int j = 1; j <= i; ++ j) res -= solve(j, i); if (res <= k) printf("%d\n", i), exit(0); } return0; }
intmain() { scanf("%d%s", &n, s + 1); for (int i = 1; i <= n; ++ i) { if (s[i] ^ 'R') continue; int len = 1; while (i > len && i + len <= n && s[i - len] == 'A' && s[i + len] == 'C') len ++; if (len > 2) al.push_back(len - 1); else cnt += len == 2; } std::sort(al.begin(), al.end()); sz = al.size(); int ans = 0, i = 0, j = 0; while (1) { ++ ans; if (ans & 1) { while (i < sz && al[i] <= 1) ++ i; if (i >= sz) break; al[i] --; } else { if (cnt) { -- cnt; continue; } if (j >= sz) { break; } al[j ++] = 0; } } -- ans; int cur = 0; for (int &x : al) assert(x >= 0 && x <= 1), cur += x; printf("%d\n", ans + cur + cnt); return0; }
voiddfs(int x, int fa = 0) { vis[x] = 1, sz ++; for (int v : g[x]) if (v ^ fa) { if (vis[v]) { flag = 1; continue; } dfs(v, x); } }
intmain() { std::cin >> n; fact[0] = 1; for (int i = 1; i <= n; ++ i) fact[i] = (LL) fact[i - 1] * i % Mod; for (int i = 1; i <= n; ++ i) scanf("%d", &a[i]); for (int i = 1; i <= n; ++ i) { if (!~a[i]) continue; g[a[i]].pb(i), g[i].pb(a[i]); } int excnt = 0, res = 0, mul; for (int i = 1; i <= n; ++ i) excnt += !~a[i]; mul = qpow(n, excnt); std::vector<int> vad; for (int i = 1; i <= n; ++ i) { if (vis[i]) continue; sz = 0, flag = 0, dfs(i); if (flag) { adj(res += mul - Mod); continue; } vad.pb(sz); } int cnt = vad.size(); f[0] = 1; for (int x : vad) for (int j = cnt - 1; ~j; -- j) if (f[j]) f[j + 1] = (f[j + 1] + (LL) f[j] * x) % Mod; for (int i = 1; i <= cnt; ++ i) if (f[i]) res = (res + (LL) f[i] * qpow(n, cnt - i) % Mod * fact[i - 1]) % Mod; std::cout << res << std::endl; return0; }
E
题意:构造 的网格,每个数在 ,要求 , 不全相等。。
不是很好构造,虽然代码不超过 20 行:
1 2 3 4 5 6 7 8 9 10
constint B = 23;
intmain() { int n, m; std::cin >> n >> m; for (int i = 1; i <= n; ++ i, puts("")) for (int j = 1; j <= m; ++ j) printf("%d ", ((i / B) * (j / B) + i + j) % B + 1); return0; }
Related Issues not found
Please contact @mydcwfy to initialize the comment