自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2022牛客寒假算法基础集训营1 A

题目:在打越钢太郎的著名解谜游戏系列《极限脱出》的第一作《九小时九个人九扇门》中,有这样一个有趣的设定:游戏中,999位主人公被困在一座大型的豪华巨轮中,每个人手上都有一个奇怪的手表,手表上有一个数字,999个人的数字分别是1−91-91−9;在巨轮中,还有很多紧闭的数字门,每扇数字门上也有一个1−91-91−9的数字,要想打开数字门逃出生天,主角们必须要满足一个奇怪的条件:kkk个人能够打开门上数字为ddd的一扇数字门,当且仅当这kkk个人的腕表数字之和的数字根恰好为ddd。一个数字的数字根是

2022-03-13 20:30:36 123

原创 Educational Codeforces Round 123 (Rated for Div. 2) B题

题目:定义数列里任意的 i 对于 p( i ) + p ( i + 1 ) != p ( i + 2 ) 都成立的序列为反斐波那契数列。给定N,要求输出 N组 1 — N 组成的反斐波那契数列。思路:只需要将序列倒着输出,每次将1的位置前移一位即可。因为前面的数肯定比后面的数字大,所以必定是反斐波那契数列。代码:#include <bits/stdc++.h>using namespace std; int main( ) { int i, j, k; in

2022-03-13 20:20:46 317

原创 Codeforces Round #772 (Div. 2) B. Avoid Local Maximums

题目:给出一个数组,要求将数组改为没有局部最小值的数组。求最小操作次数和操作结果。思路:对每一个数,检测他是否比前一个数大,如果是,那么就将其标记,如果是,那么将他标记上。如果该数比之前的数小,那么就检测前一个数是否为局部最大值,如果是,就将该位置的数改为和前一个数等大,然后将改动的数也标记上。如果该数的前一个已经改过,而且该数又比前一个数大,那么就将前一个数改为这个数(反正改多一次也是只改一次)。然后该数就不需要再标记。算法的时间复杂度为O( n )。代码:#include &l

2022-03-13 20:14:05 88

原创 P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G 题解。

题目:给出N个数字,将两个数字合并的消耗为两个数字之和,求将所有数字合并成一个的最最小消耗。思路:大顶堆板子题,可以用优先队列直接做。代码:#include <bits/stdc++.h>using namespace std;priority_queue< long long, vector< long long >, greater < long long > > que;int main( ) { int i, j, k;

2022-03-13 20:06:30 1215

原创 POJ - 2823 滑动窗口

题目:给一个长度为 NN 的数组,一个长为 KK 的滑动窗体从最左端移至最右端,你只能看到窗口中的 KK 个数,每次窗体向右移动一位。找出窗体在各个位置时的最大值和最小值。思路:网上好多人都是用的单调队列,这里给出一个用线段树的方法(如果没用O2优化甚至不一定能过,不好用hhh)。可以将每一段的最大最小值记下来作为线段树的节点。代码:#include <bits/stdc++.h>#define Pa pair< int, int >#define Ma

2022-03-13 20:04:04 328

原创 UVA-624 CD 题解

题目:你有N张CD你要将这N张CD刻录到规定长度的CD里,每个CD都有自己的长度,要求浪费空间最小并且张数最多。思路:简单的01背包问题,要求记录CD的序号,用队列或者动态数组即可解决。代码:#include <bits/stdc++.h>using namespace std;vector < int > dp[ 1000001 ];int main() { int N, n; int i, j, k; while ( scanf( "%d %d

2022-03-13 19:01:44 1404

原创 k-rounding 题解

题目:给定一个两个数字n, m。要求输出 n 的以m个0结尾的最小倍数。思路:乍一看不明觉厉,实际上很简单的题。我们可以先将m个零接到n后面,相当于把n乘了10的m次方,那么我们要求最小的答案,10的n次方又是2和5的倍数,所以我们只需要不断地给n除2和5就行了。时间复杂度O( logn )代码:#include <bits/stdc++.h>using namespace std;int main( ) { int N, M; int i; cin >.

2022-03-12 12:31:51 709

原创 UVA 11806 cheerleaders

题目:给定矩形长宽 n, m。给定拉拉队员个数,要求求出四个边上至少有一个人的排列数。要求对1000007取模。思路:这题是简单的容斥原理题,但是容易在取模的时候出现负数而wa(我wa了4发,我好菜), 其他的就是简单的容斥。可以先将组合数的模排列组合打表出来。代码:#include <bits/stdc++.h>#define MOD 1000007#define LL long long using namespace std;LL Clist[ 401 ][

2022-03-12 12:22:52 78

原创 POJ 2777 count color

题目:两种操作,一种是将 a 到 b 染成某一种颜色,第二种是询问a 到 b 有多少种颜色。颜色小于30种,长度不超过1e5。思路:因为题目明确表明颜色只有30种,所以可以用一个int表示所有的颜色(二进制表示),再用线段树进行优化就可以很轻松的过掉。代码:#include <cstdio>#define MaxN 100001using namespace std;int color[ 31 ] = { 0 };typedef struct { int le

2022-03-12 11:46:19 119

原创 POJ 2828 buy ticket

题目:以时间顺序给定每个人插队的位置自己的序号,要求输出队伍最后的序列。思路:刚开始做直接就用vector莽,笑死,根本过不了。 直接暴力是肯定过不了这一题的,O( n ^ 2 ) 的复杂度肯定没法过2e5。。。所以我们需要对他进行一个优化,具体怎么优化呢。首先我们如果正向思考,每次插入都要将插入者后面或者前面的人全部后移一格,时间复杂度无法支持。那么我们可以考虑逆向思维,倒着插入,这样子每次只需要考虑该位置前面有多少个空格即可。用线段树进行优化就可以达到O( nlogn ) 的复杂度。代码

2022-03-12 11:39:46 63

原创 CodeForces-277A Learning Languages

题目:给出m个员工会的语言,现要求每名员工之间都要能够写信相互交流( 可以通过他人翻译)。员工可以通过学习来学会新的语言,学习成本假设为1,求最小的学习成本。思路:运用并查集的思路,将所有能够使用同一种语言的人并到同一个树里,最后再检查图里面有多少棵树就可以的到答案( 应该注意存在不会任何语言的员工,所以需要将所有员工掌握的语言也记下来,最后再进行特殊判断,不然会wa 。)代码:#include <bits/stdc++.h>using namespace std;co

2022-03-03 17:39:39 133

原创 Light Oj - 1030 题解

题目:给出N( N <= 100 ) 个数字,从第一个数字开始,每次获取当前位置的数字并随机行进1~6步,直到最后一个数字为止。求获取数字总和的期望值。思路:我们知道,对于一个点来说,他的期望值就是走到这一点后平均能够得到的数值,那么我们想要求一点的期望的时候,因为从1~6的概率是一样的,所以我们可以通过将其自身的数值和他后面六格以内的数值取平均后加和得来,状态设为走到这一点后可以得到的期望,状态转移方程就是dp[ i ] = cave[ i ] + ( dp[ i + 1 ] + d

2022-03-02 13:12:04 589

原创 GDUT 练习题 [CodeForces-1513C] Add One

题目描述:对一个数字进行每一位加一的操作,如果进位,则添加一位。例如9876进行一次操作就会变成10987,再来一次就是211098,以此类推。输入数字和操作次数,输出最后数字的位数。有 T < 2e5 个测试用例,数字小于1e9,操作次数小于2e5思路:如果使用单纯的暴力模拟,时间复杂度为O( n ^ 2 ),数量级到了1e10,时间不支持,所以我们需要另寻办法,仔细思考我们可以发现,对一个数字来说,它进行了n次操作后得到的数字是一定的,不会受到其他的数字影响。而且操作次数的数量级也

2022-03-02 13:11:52 89

原创 GDUT 练习题C 马走日

题目:马在中国象棋以日字形规则移动。请编写一段程序,给定 n \times mn×m大小的棋盘,以及马的初始位置 (x, y)(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。思路:使用dfs算法,搜索所有情况,每完成一种情况使答案++即可。代码:#include <iostream>#include <stdio.h>using namespace std;bool pan[11][11];unsigned long

2022-01-21 17:02:57 683

原创 GDUT 练习题F(地毯)

题目描述:在n×n的格子上有m个地毯。给出这些地毯的信息(x1,y1,x2,y2),问每个点被多少个地毯覆盖。1<=n<=1000,1<=m<=1e5.思路:如果直接开二维数组暴力模拟做的话,时间复杂度大概是O(n³)差不多是1e11的水平,100%会超时,而且这题肯定没有这么简单,所以需要考虑进行优化。再次看题,发现这题和一维数组的差分题目类似,也是先进行部分区域的增加,最后再询问整体的数值。以防有人不熟悉或者忘了差分算法的用法,我还是先解释一下。所谓差...

2022-01-20 23:04:21 481

空空如也

空空如也

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

TA关注的人

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