链接:https://ac.nowcoder.com/acm/contest/67741
D-数组成鸡
思路
TODO
代码
TODO
H-01背包,但是bit
思路
枚举 m m m的每一位1,假设是第 i i i位。则对于每一个物品的重量 w j w_j wj,为了使总重量不超过 m m m,限制 w j w_j wj的第 i i i位为0,比第 i i i位高的部分是 m m m比第 i i i位高的部分的子集,比第 i i i位低的部分无限制。特别地,考虑 m m m的所有位, w j w_j wj必须是 m m m的子集。如此可覆盖所有情况,取价值之和最大的情况即可。
代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
const int MAXB = 30;
int T, n, m, v[MAXN], w;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> T;
while (T--) {
cin >> n >> m;
bitset<MAXB> bsm(m);
vector<bitset<MAXB>> bs;
long long ans = 0;
for (int i = 0; i < n; i++) {
cin >> v[i] >> w;
bs.emplace_back(bitset<MAXB>(w));
bool flag = true;
for (int j = 0; j < MAXB; j++) {
if (!bsm.test(j) && bs[i].test(j)) {
flag = false;
break;
}
}
if (flag) {
ans += v[i];
}
}
for (int i = 0; i < MAXB; i++) {
if (bsm.test(i)) {
long long s = 0;
for (int j = 0; j < n; j++) {
if (!bs[j].test(i)) {
bool flag = true;
for (int k = i + 1; k < MAXB; k++) {
if (bs[j].test(k) && !bsm.test(k)) {
flag = false;
break;
}
}
if (flag) {
s += v[j];
}
}
}
ans = max(ans, s);
}
}
cout << ans << '\n';
}
return 0;
}
I-It’s bertrand paradox. Again!
这题思路是对的但是不知道为什么比赛的时候一直WA。
思路
bit-noob的方法生成的坐标是均匀的,利用统计,计算输入的坐标分布情况。标程考虑的是横纵坐标绝对值不超过70的坐标,应该有 141 ∗ 141 199 ∗ 199 \frac{141*141}{199*199} 199∗199141∗141的概率出现,计算输入数据中这部分坐标的出现频率,设定一个阈值用于判断即可。
代码
#include <bits/stdc++.h>
using namespace std;
int n, x, y, r;
int main() {
ios::sync_with_stdio(false);
cin >> n;
int cnt = 0;
while (n--) {
cin >> x >> y >> r;
if (-70 <= x && x <= 70 && -70 <= y && y <= 70) {
cnt++;
}
}
double p = 141.0 * 141.0 / (199 * 199) * 1e5;
if (abs(p - cnt) > 2000) {
cout << "buaa-noob\n";
} else {
cout << "bit-noob\n";
}
return 0;
}
J-又鸟之亦心
思路
TODO
代码
TODO
K-牛镇公务员考试
思路
TODO
代码
TODO