boolcheck(int d){ int cnt = 0; for(int i = 1; i <= n; ){ if(s[i] == '0') i ++ ; else i += d, cnt ++ ; } return cnt <= k; }
intmain(){ ios;
int T; cin >> T; while(T -- ){ cin >> n >> k >> s; s = " " + s; int l = 1, r = n; while(l < r){ int mid = l + r >> 1; if(check(mid)) r = mid; else l = mid + 1; } cout << r << "\n"; }
#define ios ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) constint N = 1e5 + 10; typedeflonglong ll; typedef pair<int, int> pii; #define se second #define fi first
pii a[N]; unordered_map<int, int> mp;
intmain(){ ios;
int n; cin >> n; for(int i = 1; i <= n; i ++ ){ cin >> a[i].se; mp[a[i].se] ++ ; // 统计元素出现次数 a[i].fi = mp[a[i].se]; } sort(a + 1, a + n + 1); // 按照出现次数为第一关键字排序
int res = 1; for(int i = 2; i <= n; i ++ ) res += (a[i].se - a[i - 1].se != 1); cout << res << '\n';
unordered_map<char, int> mp = {{'u', 0}, {'d', 1}, {'l', 2}, {'r', 3}}; string g[N]; // 只给了 n x m 大小范围,故需要采用字符串 int n, m, fa[N], ind[N]; // 并查集 和 入度
intgetID(int x, int y){ return (x - 1) * m + y; }
// 并查集 intfind(int x){ return fa[x] == x ? x : fa[x] = find(fa[x]); } voidmerge(int x, int y){ fa[find(x)] = find(y); }
// 判断在一个连通块中 boolcheck1(){ int f = find(1); for(int i = 2; i <= n * m; i ++ ) if(f != find(i)) returnfalse; returntrue; }
// 判断入度为0的点不超过1 boolcheck2(){ int cnt = 0; for(int i = 1; i <= n * m; i ++ ) cnt += (!ind[i]); return cnt <= 1; }
intmain(){ ios;
int T; cin >> T; while(T -- ){ cin >> n >> m; for(int i = 1; i <= n; i ++ ) cin >> g[i], g[i] = " " + g[i]; for(int i = 1; i <= n * m; i ++ ) fa[i] = i, ind[i] = 0;
for(int i = 1; i <= n; i ++ ) // 在输入 a_{i,j} 时就开始合并 for(int j = 1; j <= m; j ++ ){ int c = mp[g[i][j]], d; cin >> d; int ni = i + d * dx[c], nj = j + d * dy[c]; if(ni < 1 || ni > n || nj < 1 || nj > m) continue; // 出界 merge(getID(i, j), getID(ni, nj)); ind[getID(ni, nj)] ++ ; }
for(int i = h[u]; i; i = ne[i]){ int v = e[i]; if(dist[v] > dist[u] + w[i]){ dist[v] = dist[u] + w[i]; q.push({dist[v], v}); }elseif(dist[v] == dist[u] + w[i]){ w[i] ++ ; if(w[i] > K) returnfalse; } } }
returntrue; }
intmain(){ ios;
int T; cin >> T; while(T -- ){ cin >> n >> m >> K; memset(h, 0, sizeof(h)), idx = 0; for(int i = 1; i <= m; i ++ ){ int u, v; cin >> u >> v; add(u, v, 1); }
bool flag = dijkstra();
cout << (flag ? "Yes" : "No") << '\n'; if(flag){ for(int i = 1; i <= m; i ++ ) cout << w[i] << ' '; cout << '\n'; } }
#define ios ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) #define ls (u << 1) #define rs (u << 1 | 1)
typedeflonglong ll; constint N = 1e5 + 10;
int sum[2][N << 2], n, m, q; // 0 维护 x, 1 维护 y
voidpushup(int c, int u){ sum[c][u] = sum[c][ls] + sum[c][rs]; }
voidmodify(int c, int u, int l, int r, int k){ if(l == r){ sum[c][u] ^= 1; return; } int mid = l + r >> 1; if(k <= mid) modify(c, ls, l, mid, k); elsemodify(c, rs, mid + 1, r, k); pushup(c, u); }
ll query(int c, int u, int l, int r, int ql, int qr){ if(ql <= l && r <= qr) return sum[c][u]; int mid = l + r >> 1; ll res = 0; if(ql <= mid) res += query(c, ls, l, mid, ql, qr); if(qr > mid) res += query(c, rs, mid + 1, r, ql, qr); return res; }
intmain(){ ios;
cin >> n >> m >> q; // 初始全部为0 不需要事先建树 while(q -- ){ int op; cin >> op; if(op == 1){ int x, y; cin >> x >> y; modify(0, 1, 1, n, x); // 单点修改 x modify(1, 1, 1, m, y); // 单点修改 y }else{ int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; ll sx = query(0, 1, 1, n, x1, x2), sy = query(1, 1, 1, m, y1, y2); int lx = x2 - x1 + 1, ly = y2 - y1 + 1; cout << sx * ly + sy * lx - sx * sy * 2 << "\n"; // 容斥原理 } }