2021年(12届)蓝桥杯CB组练习,并附上个人题解

张开发
2026/6/11 9:46:24 15 分钟阅读
2021年(12届)蓝桥杯CB组练习,并附上个人题解
蓝桥杯21年CB组省赛自测得分95/150。ac题目ADEFG目录ACDEF:G:HA把256MB转成bit就行答案为ans 256 * 1024 * 1024 / 4;C遍历每个x1x2y1y2 将 公式 kx b y 放入到set里自动去重最后输出set的size就行D分解质因数后放到a里面对a进行xyz三重循环找到a[x]*a[y]*a[x] nans1for(ll i0; ix; i){ for(ll j0; jx; j){ if(a[i]*a[j]n) continue; //剪枝 for(ll k0; kx; k){ if(a[i]*a[j]*a[k]n) ans; } } }Efloyd算法通过lcm建好图后floyd找出 1 到 2021 的最短路径int lcm(int a,int b) { return a*b/__gcd(a,b); } if(abs(i-j)21) { g[i][j] lcm(i,j); } for(int k1; k2021; k) { for(int i1; i2021; i) { for(int j1; j2021; j) { g[i][j] min(g[i][j],g[i][k]g[k][j]); } } } cout g[1][2021]; 即可F:动态规划dp[j] 为 能否取到j这个值状态转移方程为 if dp[j - a[i]] 1 dp[j] 1; || else if dp[ja[i]] 1, dp[j] 1;即j减上当前砝码重量可以找出这个值那么j也是合法的因为左右都可以加相当于一次是加这个砝码 一次是减这个砝码跑两遍就行dp[0] 1; for (int i0; in;i ) { for (int jsum; j0; j--) { if (dp[j - a[i]] 1) { if (dp[j] 0) { dp[j] 1; ans; } } } } for (int i0; in; i) { for (int j0; jsum-a[i]; j) { if (dp[j a[i]] 1) { if (dp[j] 0) { dp[j] 1; ans; } } } }G:这道题用的邪修法拿到了70%的分数我们首先发现对每个数他会顺序排在画圈的这一斜列从 1 到 n而他有大概率超过一半会是在这一列第一次出现那我们直接把这个位置当作他出现的第一个位置就大概率能蒙对他的位置然后打表把1-10的位置先写出来 如果小于10直接输出就行先拿下20的分数int cnt[11] {0,1,5,8,12,17,13,30,38,47,18};同时我们会发现这个位置的值其实就是 1..... n) 2,一个等差数列也就是 n*n1/2 2int main() { int cnt[11] {0,1,5,8,12,17,13,30,38,47,18}; ll n; cin n; if (n 10) cout cnt[n]; else { ll ans n * (n1) / 2; cout ans2; } }最后在剩下80%的样例中拿到了50%的分数 正确率为67.5%H正解太难想了直接暴力每次都sort一下然后输出while (m--) { int p, q; cin p q; if (p 0) { sort(a.begin(), a.begin() q, greaterint()); } else { sort(a.begin() q - 1, a.end()); } }拿到了60%的分数。

更多文章