#include<bits/stdc++.h> #define int long long usingnamespace std; using ll = longlong; using arr2 = array<int, 2>; using arr3 = array<int, 3>; constint N = (int)2e5 + 9; constint M = (int)1e5 + 9; constint mod = (int)1e9 + 7;
voidsolve(){ int k, x; cin >> k >> x; cout << x * k + 1 << "\n"; }
#include<bits/stdc++.h> #define int long long usingnamespace std; using ll = longlong; using arr2 = array<int, 2>; using arr3 = array<int, 3>; constint N = (int)2e5 + 9; constint M = (int)1e5 + 9; constint mod = (int)1e9 + 7;
voidsolve(){ int n; cin >> n;
int a[n+1]; for (int i = 1; i <= n; i++) cin >> a[i];
int sum = 0; for (int i = 2; i <= n; i++) sum += abs(a[i]-a[i-1]);
int ans = min(sum - abs(a[2]-a[1]), sum - abs(a[n]-a[n-1])); for (int i = 2; i < n; i++) { ans = min(ans, sum - abs(a[i+1]-a[i]) - abs(a[i]-a[i-1]) + abs(a[i+1]-a[i-1])); }
#include<bits/stdc++.h> #define int long long usingnamespace std; using ll = longlong; using arr2 = array<int, 2>; using arr3 = array<int, 3>; constint N = (int)2e5 + 9; constint M = (int)1e5 + 9; constint mod = (int)1e9 + 7;
#include<bits/stdc++.h> #define int long long usingnamespace std; using ll = longlong; using arr2 = array<int, 2>; using arr3 = array<int, 3>; constint N = (int)2e5 + 9; constint M = (int)1e5 + 9; constint mod = (int)1e9 + 7;
voidsolve(){ int n; cin >> n; int a = (1ll << n) - 1; vector<int> ans; ans.push_back(a); for (int i = n - 1; i >= 0; i--) { a = a ^ (1ll << i); for (int j = 0; j < (1 << (n - i - 1)); j++) { ans.push_back(a + (j << (i + 1))); } } for (auto i : ans) cout << i << " "; cout << "\n";
两个阵营, 有$x$人属于阵营 A, 有$y$人属于阵营 B, 现将所有人分成$n$组,同时一个长度为$n$的二进制字符串$s$, 0 表示该组阵营 A 人数必须严格大于阵营 B, 反之, 阵营 B 人数必须严格大于阵营 A. 同时给定数组$p$,必须满足第$i$个小组的总人数必须大于等于$p_i$ 问是否能将两阵营的人共同构造出满足情况的分组方式, 能的话输出”YES”否则输出”NO”
分析:
观察样例的”NO”情况样例, 不难发现
数组$p$的总人数不能大于阵营总人数
考虑特殊情况, 如果所有分组都是阵营 A 获胜(字符串$s$全 0), 那么必须 $x - y \ge n$
#include<bits/stdc++.h> #define int long long usingnamespace std; using ll = longlong; using arr2 = array<int, 2>; using arr3 = array<int, 3>; constint N = (int)2e5 + 9; constint M = (int)1e5 + 9; constint mod = (int)1e9 + 7;
voidsolve(){ int n, x, y; cin >> n >> x >> y; string s; cin >> s; vector<int> p(n + 5); int sum = 0; for (int i = 1; i <= n; i++) { cin >> p[i]; sum += p[i]; } int cnta = 0, cntb = 0; int cba = 0, cbb = 0; for (int i = 0; i < s.size(); i++) { if (s[i] == '0') { cnta++; cba += p[i + 1] / 2 + 1; } else { cntb++; cbb += p[i + 1] / 2 + 1; } } if (cnta == n) { if (x - y < cnta) { cout << "NO\n"; return ; } } if (cntb == n) { if (y - x < cntb) { cout << "NO\n"; return ; } } if (x < cnta || y < cntb || x < cba || y < cbb) { cout << "NO\n"; return ; } if (sum > x + y) { cout << "NO\n"; return ; } cout << "YES\n"; }