![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
ACM学习中的一些数据结构和算法
你数过天上的星星吗
这个作者很懒,什么都没留下…
展开
-
upc 个人训练赛第十九场:鸭子游戏(差分)
问题 A: 鸭子游戏题目描述KeineDuck热爱游戏。最近她沉迷于一款名叫“DuckGame”的纸牌。DuckGame是一款颇有难度的纸牌游戏。在每一轮开始前,会有一些纸牌摆放在玩家的面前,从左到右的第孩堆有ai张纸牌。每张纸牌都是一样的。游戏开始后,玩家可以选择一个区间[l,r](包括两个端点),并且把这个区中的每一堆纸牌增加或拿走一张纸牌。若每堆纸牌的个数都相同了,玩家即可获胜。我们...原创 2020-04-19 21:19:47 · 988 阅读 · 0 评论 -
前缀和与差分
首先前缀和前缀和就是一种预处理,用空间来换取时间,降低时间复杂度,它可以非常灵活的面对关于区间的询问。简单点说就是提前计算好前缀和数组sum[i],在后面计算的时候直接使用原数组a[i] 前缀和数组sum[i]sum[1] = a[1]sum[2] = a[1] + a[2] = sum[1] + a[2]sum[3] = a[1] + a[2] + a[3] = sum[2] +...原创 2020-04-19 10:12:31 · 258 阅读 · 0 评论 -
upc 个人训练赛第十七场:稻草人(差分)
问题 C: 稻草人题目描述小X家有N块菜地,编号分别为1~N,每块菜地上都有一些稻草人。小X认为菜地里的稻草人太多了,于是他决定去掉一些稻草人。小X会进行M次操作,每次他会选择一个区间L~R,使第i(L < i < R)块菜地上稻草人的数量Xi变为(下取整)。小X想知道,当他执行完这M次操作后,每块菜地上还剩下多少稻草人。输入第1行两个正整数N,M,其意义如题目描述中所述。...原创 2020-04-18 11:25:37 · 294 阅读 · 0 评论 -
第一次理解深度优先搜索的李白打酒问题
对于深度优先搜索算法,其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次具体是这样,从图中某顶点v出发:(1)访问顶点v;(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历,直至图中和v有路径相通的顶点都被访问(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止我最初接触它是李白打酒问题,这个问题是这样的话说大诗人李白,一生好饮。幸好他从不开车。一天,他提着酒壶,从家里出来,酒壶中有酒2斗。原创 2020-07-12 16:04:56 · 261 阅读 · 0 评论 -
理解广度优先搜索的走迷宫问题
最近在更新一些自己学的知识点这次轮到bfs了首先就要提到bfs和dfs的区别,dfs其实就是在搜索一棵树,之所以叫深度优先,就是说dfs会优先向下搜索,在搜索完一个结点后,它会优先去搜索这个结点的儿子结点。而bfs在此时则会优先搜索它的兄弟结点,所以我们会说bfs是按层搜索的算法走迷宫题目描述给定一个n*m的二维字符数组,用来表示一个迷宫,数组中只包含’#‘或’.’,其中’.‘表示可以走的路,’#'表示不可通过的墙壁。最初,有一个人位于起点S处,已知该人每次可以向上、下、左、右任意一个方向移动一原创 2020-07-13 20:51:21 · 224 阅读 · 0 评论 -
滑动窗口 一道单调队列的理解模板题
先来看这个题,理解一下题意,我再来介绍单调队列F. 滑动窗口Description上古文明遗迹中,有一个长度为k的滑动窗口从数组的左端滑到右端,试输出窗口每次移动时窗口里能看到的最大值和最小值。例如有数组为{1,3,-1,-3,5,3,6,7},窗口长度为3,则输出的最大最小值如表Input第一行为两个整数,即n和k(1<n≤1000000)。第二行为n个整数。Output第一行为最小数,第二行为最大数(每行行末均有一空格)。SamplesInput Copy8 31 3 -原创 2020-07-10 15:00:16 · 159 阅读 · 0 评论 -
进制转换练习
问题 A: 整数幂题目描述判断一个数N是不是2的整数幂,比如8=2^3,输出“Yes”,而9不是2的整数幂,输出“No”。输入第一行一个整数T(1≤T≤1000),表示有T组数据。随后T行,每行一个正整数N(N在int范围内)。输出输出“Yes”或“No”。样例输入 Copy18样例输出 CopyYesll t,n;int fun(int n){ if(n =...原创 2020-04-09 09:33:02 · 439 阅读 · 0 评论 -
同余定理
数的整除性定理a | b代表a整除b,即b是a的倍数 b % a == 0同余定理给定一个正整数m,如果两个整数a和b满足(a-b)能够被m整除即(a-b)/ m得到一个整数,那么就称整数a与b对模m同余记作 a≡b(mod m)若 a≡0(mod m) 则m | a若 a≡b(mod m)等价于a和b分别用m去除,余数相等同余性质反身性:a≡a (mod m)对称性: 若...原创 2020-03-09 19:58:35 · 765 阅读 · 0 评论 -
素数问题
素数问题: 对于一个正实数x,小于x的素数个数略大于x/lnx歌德巴尔猜想:每个大于等于6的正偶数可以被分解为两个素数之和0和1既不是素数也不是合数素数判断bool prime(int x){ if(x == 0 || x == 1) return false; if((x%2 == 0) && (x != 2)) return false; for(int i...原创 2020-03-09 20:07:58 · 177 阅读 · 0 评论 -
互质#数论
互质自然数两个非零自然数的最大公约数是1,即为两个数互质1和任何非零自然数都是互质的两个数互质的判断方法a.两个不同的质数是互质的b.一个是质数,另一个数不是它的倍数,两个数互质c.两个相邻的自然数是互质的d.两个相邻的奇数时互质的e.两个数的最大公约数是1,这两个数互质Code:int gcd(int a,int b){ if(a % b == 0) return b;...原创 2020-03-09 11:07:24 · 464 阅读 · 0 评论 -
百度之星初赛一 1003.Dec
题目链接这个题当时比赛的想了好久都没有什么好的办法去解决,然后我就觉得这个题应该用dp写,我奇奇怪怪的想法定义一个dp数组,dp[i][j] 表示 a为i,b为j时的互质次数对于这一次的 dp[i][j] 来说,它就等于上一次的互质次数加一,由于题目要求最大,所以要判断一下上一次是 a-1与b的互质次数大还是a与b-1的互质次数大,最后判断这一次a与b是否互质所以状态转移方程就是:dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + (gcd(i,j) == 1)in原创 2020-07-20 17:02:54 · 127 阅读 · 0 评论 -
快速幂问题
求a^b mod p首先让计算机求出a^b,如果直接暴力的话,计算机要计算b次,但是b的数据范围太大,直接计算可能会超时,所以要采用快速幂,将复杂度降为O(log(b))如果a自乘一下 就变成a^2 再自乘一下就变成a^4a*a = a^(1+1) = a^2a^2 * a^2 = a^(2+2) = a^4将b转化为二进制:例如b = (11)10 = (1011)2从左到右...原创 2020-03-09 22:59:35 · 190 阅读 · 0 评论 -
容斥原理练习
问题 A: Indivisibility题目描述给一个数n,找出1 ~ n范围内不被2 ~ 10整除的数的个数输入一个数n输出1 ~ n范围内不被2 ~ 10整除的数的个数样例输入 Copy12样例输出 Copy2提示数据范围:1<=n<=10^18思路:一共有n个数,这个题我们很容易想到,只需要减去那些不符合条件的就可以了2 ~ 10之间的数可以分成被2...原创 2020-04-07 11:19:11 · 485 阅读 · 1 评论 -
关于位运算
位运算是在二进制中的运算方式,所有其他进制的数在进行位运算时都要先转化成二进制数再进行运算位运算主要包括按位与(&)、按位或(|)、按位异或(^)、取反( ~ )、左移(<<)、右移(>>)其中除了取反( ~ )以外,其他的都是二目运算符,即要求运算符左右两侧均有一个运算量二进制补码正数的补码与原码相同负数的补码是原码取反再加一例如-5:先写出5的原码...原创 2020-02-25 10:26:19 · 212 阅读 · 0 评论 -
7.2upc FZ投票 一个神仙的O(n)思路
问题 F: FZ投票时间限制: 1 Sec 内存限制: 128 MB题目描述又到了一年一度的T国大选,经过拉票,实力强劲的国王Tweetuzki成功连任。经过严格统计,他获得了超过一半的选票。Tweetuzki十分开心,并且决定把它的编号作为自己的幸运数字。可惜前几天由于他忙着切题,把自己的编号忘了。现在他得到了所有人的选票序列,希望你帮他找出他的编号。输入第一行一个正整数n,表示T国的选民数量。第二行n个正整数a1,a2,⋯,an,表示每个人的选择结果。输出一行一个数表示 Tweetuz原创 2020-07-03 09:09:52 · 178 阅读 · 0 评论 -
upc 混合第八场:曾经排队(数论)
问题 E: 曾经排队时间限制: 1 Sec 内存限制: 128 MB[提交] [状态]题目描述他还记得出发前,头马壮烈的嘶鸣,以及众马沸腾的银河一般的呐喊。他远远的,视线绕过头马,看向远方。他记得自己什么光也没看到。出发前,群马要列队。为了奔跑时方便管理,头马把这些马分成了n组,第i组有ci匹马。为了使队形更整齐,美观,他制定了一个必须满足的规定:每一组都要排成几行。有一个统...原创 2020-05-05 17:36:31 · 173 阅读 · 0 评论 -
upc 自习课(模拟)
问题 D: 自习课时间限制: 1 Sec 内存限制: 128 MB题目描述自习课就是划水课。你和同桌在玩井字棋,你先手。突然老师进来了。给定一个局面,问它是否有可能下的出来。若有可能,求出是否有赢家,若有,输出赢家。否则,输出是否平局,或者下一步是谁的回合。输入有多组数据,第一行给出数据组数 T。每组数据有 3 行,每行 3 个字符。若字符为”X”,表示这里你下过,若字符为”O”,表示这里同桌下过。若字符为”.”,表示这里没有人下过。输出每个数据输出一行。若不可能下的出来,输原创 2020-05-30 17:18:05 · 209 阅读 · 0 评论 -
upc 混合第十场
问题 D: 洁净无瑕时间限制: 1 Sec 内存限制: 128 MB[提交] [状态]题目描述小X是一位富豪,酷爱收藏宝石。在他的收藏柜中,从左到右依次摆放着各种形态不一的钻石。为了评价一颗钻石的美观程度,小X为每颗钻石赋予了一个洁净度ai。小X认为,钻石之间不能太冲突。他会从左到右依次看过去,若两颗相邻的钻石,其中一颗的洁净度为奇数,另一个为偶数,他就会下定狠心将这两颗钻石扔掉。如...原创 2020-05-07 16:09:30 · 189 阅读 · 0 评论 -
upc 混合第十一场:魔法石
问题 D: 取模时间限制: 1 Sec 内存限制: 128 MB[提交] [状态]题目描述数学好玩,玩好数学。给一个正整数x,你需要回答以下两个问题:1.找到一个正整数y∈[2,x−1],满足xmody最小。如果有多个y则求出最小的那一个。2.找到一个正整数z∈[2,x−1],满足xmodz最大。如果有多个z则求出最小的那一个。输入共一行为两个正整数x,k,表示询问的数以及需要...原创 2020-05-07 17:25:58 · 464 阅读 · 0 评论 -
Codeforces Round #686 Div. 3
A. Special Permutation题目要求构造一个数列,保证 a[i] != i直接将1-n的数列向后移一位即可int T,n;int a[maxn]; int main(){ scanf("%d",&T); while(T--){ memset(a,-1,sizeof a); scanf("%d",&n); for(int i=1;i<n;i++){ a[i] = i+1; } a[n] = 1; for(int i=原创 2020-11-25 15:36:46 · 551 阅读 · 3 评论 -
Codeforces Round #200 (Div. 1)
A. Rational Resistance题意是给你很多1欧姆的电阻,经过很多次的串并联之后最少需要多少电阻可以构造出 a / b这大概是一个数论题?反正标签是这样说的虽然对于数论我不是很会但这个题很有意思就尝试了一下电阻的串并联大家肯定都很明白首先像三分之一这样的电阻肯定是三个电阻串联得到的所以几分之一就需要几个电阻并联其他情况的话…举个例子比值是3 / 2 我们可以想到拆成 1 / 2 + 1,这样就相当于是一个1 / 2 的电阻串联一个电阻,一个1 / 2 的电阻又可以是两个电原创 2020-11-29 17:18:56 · 94 阅读 · 0 评论 -
Codeforces Beta Round #6 (Div. 2 Only)
A. Triangle题目要求如果是非退化三角形输出TRIANGLE如果是退化三角形输出SEGMENT如果什么都不是输出IMPOSSIBLE主要是这个非退化三角形我去百度了一下下非退化三角形其实就是普通的三角形而退化三角形就是三个点共线的三角形int a[5]; int main(){ int flag1 = 0; int flag2 = 0; for(int i=1;i<=4;i++) scanf("%d",&a[i]); sort(a+1,a+5); /原创 2020-12-01 20:15:07 · 286 阅读 · 0 评论 -
upc 6.2 图论
今晚的图论场啊qaq激动来把这几个dalao的水题写一下问题 E: 填色问题 (color)时间限制: 1 Sec 内存限制: 128 MB题目描述有形如下列图形的地图,图中每一块区域代表一个省份,现请你用红(1)、蓝(2)、黄(3)、绿(4)四种颜色给这些省份填上颜色,要求每一省份用一种颜色,且任意两个相邻省份的颜色不能相同,请给出符合条件的填色方案总数。地图用无向图的形式给出,每个省份代表图上的一个顶点,边代表两个省份是相邻的。输入有若干行,第一行包含一个自然数n,代表地图上省份数。接下原创 2020-06-02 20:35:13 · 845 阅读 · 0 评论 -
信息学奥赛Sightseeing Trip(最小环路径+Floyd)
Sightseeing Trip题意很清楚 就是输出一个最小环的路径我们要找到一条从 i 到 i 的最小环就可以拆成找 i-k 和 k-j 和 j-i 的最短路径这样就用到了中间点 k 去更新路径可以发现这就是Floyd算法找中间点去更新最短路径的思想先规定一个最大点 k 去枚举 k 这样保证 i-j 的路径中不会出现k这个点这样就保证了在 i-j 的路径中不存在环既然要保存路径,就得要一个数组去存储当前点的上一个点以便于寻找路径时可以迅速找到连接点每次更新记得更改当前点的前一个点即可原创 2020-11-24 21:19:28 · 498 阅读 · 0 评论 -
POJ 1129 Channel Allocation(四色定理)
Channel Allocation题意:题目大概是说无线电可以覆盖的范围很大,我们可以通过中继器继续扩大范围,但是中继器的信号干扰也很强,同一频道用相邻的中继器会使信号相互干扰,大大降低他们的收听质量,所以同一频道的电台尽量使用不相邻的中继器给出了每个中继器的相邻情况,问最少有几个频道用中继器不会产生干扰把题意抽象出来,将中继器看作结点,相邻的两个中继器之间连一条边,用最少的颜色给相邻的结点涂上不一样的颜色这就牵扯四色定理了,四色定理是这样说的:任何一张地图只用四种颜色就能使具有共同边界的国家原创 2020-10-27 17:05:20 · 219 阅读 · 2 评论 -
upc秋季组队训练第十七场(队列+区间筛)
问题 C: Unique Values题目描述Arup has to make many practice questions for his Computer Science 1 students. Since many of the questions deal with arrays, he has to generate arrays for his students. Since he doesn’t want togive them difficult practice problem原创 2020-10-11 21:47:42 · 705 阅读 · 1 评论 -
upc组队训练第十九场
问题 L: Spiral Matrix时间限制: 1 Sec 内存限制: 128 MB题目描述Lee got a ticket to the Google Developer Day. When he came to the exhibition hall, he found that the booths were located in a matrix of size n × m.Unfortunately, Lee had badly sprained his left ankle a we原创 2020-10-13 20:35:07 · 201 阅读 · 0 评论 -
高精度算法
洛谷P1601 A+B Problem洛谷P1303 A*B Problem/**高精度乘法将两个大数用字符串表示,输入字符串将每个字符按逆序转化成数字存放到数组中然后按照竖式计算的方法错位相加得到数组c的每一项然后进行进位运算**/char a1[10001],b1[10001];int a[10001],b[10001],c[10001];int len,alen,bl...原创 2020-03-27 18:13:09 · 179 阅读 · 0 评论 -
介绍一个求大数末尾有几个零的算法
问题 L: Double Factorial/**问一个数的末尾有几个0,就是问分解因数时,最多能分解出几个1010=2*5,也就是分解质因数后,问2与5中更少的那个数显然,在阶乘分解质因数后,5的个数是少于2的所以只要求5的个数就可以了求n的阶乘分解质因数中有多少个5,我们可以这样计算:一直让ans加上n/5,再让n/5,直到n == 0为止**/ll n,ans;int m...原创 2020-03-26 16:01:58 · 2525 阅读 · 0 评论 -
牛客暑期多校第二场 F.Fake Maxpooling(单调队列)
一直想写牛客的题解,一直拖就拖到了现在,果然有想法就要立马去做,不然就和我一样了D题就不写了,简单的减法判断,我写一下F题题目链接题意大概就是有这样一个 n * m 的矩阵a,矩阵的每一项 a[i][j] = lcm(i,j) ,然后每次求一个 k * k 的子矩阵中的最大值,将这些最大值求和题目其实不难理解,但是写起来就没那么容易了我们知道每次划分一个 k * k 的子矩阵求最大值很麻烦,那我们可以去分别求行和列的最大值并储存下来然后我们就想到了前几天刚刚接触的单调队列首先枚举 n * m原创 2020-07-20 11:56:30 · 120 阅读 · 0 评论 -
牛客暑期多校第三场 B.Classical String Problem
我又来更新题解了虽然这次还是拖了题目链接题意大概是这样的,给定一个字符串,有修改和输出答案两种操作。给Q次询问,每次询问会给出一个字符ch和一个数x。如果 ch == ‘M’ 这一项操作就是修改,修改的时候如果 x 是正数,就把字符串最左边的 x 个字符移到最右边,如果 x 是负数,就把字符串最右边的 x 个字符移到最左边。如果 ch == ‘A’ 就输出当前字符串的第x个字符我一开始就去模拟这个过程,由于Q的范围太大加上字符串本身的长度,直接模拟的复杂度太高根本就跑不过去用样例来说,首先将左原创 2020-07-20 15:10:24 · 132 阅读 · 0 评论 -
kmp算法
今天刚听学长讲了这个算法,听完感觉懂了又不是很懂,所以自己就赶紧跑来总结一下子。首先要理解,朴素的单模式串匹配大概就是枚举每一个文本串元素,然后从这一位开始不断向后比较,每次匹配失败之后都要从头开始重新匹配,但是之前可能存在已经匹配好了的字符却还要再匹配一遍,感觉超级麻烦。所以就有了kmp这个算法对于每次匹配之后,我都不会从头重新开始枚举,而是根据我已经得知的数据,从某个特定的位置开始匹配;...原创 2020-02-24 22:07:13 · 175 阅读 · 0 评论 -
01背包#dp
看了好久好久才明白的01背包,真是来之不易希望身为小白的我对01背包理解能帮到你基本模型:有一个容积为m的背包,现在有n件重量为w[i],价值为v[i]的物品,问可装入的最大价值是多少?我的理解和思路:很多人想到用贪心来解决,但是如果我们按照贪心先放入价值大的得到的结果可能不如放其他几个价值没有那么大但是重量轻的。dp的思想和贪心的类似,都是求出每一个子问题的最优解,然后推及整体的最优解...原创 2020-02-27 00:55:48 · 173 阅读 · 0 评论 -
最长不下降子序列#LIS算法
给定一个序列,求最长不下降子序列的长度定义:a[1…n]为原始序列,dp[k]表示长度为k的不下降子序列末尾元素的最小值,len表示当前已知的最长子序列的长度初始化:dp[1] = a[1]; len = 1;现在我们已知最长的不下降子序列长度为1,末尾元素的最小值为a[1],那么我们让i从2到n循环,依次求出前i个元素的最长不下降子序列的长度,循环的时候我们只需要维护好dp这个数组和len...原创 2020-03-21 23:26:58 · 135 阅读 · 0 评论 -
序列操作(dp)
问题 A: 序列操作时间限制: 1 Sec 内存限制: 128 MB[命题人:admin]题目描述给定一个长度为 n 的非负整数序列 a_1,a_2,...a_n 。你可以使用一种操作:选择在序列中连续的两个正整数,并使它们分别减一。当你不能继续操作时游戏结束,而你的得分等于你使用的操作次数。你的任务是计算可能的最小得分和最大得分。输入第一行包含一个正整数 T ,表示有 T 组数据,满足 T ≤ 200 。接下来依次给出每组测试数据。对于每组测试数据:第一行包含一个正整数 n ,满足 1原创 2020-05-23 21:34:37 · 578 阅读 · 0 评论 -
美团杯2020:查查查乐乐(dp)
A. 【美团杯2020】查查查乐乐“查查查乐乐”是一段古老神秘的咒语,只有被选中的魔法师才有资格使用这一段咒语并享用它所带来的力量;而如果这段咒语出现在了不具资格的魔法师的口中,这个魔法师将会遭到咒语的反噬并付出可怕的代价。这个学期,镁团在一家魔法早教学校做兼职,他的任务是教小学生们魔法并帮助他们准备一年一度的全国魔法奥林匹克竞赛 (NOMP)。今天,镁团在整理图书的时候,突然发现一本课外教材中包含了 t 段只由查和乐组成的咒语。让小学生们阅读这些咒语是非常危险的:他们可能会在无意识中念出“查查查乐乐”原创 2020-05-17 22:24:27 · 832 阅读 · 0 评论 -
动态规划练习(01背包)
问题 B: 0/1背包问题题目描述张琪曼和李旭琳有一个最多能用m公斤的背包,有n块魔法石,它们的重量分别是W1,W2,…,Wn,它们的价值分别为C1,C2,…,Cn。若每种魔法石只有一件,问能装入的最大总价值。输入第一行为两整数m和n,以下n行中,每行两个整数Wi,Ci,分别代表第i件物品的重量和价值。输出输出一整数,即最大价值。样例输入 Copy8 32 35 45 5样...原创 2020-03-07 17:15:39 · 530 阅读 · 0 评论 -
石子合并问题#GarsiaWachs算法
洛谷#P5569 石子合并这里介绍一下我新学的一个算法,专门用来解决石子合并问题我们从序列中找到第一个最小的a[i]满足,a[i] <= a[i+2]然后把a[i]和a[i+1]合并,记录当前的 i然后从序列第 i 位向前寻找找到第一个a[k]使得a[k] > a[i]+a[i+1]然后把合并的数放在第k个数的后面如果找不到,那么这两个数合并之后的数是这个序列最小的数放...原创 2020-03-26 14:52:12 · 193 阅读 · 0 评论