自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 第十四届蓝桥杯省赛PythonB组

/ 如果选,那么 i - 1不能选,从前 i - 2 转移而来 ,所以 f[i - 2] + str[i] - 'a' + 1。// 因为我们在枚举到 i 时,i - 2 其实已经得到最小值了,若是从 i - 2 转移,一定要比从 i - 3转移更优。// 因为 如果从i - 3 转移更优的话,f[i - 2] 一定是等于 f[i - 3] 的,因为每次都得判断 i。i <= i - 2;// 如果 i - 3 不是最优的,也就是需要 i - 2,那么从f[i - 2]转移更优一点。

2024-01-17 19:57:17 929

原创 贪心+蓝桥杯

题目思路 : 思路很简单,肯定是贪心做法,要使总代价最小,需用那些出现次数比avg多的数来替换那些没有出现或者是出现次数少于avg的数, 所以我们存当前数每次出现的代价是多少 ,枚举每一个 0 - 9 之间的数 ,如果当前数出现的次数多于avg,那么说明需要减少,每次用最小的代价替换即可。由于我们并不知道替换的数是哪一个,但由于题目中说明了每个数都会出现 n / 10 次,所以证明一旦多出来的数必定会替换为另一个数,故我们只需要从小到大替换,将 avg 个当前数中价值最大的保存即可。

2024-01-16 19:39:45 553

原创 蓝桥杯C组-填充-贪心

思路:首先要求 00 11 尽可能的多,所以尽可能多的多配对,配对只在i , i + 1之间发生,所以只需要关注str[i] 和 str[i + 1]即可,如果str[i] == str[i + 1] ,那么一定配对,res ++ , 否则说明只有 str[i] == 0 && str[i + 1] == 1 或者 str[i] == 1 && str[i + 1] == 0 两种情况,对于这种情况直接跳过,如果str[i] 或者 str[i + 1]中的某一个是?00 = 2 ,?

2024-01-13 20:10:06 1535

原创 CCF认证+蓝桥杯习题训练

【代码】CCF认证+蓝桥杯习题训练。

2024-01-13 18:58:31 614

原创 南京大学考研机试题DP

发现需要优化 f[i][j] = f[i - 1][j] + f[i - 1][j - 1]我们发现 f[i][j] = f[i - 1][j] 从 i - 1 层计算得到。f[i][j] = f[i - 1][j - 1] 由 i - 1 层计算得到。f[i][j] = f[i - 1][j - 1] 从上一个状态转移而来。2. 不包含 s[i] f[i][j] = f[i - 1][j]所以我们只需要将 s[i] = p[j] 的元素枚举即可。1. 包含 s[i] 当且仅当 s[i] = p[j]

2023-12-07 18:43:39 527

原创 差分序列-ACwing

/ b[l] += 1 , b[n + 1] -= 1 操作 l - n 之间的数就是操作 n + 1 位置上的数 , 不会影响数组 所以可以保证不会让 b[n]最后不是 0。// 要使数列中所有的数都相等 可以得到 a[1] = a[2] =... = a[n] 那么 b[2] = ... b[n] = 0;// 也可以操作 b[i] 和 b[n]让同类型的抵消 但是操作 b[n] b[1] 不会变 所以只需要看第一种就可以了。// b[1] = a[1] 只要 a[1]!

2023-12-06 08:21:12 407

原创 数位DP(acwing)

i --) // 因为存的时候是从前向后存的 , 所以枚举的时候reverse一下。// 当前这一位填 0 那么根据状态转移就是 f[i][K - last] 一共可以填 K - 已经填的 last个。// 挖出当前的数的B进制下的每一位。// 当前这一位填 1 所以 last ++ 所以 f[i][K - last - 1];// 取出当前这一位。// 不能取 > 1 的数。if(x > 0) // 只有 > 0 才讨论。

2023-12-04 09:51:32 455

原创 树形DPacwing

/ 如果 i > n 的话 都是 root 所以 f[i][1] = f[i][0] = 1 表示当前的 root 要么是白色,要么黑色。// 用 f[i][0] f[i][1] 表示以 i 为根 , 当前的根染 黑色 或者 白色最少需要着色多少点。// 由于题意我们可以知道 可以只染一个 root 所以 f[j][1] - 1 减去son染的颜色。// 黑色是一样的 所以 f[i][0] = min(f[j][1] , f[j][0] - 1)

2023-12-04 09:50:25 414

原创 蓝桥杯ACwing习题

解析 :根据题目我们可以知道 问的是方案数 那么首先就想到了 dp 仔细想一下 发现类似于蒙德里安的梦想那道状态压缩的题 , 所以我们先考虑怎么定义 f[i][j]f[i][j] 表示的是 已经放了前 i 行 且第 i + 1 填满了 j 个格子 , 由此我们画图可以知道。// 已经放好了前 i 列 , 且第 i + 1 列放了 0 1 2 个的方案数。题目 :https://www.acwing.com/problem/content/4409/// 求 dp[n][0]?矩阵用于解决大数据问题。

2023-12-03 08:02:04 549

原创 蓝桥杯ACwing习题

/ (-3 , 3) 在第第二象限 对应的直线在第四象限(3 , -3) 所以给他取一个 x = -x , y = -y 即可。// 我们还需要 x / gcd(x , y) , y / gcd(y) 这样就可以将当前的坐标约分了,// 就是表示为一个唯一的整数 然后我们需要注意的是 这个是一条直线 , 所以当 x < 0 的时候。// 我们需要知道的是 当我们求出当前这个点的坐标表示 (x - x0 , y -y0)// 然后我们就可以想到 set 存一下 , 然后去重就可以了。

2023-12-03 08:00:01 578

原创 蓝桥杯ACwing习题

/ 设当前区间是 cnt 由于 mid 是最大的区间和 所以我们在枚举的时候如果大于 mid 的话 就表示当前区间的结束。// 那么上一个区间的左端点是 i + 1 因为 我们判断if 的时候 已经枚举到 i 了 但是算的 sum 没有包含 i。// 因为我们是从后往前枚举的 , 所以每一次的 else 就是 一段区间的结束 cnt ++ , r[cnt] = i。// 我们后面做的时候需要记得给最后一个区间的左端点 重新赋值 , 防止枚举到第一个 w[i] 的时候 sum 大了。

2023-12-02 09:05:09 749

原创 蓝桥杯ACwing习题

加了一个权值 在后面要求每一个点的权值时候 如果这个点不是根节点的话 肯定是当前点的权值加上其所属的连通块根节点的权值 d[i] + d[find(i)]注意 :在合并树的时候如果直接合并的话会出现 当前连通块内部所有联通块的点 都会加上合并后的那个连通块根节点的值,所以要用 d[a] - d[b]那就是 d[x] += d[p[x]] 在每一次回溯的时候当前的点都会加上父节点的权值 这样就可以保证每一个在当前连通块里面的点都会加上根节点的值。还有就是路径压缩的时候常用的就是求当前点到根节点的距离。

2023-12-02 09:04:04 539

原创 蓝桥杯ACwing习题

/ f[r] 一定小于 r 因为在更新的时候 last[a] = i 是在后面更新的。// 那么题意就变为在 1--r中选择一个数 i 使得 f[i] 满足 异或的条件。// 如果 i < l 的话 那么 f[i] 一定是没有答案的。// 那么就是 f[i] <= l && f[i] <= r。// 所以说 i 可以扩大到 1 <= i <= r。// f[i] 存的是最大的存在下标。// 预处理出每一个 i 前面所有满足条件的f[i]// 首先 l <= i && <= r。

2023-12-01 08:50:22 522 1

原创 蓝桥杯ACwing习题

/ res 的长度为 0 说明不用反转 没有反转哪一个 所以不用输出。如果当第这一位不是 B 的话 我们肯定要将他变成 B 那么等于说第一位的上的状态其实是已经确定了。第二个就是全 W 的状态 , 和第一个是一样的 就不做过多的叙述了。首先 , 这道题合法的只有两种方案 全部是 B 全部是 W。最后只需要判断一下 s[0] 和 最后一位的关系就可以了。那么我们先讨论全部是 B 的情况。

2023-12-01 08:49:51 621 1

原创 蓝桥杯ACwing习题

if(sum[r].s == t) // 如果 == 的话 就输出 判断的原因就是 sum[mid] 有可能大。// 二分存储的 c * c + d * d 的位置。// 我们要找的是 最小的 a b c d 所以需要排序 又因为要二分 需要两端性 所以需要排序。// 空间换时间的思想 先把所有的 c d 和 c * c + d * d 的和 s 存下来。// r 就是第一个 >= 当前的数的位置。// 枚举 a b o(n) 的时间复杂度。// 时间复杂度 o(n)

2023-11-30 08:25:30 431

原创 蓝桥杯ACwing系统

/ 因为是有序的 所以我们可以二分查找答案 , l = k * 2 , 因为我们知道的是每一横行的最中间一个数怎么求 c(2n , n)// c(r , k) 是答案 , 在第 r 行 第 k 列 所以答案应该是 1 + 2 + 3 + .. (r) + k + 1;// 我们要求的是 c(r , k) 我们枚举的是每一个斜行 我们找到了 c(r , k) == n 的时候我们就找到了答案。// 这个数最多是在 c(n , 1)处 , 所以在二分的时右边界一定是 <= n 的。

2023-11-30 08:24:46 350

原创 蓝桥杯ACwing习题

/ 需要注意的点是滑动窗口的范围问题 i - k >= q[hh] 因为下标是从 1 开始的 所以 i - k 是有 k + 1 个数的。// 由于是一个二维的滑动窗口 所以我们需要将所有的行方向 >= m 滑动串口的最大值和最小值预处理出来。// 首先 这道题是一个二维的滑动窗口的题 , 我们可以知道当前的最大值最小值是在时刻发生变化的。// 当前的值可能是最小值 因为窗口在滑动 所以必须在每次更新完的时候在加入保证一定是最小值。// 解析 题目的思路是很简单的,但是有很多的细节需要处理。

2023-11-30 08:23:47 405

原创 蓝桥杯ACwing习题

/ (1 + p1 ^ 1 + p1 ^ 2 + ..... + p1 ^ k) + (1 + p2^1 + p2^3 + ... p2^k) + .. 每一项都是这么写的。// 从中间拆开 (1 + p1 ^ 1 + p1 ^ 2 + .. p1 ^ k / 2) + (p1 ^ (k / 2 + 1) + .... + p1 ^ k)// 后一项提出 p1 ^ ak / 2 + 1 ==> p1 ^ k / 2 * (1 + p1 ^ 1 + p1 ^ 2 + ....p1 ^ k / 2);

2023-11-29 08:57:05 517 1

原创 蓝桥杯习题ACwing

/ 如果 1 , 2 两对叶子节点不在同一层 d2 > d1 , 那么同上面一样的方法 ,一定会使 2 中的一个节点合并到 1 中。// 1.如果两个节点是在同一层 && 两个叶子节点不在同一个根节点下,那么由于是同一层,所以交换两个节点的位置,结果一定不会变差。// 如果合并两队,如果1 , 2 两对叶子节点在同一层,那么将2中的一个与 1 的两个合并为 3个。// 并将当前 2 中剩余的节点合并到其父节点的父节点上去 ,一定不会使结果变得更差。// 首先,证明为什么每次合并叶子节点的一对是最优解。

2023-11-29 08:55:43 366 1

原创 矩阵相乘-斐波那契大数据版

/ 然后 f[i] = f[i - 1] + f[i - 2] + f[i - 3] + ... f[1]sn = sn-1 * A 即 sn-1 * A = sn。// FN * A = FN+1 所以 A = {0 1 0。// 令 FN = {fn , fn+1 , sn};// 但是此题的范围比较大 所以需要用矩阵乘法来做。

2023-11-29 08:54:00 354 1

原创 蓝桥杯ACwing习题

/ f[i] = f[j] * C(x - a + y - b , x - a) 后面的方案数是由 j - i 的方案数。// 但由于 j 点是一个禁点 ,所以 从 j 到 i 的路径一定是不合法的。// 用从左上角到当前的点的所有方案数 - 所有不合法的方案数就是ans。// 思路 f[i] 表示的是到当前的禁点不经过前面所有的禁点的路径数。// 枚举所有的 i , i 由所有坐标在 i 之前的 j 转移而来。// 同理 f[j] 表示的就是到 j 点不经过前面禁点的数。

2023-11-28 09:26:39 327

原创 蓝桥杯ACwing习题

/ 属性是什么呢 想一下可以知道 f[n][j] 表示的是 从前 n 个物品中选 , 总和是 j 这个状态是否是为空 如果是空的话就不能求出。// f[i][j] |= f[i - 1][j - w[i]] 表示的是当前选择的这个是在左半边的 属于减一类的。// f[i][j] |= f[i - 1][j + w[i]] 表示当前选择的这个是在右半边的 属于加一类的。// f[i][j] = f[i - 1][j] 表示的是不选 w[i];// 其次考虑一下状态划分的问题。

2023-11-28 09:26:04 317

原创 蓝桥杯ACwing习题

/ 是0的话 f[i][j] = f[i - 1][j] 表示从前 i 个 转移来 , 由于当前的状态时 0 不对 sum 产生任何影响。// 不是 0 的话 也就是 >= 1 的 , 那么这么多的方案可以将他全部转换为最小是 0 的方案。// f[i][j] = f[i - 1][j - i] 全部减去 1 总能量减去 i。// f[i][j] 表示的是划分为 i 个的时候所分配的能量总和是 j 的方案数。// 划分依据 最小的划分能量是不是 0。

2023-11-28 09:25:32 331

原创 蓝桥杯 ACwing 习题

/ 就是将 j - a[i] 转换 到 > 0 < k 所以需要先将 a[i] % k 这样就把 a[i] 转换为 0 - k - 1之间了。// 那么 j - (0 - k - 1) + k 一定是 > 0 的 , j - k + 1 + k = j + 1 > 0 所以成立。// 要说的是这个地方就是 , 我们第二位枚举的是余数 , 一定不能超过 k 的 所以是 0 - k - 1。// 其次 我们需要知道 j - a[i] 是否是 < 0 的 , 我们不知道所以需要我们转换一下。

2023-11-27 19:15:02 345

原创 蓝桥杯ACwing习题

/ 如果 当 s[l] == s[r] 时 表示都选 那么状态转移为 l + 1 到 r - 1 之间的回文子串的长度。// 如果 选 l 不选 r 的话 那么 f[l + 1][r] 表示 l + 1 到 r 之间的回文子串的长度。// 如果 选 r 不选 l 的话 那么 f[l][r - 1] 表示 l 到 r - 1 之间的回文子串的长度。// f[l][r] 表示从 l - r 之间的回文子串的长度。

2023-11-27 19:14:26 336

原创 蓝桥杯习题ACwing

发现需要优化 f[i][j] = f[i - 1][j] + f[i - 1][j - 1]我们发现 f[i][j] = f[i - 1][j] 从 i - 1 层计算得到。f[i][j] = f[i - 1][j - 1] 由 i - 1 层计算得到。f[i][j] = f[i - 1][j - 1] 从上一个状态转移而来。2. 不包含 s[i] f[i][j] = f[i - 1][j]所以我们只需要将 s[i] = p[j] 的元素枚举即可。1. 包含 s[i] 当且仅当 s[i] = p[j]

2023-11-27 19:13:56 632

原创 蓝桥杯 ACwing习题

当然了什么时候 i == ne[i] 呢 就是自己等于自己 或者写成 ne[i] == 0 的话也是只有自己本身是一个循环节。又因为模板串的 1 - ne[i] = 匹配串的[i - ne[i] , i - ne[i] + 循环节的长度]一次类推可以知道 这个长度就是循环节的长度 , 而且这个长度就是 i - ne[i]我们通过画图可以知道 1 - ne[i] 是等于 模板串的 1 - ne[i] 的。也就是 [1 , i] == [i - ne[i] + 1 , j]这一个字符串的的所有循环节是。

2023-11-26 18:59:59 333 1

原创 蓝桥杯 ACwing 习题

我们仔细观察可以得到每一个从 (0 , 0) 到 (n , n) 的不合法路径都对应一个从(0 , 0) 到 (n - 1 , n + 1) 的不合法路径。所以题意就变为从 n * 2 的点中选 n 个横坐标点 , 减去 从 n + 1 个点中选 n - 1 个不合法点的数量。必须找到一个 x 使得 a * x 同余与 (a / b) (%mod)我们由费马小定理可以得到 a^p-1 同余与 1 (% p)所以 可以得到 a * a ^p-2 同余与 1 (% p)所以我们可以得到 a * x == 1。

2023-11-26 18:59:16 347 1

原创 蓝桥杯ACwing习题

/ 存储 能表示的最大重量 和 不能表示出的最小重量 和 几个砝码 当可以表示出的数 >= n 的时候就可以输出了。// 三个砝码所能表示的最大重量是 = 两个砝码表示不出来的重量 5 + 能表示出来的重量的最大值 4 = 9。// 1 个砝码所能表示的最大重量是 1 不能表示的最小重量九十 2。// 那么怎么做呢 就是 int 三个变量。// 四个就是 14 + 13 = 27。// 2 个砝码所能表示的最大重量是 4。// 同理可得........// 选 1 3 9。

2023-11-25 20:03:40 380

原创 蓝桥杯习题 ACwing

锁定到 1e6 之间 , 那么我们其实只需要求出 1 - 50000之间的所有的质数就可以了,因为。注意 当前的 l 有可能是 1 ,所以需要注意 i + l 一定是 >= 2 的 i 从 0 开始。第一个数其实是 [l / p] 上取整 * p 就是在 l - r 之间的第一个当前质数的倍数。小小的点 , 这里的 st 数组存的是偏移量 保证所有的 i 是在 l - r 之间的。下面再求一下当前区间的所有的质数 因为合数已经筛过了,所以!将所有在 l - r 之间的所有的合数筛掉就可以了。

2023-11-25 20:02:45 334

原创 蓝桥杯算法习题 ACwing

/ 由于最早可以出现 1 的地方是 i - k - 1 所以从 f[0] ... f[i - k - 1] 都是可以的。// 还有就是 初始化的问题 f[0] = 1 表示当前是 一个 1 也是合法的 , s[0] = 1。// 可以得出 f[i] = s[i - k - 1] s 维护的是 f[i]的前缀和。// 所以我们用 f[i] 表示第 i 位上是 1 的符合题意的字符串有f[i] 个。// 那么 f[0] + f[1] + ... f[n] 就是ans。// 怎么想这道题呢?

2023-11-25 19:52:15 330

原创 关于 java的学习 ——入门—— 较详细

************java*********** 纯手写 可能会有一点错误 希望指出 谢谢

2022-04-29 22:10:02 683 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除