23-24赛季S级第4周
P1334 瑞瑞的木板
这道题想都没想直接合并果子过掉
P8743 [蓝桥杯 2021 省 A] 异或数列
思路
这道题是到思维题,我们先来看一看这道题如何理解:首先可以看作
code
#include <iostream> #include <algorithm> using namespace std; const int MaxN = 2e5 + 10, MaxM = 22; int cnt[MaxM], n, t; int main() { for (cin >> t; t; t--) { fill(cnt, cnt + 21 + 1, 0); cin >> n; for (int i = 1, x; i <= n; i++) { cin >> x; for (int j = 21; j >= 0; j--) { cnt[j] += bool(x & (1 << j)); } } int flag = 0; for (int i = 21; i >= 0; i--) { if (cnt[i] % 2 == 0) { continue; } flag = (cnt[i] == 1 || (n - cnt[i]) % 2 == 0) ? 1 : -1; break; } cout << flag << endl; } return 0; }
P8756 [蓝桥杯 2021 省 AB2] 国际象棋
思路
状压
code
#include <iostream> using namespace std; const int MaxN = 110, mod = 1e9 + 7; long long dp[MaxN][21][1 << 6][1 << 6], n, m, k, ans; int G(int x) { int cnt = 0; while (x) { cnt += x % 2, x /= 2; } return cnt; } int main() { cin >> n >> m >> k; dp[0][0][0][0] = 1; for (int i = 1; i <= m; i++) { for (int j = 0; j <= k; j++) { for (int k = 0; k < (1 << n); k++) { for (int l = 0; l < (1 << n); l++) { for (int p = 0; p < (1 << n); p++) { if ((k & (l >> 2)) || (k & (l << 2)) || (k & (p >> 1)) || (k & (p << 1))) { } else if (j >= G(k)) { dp[i][j][k][l] = (dp[i][j][k][l] + dp[i - 1][j - G(k)][l][p]) % mod; } } } } } } for (int i = 0; i < (1 << n); i++) { for (int j = 0; j < (1 << n); j++) { ans = (ans + dp[m][k][i][j]) % mod; } } cout << ans << endl; return 0; }
本文作者:yabnto
本文链接:https://www.cnblogs.com/ybtarr/p/17927098.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步