蓝桥杯 2025 省 B
这次参赛感觉就是经验宝宝,会做的题没看清楚题目要求,导致输入错误,不会做的题,不老老实实的用暴力法去拿样例分,硬要追求拿高分,结果啥也没拿到!!
A.移动距离
P12130 [蓝桥杯 2025 省 B] 移动距离
题目背景
本站蓝桥杯 2025 省赛测试数据均为洛谷自造,与官方数据可能存在差异,仅供学习参考。
题目描述
小明初始在二维平面的原点,他想前往坐标 \((233, 666)\)。在移动过程中,他只能采用以下两种移动方式,并且这两种移动方式可以交替、不限次数地使用:
- 水平向右移动,即沿着 \(x\) 轴正方向移动一定的距离。
- 沿着一个圆心在原点 \((0, 0)\)、以他当前位置到原点的距离为半径的圆的圆周移动,移动方向不限(即顺时针或逆时针移动不限)。
在这种条件下,他到达目的地最少移动多少单位距离?你只需要输出答案四舍五入到整数的结果。
输入格式
无
输出格式
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只需要编写一个程序输出这个整数,输出多余的内容将无法得分。
考试时的思路
也就是简单数学题,先向右走,再沿圆弧走,但考试时没认真看题目要求是:移动多少单位距离,还以为只是移动次数,废了,这都拿不到分。
难点是如何求圆弧的长度。L=角度*R;
代码
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout << int(sqrt(666 * 666 + 233 * 233) * (1 + atan(666.0 / 233))) << endl;
return 0;
}
总结
我竟然不知道有atan()这个函数,废了。
客流量上限
P12131 [蓝桥杯 2025 省 B] 客流量上限
题目描述
一家连锁旅馆在全国拥有 \(2025\) 个分店,分别编号为 \(1\) 至 \(2025\)。随着节日临近,总部决定为每家分店设定每日客流量的上限,分别记作 \(A_1, A_2, \dots , A_{2025}\)。这些上限并非随意分配,而是需要满足以下约束条件:
- \(A_1, A_2, \dots , A_{2025}\) 必须是 \(1\) 至 \(2025\) 的一个排列,即每个 \(A_i\) 均是 \(1\) 至 \(2025\) 之间的整数,且所有 \(A_i\) 互不相同。
- 对于任意分店 \(i\) 和 \(j\)(\(1 \leq i, j \leq 2025\),\(i\) 可等于 \(j\)),它们的客流量上限 \(A_i\) 和 \(A_j\) 的乘积不得超过 \(i \times j + 2025\)。
这些约束旨在平衡各分店客流压力,确保服务质量和运营稳定性。
现在,请你计算这样的分配方案究竟有多少种。由于答案可能很大,你只需输出其对 \(10^9 + 7\) 取余后的结果即可。
输入格式
无
输出格式
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只需要编写一个程序输出这个整数,输出多余的内容将无法得分。
考试时的思路
考试时直接想暴力枚举,然后判断每一个是否符合要求,但是一直陷入死循环,死了死了,心死了┏┛墓┗┓...(((m-__-)m。现在一想,枚举就算不陷入死循环,也会超时。因为每个循环要遍历2025次,而一共有2025个循环,就是20252025 ,太大了,但我又想不到其他方法。
正确思路
现在想一想,它给了你公式,肯定要从公式入手
因为(\(1 \leq i, j \leq 2025\),\(i\) 可等于 \(j\)),它们的客流量上限 \(A_i\) 和 \(A_j\) 的乘积不得超过 \(i \times j + 2025\) ,我们可以看到i可等于j,这样我们就可以得到一个只有i的不等式。即是 \(A{i}^2 \le i^2+2025\) ,把每个i带入不等式中,我们会发现(\(1014 \leq i \leq 2025\)):\(A{i} \le i\) 而 (\(1 \leq i \leq 1013\)):$A{i} \le $ 1013 ,即是1013在前1013中分完了,在i > 1013中,不会再出现0到1013,那么就只能取到i。这样我们已经分配好(\(1014 \leq i \leq 2025\))中的数了,我们只需要分配(\(1 \leq i \leq 1013\))中的数了;
那该怎么分解呢,还是要从公式入手,我们已经知道了(\(1014 \leq i \leq 2025\)):\(A{i} = i\) 所以:
对于任意的 \((1 \leq i \leq 1012, 1014 \leq j \leq 2025\)),都满足:\((A_iA_j = A_{ij} \leq ij + 2025\)),两边同除 \((j\)) 即:\((A_i \leq \lfloor i + 2025 / j \rfloor\)),任意 (j) 都要满足此式,所以根据 (j) 的范围可以得到
\([A_i \leq i + 1 (1 \leq i \leq 1012)\)]
我们可以看看在此式下是不是满足题目条件:\(((1 \leq i ,j\leq 1012)\)) \([A_iA_j \leq (i + 1)(j + 1) = ij + i + j + 1 \leq ij + 2025\)]
由于 \((i + j + 1 \leq 1012 + 1012 + 1 = 2025\)),所以满足题目条件。
也就是说:
- \((A_1\)) 可以取 \((1, 2\))
- \((A_2\)) 可以取 (1, 2, 3)
- \((A_3\)) 可以取 (1, 2, 3, 4)
那么 A1取法有 2 种,取了一个后 A2取法有 2 种,而 A1013 只能取 A1012 取剩下的
总共 21012种,使用快速幂或者暴力解都行
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MAXN = 2e3 + 5;
const ll MOD = 1e9 + 7;
ll fastPow(ll a, ll b){
ll ret = 1;
while(b) {
if(b & 1) ret = ret * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return ret;
}
ll qmi(int a, int b)
{
ll res = 1;
for(int i = 0; i < b; i++)
{
res *= b;
res %= MOD;
}
return res;
}
const int MOD = 1e9 + 7;
int qmi(int m, int k, int p) {
long long t = m, res = 1;
while (k ) {
if (k&1) res = res*t%p;
t = t*t%p;
k >>=1;
}
return res;
}
int power(int m, int k, int p) {
int res = 1;
while (k--)
res = res * m % p;
return res;
}
int main() {
//cout << fastPow(2, 1012) << "\n";
// for(int i = 1; i <= 1012; i++)
// {
// cout << i << ": "<< (int)(i+(2025/1014))<<endl;
// }
cout << fastPow(2, 1012) << "\n";
cout << qmi(2, 1012) << "\n";
}
总结
巩固快速幂的方法。
学会利用给出的公式,化简公式,从公式中得到信息
可分解的正整数
P12132 [蓝桥杯 2025 省 B] 可分解的正整数
题目背景
本站蓝桥杯 2025 省赛测试数据均为洛谷自造,与官方数据可能存在差异,仅供学习参考。
题目描述
定义一种特殊的整数序列,这种序列由连续递增的整数组成,并满足以下条件:
- 序列长度至少为 \(3\)。
- 序列中的数字是连续递增的整数(即相邻元素之差为 \(1\)),可以包括正整数、负整数或 \(0\)。
例如,\([1, 2, 3]\)、\([4, 5, 6, 7]\) 和 \([−1, 0, 1]\) 是符合条件的序列,而 \([1, 2]\)(长度不足)和 \([1, 2, 4]\)(不连续)不符合要求。
现给定一组包含 \(N\) 个正整数的数据 \(A_1, A_2, \dots , A_N\)。如果某个 \(A_i\) 能够表示为符合上述条件的连续整数序列中所有元素的和,则称 \(A_i\) 是可分解的。
请你统计这组数据中可分解的正整数的数量。
输入格式
输入的第一行包含一个正整数 \(N\),表示数据的个数。
第二行包含 \(N\) 个正整数 \(A_1, A_2, \dots , A_N\),表示需要判断是否可分解的正整数序列。
输出格式
输出一个整数,表示给定数据中可分解的正整数的数量。
输入输出样例 #1
输入 #1
3 3 6 15输出 #1
3说明/提示
样例说明
- \(A_i = 3\) 是可分解的,因为 \([0, 1, 2]\) 的和为 \(0 + 1 + 2 = 3\)。
- \(A_i = 6\) 是可分解的,因为 \([1, 2, 3]\) 的和为 \(1 + 2 + 3 = 6\)。
- \(A_i = 15\) 是可分解的,因为 \([4, 5, 6]\) 的和为 \(4 + 5 + 6 = 15\)。
所以可分解的正整数的数量为 \(3\)。
评测用例规模与约定
- 对于 \(30\%\) 的评测用例,\(1 \leq N \leq 100\),\(1 \leq A_i \leq 100\)。
- 对于 \(100\%\) 的评测用例,\(1 \leq N \leq 10^5\),\(1 \leq A_i \leq 10^9\)。
考试时的思路
正确思路
判断是否数字为1即可······
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MAXN = 2e5 + 5;
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
ll ans = 0, x = 0, n;
cin >> n;
for(int i = 1; i <= n; i ++) {
cin >> x;
ans += (x != 1);
}
cout << ans << "\n";
return 0;
}
总结
观察数字,别总是着急做下面的题目
产值调整
P12133 [蓝桥杯 2025 省 B] 产值调整
题目描述
偏远的小镇上,三兄弟共同经营着一家小型矿业公司“兄弟矿业”。公司旗下有三座矿山:金矿、银矿和铜矿,它们的初始产值分别用非负整数 \(A\)、\(B\) 和 \(C\) 表示。这些矿山的产出是小镇经济的核心,支撑着三兄弟和许多矿工家庭的生计。
然而,各矿山的产值波动剧烈,有时金矿收益高而银矿、铜矿低迷,有时则相反。这种不稳定性让公司收入难以预测,也常引发兄弟间的争执。为了稳定经营,三兄弟设计了一个公平的产值调整策略,每年执行一次,每次调整时,将根据当前的产值 \(A\)、\(B\)、\(C\),计算新产值:
- 金矿新产值:\(A'=\lfloor \dfrac{B+C}{2} \rfloor\);
- 银矿新产值:\(B'=\lfloor \dfrac{A+C}{2} \rfloor\);
- 铜矿新产值:\(C'=\lfloor \dfrac{A+B}{2} \rfloor\);
其中,\(\lfloor \rfloor\) 表示向下取整。例如,\(\lfloor 3.7\rfloor = 3\),\(\lfloor 5.2\rfloor = 5\)。
计算出 \(A'\)、\(B'\)、\(C'\) 后,同时更新:\(A\) 变为 \(A'\),\(B\) 变为 \(B'\),\(C\) 变为 \(C'\),作为下一年调整的基础。
三兄弟认为这个方法能平衡产值波动,于是计划连续执行 \(K\) 次调整。现在,请你帮他们计算,经过 \(K\) 次调整后,金矿、银矿和铜矿的产值分别是多少。
输入格式
输入的第一行包含一个整数 \(T\),表示测试用例的数量。
接下来的 \(T\) 行,每行包含四个整数 \(A,B,C,K\),分别表示金矿、银矿和铜矿的初始产值,以及需要执行的调整次数。
输出格式
对于每个测试用例,输出一行,包含三个整数,表示经过 \(K\) 次调整后金矿、银矿和铜矿的产值,用空格分隔。
输入输出样例 #1
输入 #1
2 10 20 30 1 5 5 5 3输出 #1
25 20 15 5 5 5说明/提示
评测用例规模与约定
- 对于 \(30\%\) 的评测用例,\(1 \leq T \leq 100\),\(1 \leq A, B, C, K \leq 10^5\)。
- 对于 \(100\%\) 的评测用例,\(1 \leq T \leq 10^5\),\(1 \leq A, B, C, K \leq 10^9\)。
考试时的思路
暴力暴力,就只会暴力,急什么。
貌似有规律,先打个表看看。
发现操作几次后,所有值就一样了。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MAXN = 2e5 + 5;
ll Tex, a, b, c, k;
void AC() {
//cin >> a >> b >> c >> k;
k = min(k, 100ll);
int a = 10, b = 20, c = 30 ,k =100;
while(k --) {
ll tmp1, tmp2, tmp3;
tmp1 = (b + c) / 2;
tmp2 = (a + c) / 2;
tmp3 = (a + b) / 2;
a = tmp1;
b = tmp2;
c = tmp3;
cout << a << " " << b << " " << c << "\n";
}
// cout << a << " " << b << " " << c << "\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> Tex;
while(Tex --) AC();
return 0;
}
总结
有工具就用工具,找规律呗
看数据范围大,就不要一开始就想着暴力
画展布置
P12134 [蓝桥杯 2025 省 B] 画展布置
题目描述
画展策展人小蓝和助理小桥为即将举办的画展准备了 \(N\) 幅画作,其艺术价值分别为 \(A_1, A_2, \dots , A_N\)。他们需要从这 \(N\) 幅画中挑选 \(M\) 幅,并按照一定顺序布置在展厅的 \(M\) 个位置上。如果随意挑选和排列,艺术价值的变化可能会过于突兀,导致观众的观展体验不够流畅。
为了优化布置,他们查阅了《画展布置指南》。指南指出,理想的画展应使观众在欣赏画作时,艺术价值的过渡尽量平缓。指南建议,选择并排列 \(M\) 幅画,应使艺术价值的变化程度通过一个数值 \(L\) 来衡量,且该值越小越好。数值 \(L\) 的定义为:
\[L=\sum_{i=1}^{M-1} |B_{i+1}^2-B_i^2| \]其中 \(B_i\) 表示展厅第 \(i\) 个位置上画作的艺术价值。
现在,他们希望通过精心挑选和排列这 \(M\) 幅画作,使 \(L\) 达到最小值,以提升画展的整体协调性。请你帮他们计算出这个最小值是多少。
输入格式
输入共两行。
第一行包含两个正整数 \(N\) 和 \(M\),分别表示画作的总数和需要挑选的画作数量。
第二行包含 \(N\) 个正整数 \(A_1, A_2, \dots , A_N\),表示每幅画作的艺术价值。
输出格式
输出一个整数,表示 \(L\) 的最小值。
输入输出样例 #1
输入 #1
4 2 1 5 2 4输出 #1
3说明/提示
评测用例规模与约定
- 对于 \(40\%\) 的评测用例,\(2 \leq M \leq N \leq 10^3\),\(1 \leq A_i \leq 10^3\)。
- 对于 \(100\%\) 的评测用例,\(2 \leq M \leq N \leq 10^5\),\(1 \leq A_i \leq 10^5\)。
考试时的思路
根据公式分析,肯定是越小$$L= |B_{i+1}2-B_i2|$$这段越小越好,如何做到小呢,肯定是两者差值越小。
所以就先排序,再枚举每一个区间,对排序后的数组中找连续的区间,用滑动区间就行了。
代码
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long LL;
const int N = 100010;
int n, m;
LL res = 1e18;
LL a[N];
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i ++ ) cin >> a[i], a[i] *= a[i];
sort(a + 1, a + n + 1);
for (int l = 1, r = m; r <= n; l ++ , r ++ ) res = min(res, a[r] - a[l]);
cout << res << endl;
return 0;
}
总结
前几道题不用想的太复杂了。
画展布置
P12134 [蓝桥杯 2025 省 B] 画展布置
题目描述
画展策展人小蓝和助理小桥为即将举办的画展准备了 \(N\) 幅画作,其艺术价值分别为 \(A_1, A_2, \dots , A_N\)。他们需要从这 \(N\) 幅画中挑选 \(M\) 幅,并按照一定顺序布置在展厅的 \(M\) 个位置上。如果随意挑选和排列,艺术价值的变化可能会过于突兀,导致观众的观展体验不够流畅。
为了优化布置,他们查阅了《画展布置指南》。指南指出,理想的画展应使观众在欣赏画作时,艺术价值的过渡尽量平缓。指南建议,选择并排列 \(M\) 幅画,应使艺术价值的变化程度通过一个数值 \(L\) 来衡量,且该值越小越好。数值 \(L\) 的定义为:
\[L=\sum_{i=1}^{M-1} |B_{i+1}^2-B_i^2| \]其中 \(B_i\) 表示展厅第 \(i\) 个位置上画作的艺术价值。
现在,他们希望通过精心挑选和排列这 \(M\) 幅画作,使 \(L\) 达到最小值,以提升画展的整体协调性。请你帮他们计算出这个最小值是多少。
输入格式
输入共两行。
第一行包含两个正整数 \(N\) 和 \(M\),分别表示画作的总数和需要挑选的画作数量。
第二行包含 \(N\) 个正整数 \(A_1, A_2, \dots , A_N\),表示每幅画作的艺术价值。
输出格式
输出一个整数,表示 \(L\) 的最小值。
输入输出样例 #1
输入 #1
4 2 1 5 2 4输出 #1
3说明/提示
评测用例规模与约定
- 对于 \(40\%\) 的评测用例,\(2 \leq M \leq N \leq 10^3\),\(1 \leq A_i \leq 10^3\)。
- 对于 \(100\%\) 的评测用例,\(2 \leq M \leq N \leq 10^5\),\(1 \leq A_i \leq 10^5\)。
考试时的思路
考试时天天想的是那个鬼dfs,又难写,又写不出来。
公式推导$$L=\sum_{i=1}^{M-1} |B_{i+1}2-B_i2|$$=\(|B_{m}^2-B_1^2|\)
代码
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long LL;
const int N = 100010;
int n, m;
LL res = 1e18;
LL a[N];
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i ++ ) cin >> a[i], a[i] *= a[i];
sort(a + 1, a + n + 1);
for (int l = 1, r = m; r <= n; l ++ , r ++ ) res = min(res, a[r] - a[l]);
cout << res << endl;
return 0;
}
总结
公式化简
水质检测
P12135 [蓝桥杯 2025 省 B] 水质检测
题目描述
小明需要在一条 \(2 \times n\) 的河床上铺设水质检测器。在他铺设之前,河床上已经存在一些检测器。如果两个检测器上下或者左右相邻,那么这两个检测器就是互相连通的。连通具有传递性,即如果 \(A\) 和 \(B\) 连通,\(B\) 和 \(C\) 连通,那么 \(A\) 和 \(C\) 也连通。现在他需要在河床上增加铺设一些检测器使得所有的检测器都互相连通。他想知道最少需要增加铺设多少个检测器?
输入格式
输入共两行,表示一个 \(2 \times n\) 的河床。
每行一个长度为 \(n\) 的字符串,仅包含
#和.,其中#表示已经存在的检测器,.表示空白。输出格式
输出共 \(1\) 行,一个整数表示答案。
输入输出样例 #1
输入 #1
.##.....# .#.#.#...输出 #1
5说明/提示
样例说明
其中一种方案:
.###....# .#.######增加了 5 个检测器。
评测用例规模与约定
对于 \(100\%\) 的评测用例,保证 \(n \leq 1000000\)。
考试时的思路
考试前好像还做到过这种题目,结果还是不会做
dp问题;
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
int f[N] = {0}; // 正确初始化数组
int main() {
string a, b;
cin >> a >> b;
// 填充 f 数组
for (int i = 0; i < a.size(); i++) {
if (a[i] == '#' && b[i] == '#') f[i] = 3;
else if (a[i] == '#' && b[i] == '.') f[i] = 1;
else if (a[i] == '.' && b[i] == '#') f[i] = 2;
//cout << f[i] << endl;
}
int ret = 0;
int pre = -1, prei = 0;
for (int i = 0; i < a.size(); i++) {
if (f[i] == 0) continue;
if (pre == -1) {
pre = f[i];
prei = i;
} else if ((f[i] == 1 && pre == 1) || (f[i] == 2 && pre == 2) || (f[i] == 3 && pre == 3) ) {
ret += (i - prei - 1);
pre = f[i];
prei = i;
} else if ((f[i] == 1 && pre == 3) || (f[i] == 2 && pre == 3) || (f[i] == 3 && pre == 1) || (f[i] == 3 && pre == 2)) {
ret += (i - prei - 1);
pre = f[i];
prei = i;
} else if ((f[i] == 1 && pre == 2) || (f[i] == 2 && pre == 1)) {
ret += (i - prei);
pre = 3;
prei = i;
}
//cout << i <<":" << ret << endl;
}
cout << ret << endl;
return 0;
}
总结
考试这种情况数量少的,模拟出他不同情况的最优解。
简化代码:就是提出公共部分。
生产车间
P12136 [蓝桥杯 2025 省 B] 生产车间
题目描述
小明正在改造一个生产车间的生产流水线。这个车间共有 \(n\) 台设备,构成以 \(1\) 为根结点的一棵树,结点 \(i\) 有权值 \(w_i\)。其中叶节点的权值 \(w_i\) 表示每单位时间将产出 \(w_i\) 单位的材料并送往父结点,根结点的权值 \(w_i\) 表示每单位时间内能打包多少单位成品,其他结点的权值 \(w_i\) 表示每单位时间最多能加工 \(w_i\) 单位的材料并送往父结点。
由于当前生产线中某些结点存在产能不够的问题导致生产线无法正常运行,即存在某些结点每单位时间收到的材料超过了当前结点的加工能力上限。小明计划删除一些结点使得所有结点都能正常运行。他想知道删除一些结点后根结点每单位时间内最多能打包多少单位的成品?
输入格式
输入共 \(n + 1\) 行。
第一行为一个正整数 \(n\)。
第二行为 \(n\) 个由空格分开的正整数 \(w_1,w_2, \dots,w_n\)。
后面 \(n - 1\) 行,每行两个整数表示树上的一条边连接的两个结点。
输出格式
输出共一行,一个整数代表答案。
输入输出样例 #1
输入 #1
9 9 7 3 7 1 6 2 2 7 1 2 1 3 2 4 2 5 2 6 6 7 6 8 6 9输出 #1
8说明/提示
样例说明
删掉结点 \(4\)、\(9\) 后生产线满足条件,根结点 \(1\) 每单位时间将打包出 \(8\) 单位的成品。
评测用例规模与约定
- 对于 \(20\%\) 的评测用例,\(2 \leq n \leq 100\)。
- 对于 \(100\%\) 的评测用例,\(2 \leq n \leq 1000\),\(1\leq w_i \leq 1000\)。
考试时的思路
考试时啥也没看看了,但后面看时间慌了,结果不会写背包问题了
代码
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr ll MOD = (int)1e9+7;
constexpr int N = (int)1e3+1;
int w[N];
vector<int> E[N];
vector<int> dfs(const int& p)
{
if(!E[p].size()) return vector<int>({w[p]});
bitset<N> st;
vector<int> cur;
for(const auto& v:E[p])
{
bitset<N> tmp(st);
for(const auto& num:dfs(v))
{
st|=tmp<<num, st.set(num); //左移是加上这个数,|是这个数
// cout << num <<" " << st <<endl;
}
}
for(int v=w[p];v;v--)
if(st[v])
{
cur.emplace_back(v);
cout << v << endl;
}
cout << st;
return cur;
}
int main()
{
cin.tie(0)->sync_with_stdio(0);
int n,u,v;
cin >> n;
for(int i=1;i<=n;++i) cin >> w[i];
for(int i=1;i<n;++i) cin >> u >> v, E[min(u,v)].push_back(max(u,v));
vector<int> ans = dfs(1);
int res{};
for(const auto& v:ans)
if(v<=w[1]) res = max(res,v);
cout << res;
return 0;
}
总结
已经过了一周,才来做总结。
这次估计是什么也拿不到,看运气好不好,能不能拿个省3,总结一下这次的经验:
- 对A题,没有认真审题,导致会做的,搞不对。
- 对前6道题目,想的太难了,导致全都用暴力法去实现,本来一些就是很简单的算法思想,而不是要你去写程序。这样就算你暴力法写对了, 也只能拿30%的分数,费时又不讨好
- 对于有公式的题目,要对公式进行研究,进行化简和推导
- 对于找规律的题,可以利用暴力循环找
- 对于dp问题,是把下一步的每种情况列出来研究
经过这次比赛,虽然没有拿到什么奖,但还是收获了很多,我要明白每一次学习,都是为了学习知识,而不是为了拿奖,拿奖是在你认认真真,勤勤恳恳学习后水到渠成的。
接下来,可以把算法类知识放缓,先把前面漏的许多课堂知识补上来,还是四级,之后的考研任务。。。。。

浙公网安备 33010602011771号