- 博客(44)
- 收藏
- 关注
原创 【搜索】P3654 First Step (ファーストステップ)
把每一个合法的点(空地)都搜索一遍,从右方向搜索一遍,再从左方向搜索一遍。坑点:当 k == 1 时,需要除以2,因为向右向下搜索了两遍。因为我们要连续的一块地因此搜索的时候只能一个方向搜到底。横着竖着都可以,因此搜索的时候按两种方向进行搜索;
2025-03-07 00:10:17
207
原创 【搜索】P2036 [COCI 2008/2009 #2] PERKET
分两种情况进行搜索:1.放入当前的配料 2.不放入当前的配料。ans是全局变量,再全局范围中找最优解。思路:类似于动态规划。
2025-03-06 20:31:43
95
原创 【暴力枚举】P2241 统计方形(数据加强版)
有一个 n×m 方格的棋盘,求其方格包含多少正方形、长方形(不包含正方形)。宽度为1 ~ n 的长方形的个数为 m个,因此总共有 n * m 个。若(0,0) ~ (n,m) 的矩阵中正方形以及长方形的个数。统计以新增的顶点作为右下角的顶点的正方形和长方形的个数。(3)长方形的个数 = 矩形的个数 - 正方形的个数。关键点在于不重复的找正方形,长方形;(1)正方形的个数 min(n,m)(2)矩形的个数 n * m;
2025-03-04 20:19:31
157
原创 【暴力枚举】P3392 涂条纹
难度:普及−算法:暴力枚举思路:首先确定每个颜色各占行的取值范围由题意可知每行至少占1行白色:1 ~ n - 2;(白色最少占一行,最多占行数为 n - 2,因为红色和蓝色至少要占一行)蓝色:1 ~ n - w - 1;(蓝色最少占一行,最多占n - w - 1, 至于为什么-1,原因在于红色至少需要占一行)红色:1 ~ n - w - b;关键点:统计各行颜色的分布情况;
2025-03-04 19:12:34
153
原创 【暴力枚举】P1088 [NOIP 2004 普及组] 火星人
知识点:next_permutation(a, a + n);题目有点啰嗦,全排列当中求第 m 个排列。
2025-03-04 18:26:43
195
原创 【搜索】P1036 [NOIP 2002 普及组] 选数
首先求所有的组合,再求每个组合的和,最后判断该组的和是否为质数。算法:dfs + 质数。
2025-03-03 21:36:30
149
原创 【搜索入门】P1706全排列问题
按照字典序输出自然数 1 ~ n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中。next_permutation()会取得[first,last)所标示之序列的下一个排列组合,如果没有下一个排列组合,便返回false;由 1 ~ n 组成的所有不重复的数字序列,每行一个序列。每个数字保留 5 个场宽。
2025-03-03 20:45:56
159
原创 CF934B A Prosperous Lot
这里我们为什么不输出 0, 原因在于如果输出的数是1位数的时候单个’0‘是不合法的(题目已说明);环最多为2个,也就是数字8,不超过数据范围的情况下能输出18个8,10^18共有19位,那么不超过范围的前提下最多能输出几个环呢?18 x 2 = 36,因此我们最多可以输出36个环。当输入的数 k 为偶数时,输出k / 2个 8 即可,当输入的数 k 大于 36的时候,直接输出 - 1;当输入的数 k 为奇数时,再输出一个4或者9;题目要求输出的数不能超过10^18;
2025-02-24 18:47:37
111
原创 CF355A、CF1365B 、CF 1335B
猜:只有一种情况时不可行的,所有元素都是同一类型,但数组中存在逆序对,这时候时肯定不行的。只要把b个不同的字符串一直循环这输出直到字符串长度为 n;其余的情况:直接输出 d ,其余的位数都填0即可。只要保证b个不同的字符就行,不用管a的长度;,则有题意可知,直接交换即可。一开始想的太复杂了。
2025-02-09 23:11:01
293
原创 CF998A Balloons 构造
除了情况1、2,只给格里高利第一个气球包,把其余的都给安德鲁,这样就省去选取得气球包的位置。3.其余的情况都是可以的,题目问给格里高利的气球包数量,以及选取得气球包的位置。这时候,如果给格里高利第一个气球包,则两个人拥有的气球数量就会相同。因此我们在气球包中选取气球数量最小的气球包,以及该包所在的位置。2.当有两个气球包时,若两个气球包的气球个数相同则不行。1. 当只有一个气球包时,肯定不行。但是还需要进一步考虑这种情况,
2025-02-09 23:08:50
324
原创 【栈习题2】回文是指正读反读均相同的字符序列,如“abba“和“abdba“均是回文,但“good“不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)
回文是指正读反读均相同的字符序列,如“abba“和“abdba“均是回文,但“good“不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)如果字符串的长度为奇数时,跳过中间字符。string类计算字符串长度是。
2024-12-15 20:33:52
329
原创 【栈习题1】设从键盘输入一整数的序列:a1,a2,a3,...,an,用栈结构存储输入的整数,当ai不等于-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。
设从键盘输入一整数的序列:a1,a2,a3,...,an,用栈结构存储输入的整数,当ai不等于-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。算法应对异常情况(入栈满等)给出相应的信息。题目中提到栈满的情况,由于链栈没有沾满的情况,因此利用顺序栈来实现,考察栈的存储结构及基本操作。
2024-12-15 17:06:14
156
原创 【队列习题】如果允许在循环队列的两端都可以进行插入和删除操作,要求:写出循环队列的类型定义。分别写出从队尾删除和从队头插入的算法。
双端队列、队头插入,队尾删除
2024-12-15 13:46:29
401
原创 【线性表】顺序表
每个数据元素的存储位置都和线性表的起始位置相差一个常数,只要确定了存储线性表的起始地址,线性表中的任意数据元素都可随机存储,因此线性表的顺序存储结构是一种。(3)若位置 i 合法,则将第 i 个数据元素L.elem[i-1]赋给参数 e,通过 e 返回第 i 个元素的传值。(3)将第 n 个至第 i 个位置的元素依次向后移一个位置,空出第 i 个位置(i = n+1时不需要)。(1)判断插入位置 i 的合法性,(1
2024-12-14 01:45:07
891
原创 【二叉树】度数为 0、1、2的结点的表示
(3)若某结点的左子树为空,右子树不为空,则该结点拥有的度为1的结点为该结点自身加上,右子树拥有的之和;(4)若某结点的右子树为空,左子树不为空,则该结点拥有的度为1的结点为该结点自身加上,左子树拥有的之和;若该结点只有一棵子树,则以此结点为根的二叉树中度为1的结点个数 = 1+ 其子树中度为1的结点个数。若该结点有两颗子树,则以此结点为跟的二叉树中度数为1的结点个数 = 子树中度数为1的结点个数。(2)若某结点的左右子树都不为空,则该结点拥有的度为1的结点为左右孩子结点拥有的之和;
2024-12-06 13:45:22
633
原创 Codeforces Round 987 (Div. 2) ( A - C)*
将 a 放在第一个位置时,b就放在第 10个位置,c放在第26个位置,就可以找到满足条件的3个数的摆放位置;反省:试了 n = 3, n = 5, n = 7 的情况之后,直接觉得奇数的时候是不可以的,结果被T了。由于 1 也是一个完全平方数,因此当 n 为偶数时输出n / 2 个元素,每个元素连续出现 2次即可。题目保证了给出的数组为不升序的序列,因此2 2 2 3 3 3这种情况是不出现的;由勾股定理可知,最容易想到当3,4,5的情况时上述式子满足;设要填的三个数的位置分别为 a,b,c;
2024-11-26 22:03:14
822
原创 【模拟】B. Queue at the School
那么每交换一次就直接从他们俩后面的人继续找,就避免了一个男生一个时间点交换好几次的情况了。每一个时间点从对头到队尾找如过前面的是男生,后面的是女生就将他俩交换。
2024-11-24 19:56:43
202
原创 Технокубок 2018 - Отборочный Раунд 3(A- C)*
在枚举map 中的所有元素中选择最小的,输出对应位置的元素即可。
2024-11-22 21:38:14
434
原创 Codeforces Round 988 (Div. 3) (A - E)
对于 111001而言, 他们的前缀和分别为000002,即最后一个1能构成2个'01'就是前面'0'的个数,其余的位置为'1',即pos - w - 1个‘1’;其中pos表示第一个0后面的1的位置,w表示此处能构造'01'的个数;求取得增加能量得次数尽可能的少,因此需要每一次尽可能取最大的能量值;长度为 n 的数组当中,需要除掉2个数(n,m), 因此。对于 11100 而言,他们所有的前缀和为 0;,我们也可以判断,即前缀和不是0的第一个位置的。要找的字符串的长度为 2 ,我们需要。
2024-11-19 22:10:16
1098
原创 Codeforces Global Round 27(A - C)
并且除了每一行的第一个元素需要移动m个位置,其他点移动1个格子即可。(1) n == 1 或者 n == 3 时 -1;33和66的最小公倍数为66,枚举66的倍数,(3) n为奇数时最后四位“6366”(2) n为偶数时最后两位“66”的数,从它后面的数开始移动,
2024-11-10 21:18:39
372
原创 对数函数__lg()和__log2()
另外,__lg()是非标准函数,只在部分编译器中支持,而log2()是C++11标准库中的函数,在大部分编译器中都可以使用。例如,__lg(8)将返回3,因为8的二进制表示是1000,最高位1在第3位。例如,log2(8)将返回3.0,因为8等于2的3次方。
2024-11-10 20:16:58
1153
原创 【模板】区间DP——石子合并
以k作为分界点:先求左半部分的最小代价 + 右半部分的最小代价 + 最后一步整个区间的代价。我们可以枚举每个分类中找代价最小的,最终f[i][j] 取所有情况的最小值。曲线救国的方式,我们可以先去掉最后一步,找最小值,再加上最后一步。(2) 属性:所有合并方式中代价的。左边1堆,右边k - 1堆。左边2堆,右边k - 2堆。左边k - 1堆,右边1堆。
2024-11-10 19:08:25
450
原创 【模板】线性DP
(1)集合:所有在第一个字符串的前 i 个字母当中出现,并且在第二个字符串的前 j 个字 母当中出现的子序列(2)属性:所有子序列当中的长度的最大值(MAX)
2024-11-10 17:40:51
961
原创 【模板】01背包与完全背包
(1)集合 :下的的集合(2)属性:最大值 / 最小值 / 数量所谓状态计算就是集合的划分,满足两种原则:(1)不重 (2)不漏对与求最大值和最小值的问题可以重复,但是求方案数量的时候不能重复。
2024-11-06 22:21:28
588
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人