基础算法及操作
文章平均质量分 76
基础算法以及各类常规操作习题总结
Gene_INNOCENT
Wait for the sunrise!
展开
-
POJ2109-Power of Cryptography
题意: 给一个n、p,求一个k,使得k^n = p.解题思路: 正常操作应该是二分+高精度算法,但是看了别人的题解之后,发现这题有个bug,由于k是整数,因此可以用double来存p,然后直接开1/n次方.小知识补充: 上取整函数:ceil() 头文件:#include <cmath> 下取整函数:flo...原创 2018-04-12 23:37:21 · 174 阅读 · 0 评论 -
POJ1001 —— Exponentiation(高精度幂问题)
题意:给一个数字,输出它的阶乘算法:用字符串读入所给数字,找到小数点所在位置,将字符串中小数点去掉,最后再加上小数位数即可.然后建立数的乘法的函数,返回乘完之后的string具体算法如下图所示具体代码如下:#include <cstdio>#include <string>#include <iostream>#include <cstring>...原创 2018-04-06 23:03:14 · 288 阅读 · 0 评论 -
【ACM ICPC 2011–2012, Northeastern European Regional Contest】Interactive Permutation Guessing【交互题】
题意: 答案是一个1-n的排列。现在你需要给出一个1-n的排列,系统返回两个排列之间相同的最长子序列长度【不连续】,需要在5*n^2的询问次数内求出来。 ps:longest common subsequence of permutations a and b【最长相同子序列,不需要连续】 思路: 猜排列,那么肯定涉及到定位置。确定每个数字所...原创 2019-02-17 11:43:09 · 451 阅读 · 0 评论 -
【Codeforces Round #516_div2_E】【二分交互题】Dwarves, Hats and Extrasensory Abilities
题意: 给出 n ,接下来n次交互。每次你输出一个点的二维坐标,然后系统返回 black 或者 white ,表示这个点是白色点还是黑色点。 全部结束之后,你需要输出一条直线将上述的所有白色点和黑色点分开在两边。 思路: 这是一个用二分来写的交互题。 交互题与普通题唯一的区别就是,每次输出之后,记得清空缓存区,即fflush(stdo...原创 2018-10-14 23:58:10 · 378 阅读 · 0 评论 -
【2015 NEERC - G 】Garden Gathering【距离计算变形、数学巧妙转换】
题意给出 nnn 个二维坐标点,要求给出两个点的编号满足此两点间距离最远,仅允许走 454545 度斜边与网格边。(2≤n≤2∗105,∣xi∣,∣yi∣≤107)(2\leq n\leq 2*10^5, |x_i|,|y_i|\leq 10^7)(2≤n≤2∗105,∣xi∣,∣yi∣≤107)题目链接:linklinklink思路此题仅允许走斜边与网格边,而非最短路径,因此不同于...原创 2020-04-06 14:13:49 · 253 阅读 · 0 评论 -
【Gym-101775 C】Traffic Light【思维】
题意:从家到公司,一共 nnn 个红绿灯,一共 n+1n+1n+1 段路。你可以设置每一个红绿灯的开始时间,且每个红绿灯的绿灯时间+红灯时间一致。对于每一种设置,从家出发的时间都任意,因此一定存在一个最坏的情况。先要求输出最坏情况的最小值为多少。(1≤n≤1000)(1\leq n\leq 1000)(1≤n≤1000)思路:比赛时无头绪。题意也看了半天才明白。比赛后知道了解法。答案即为...原创 2019-08-12 14:42:03 · 657 阅读 · 0 评论 -
【Gym-100513 K】Treeland【bfs序构造】
题意:nnn 个点,以每个点为根进行一遍 bfsbfsbfs,都会得到一个 bfsbfsbfs 序列。现给出以每一个点为根得到的 bfsbfsbfs 序列,构造出原树上的所有边,保证有解。(1≤n≤2000)(1\leq n\leq 2000)(1≤n≤2000)思路:比赛的时候看着这题被刷刷刷地过,然后自己刷刷刷的 WaWaWa,非常怀疑人生…比赛时的思路是每一个点和第一个 bfsbf...原创 2019-08-05 21:36:22 · 211 阅读 · 0 评论 -
【Gym — 101473 G】Lines of Containers【思维题】
题意:给出一个 n∗mn*mn∗m 的方格,每次交换一行或一列,问是否可以将该行还原回去,如果可以就输出最少操作数。(aaa 为初始图形,1≤n,m≤3001\leq n,m\leq 3001≤n,m≤300)思路:稍加分析,可以得出几个结论。还原操作数可以行列分开算。如果可以还原,则每行错位位置相同。因此问题就变成了现在有一个数列,数列上有几个位置发生了错位,最少需要几步可以还原这个...原创 2019-07-18 16:32:08 · 1149 阅读 · 0 评论 -
【 Codeforces Round #395 (Div. 2) D】Timofey and rectangles【四色定理】
题意:给出nnn个矩形左下和右上坐标,每个矩形都不重合,矩形边长为奇数。现在要将这nnn个矩形涂色,现在一共有444种颜色,要求共享一条边的矩形必须异色,若可以实现,给出涂色方案。否则输出−1-1−1。思路:此题是对四色定理的一个考察,熟悉四色定理的话就会知道平面图上任意相邻区域异色,最多只需444种颜色即可完成,而对于区域均为矩形来说,则只需333种颜色即可完成。但是此题给出4种颜色,便...原创 2019-04-16 20:01:31 · 225 阅读 · 0 评论 -
【 Codeforces Round #547 (Div. 3) G】Privatization of Roads in Treeland【树上贪心问题】
题意:现在要对一颗树上的边进行染色。如果一个节点连接的边中有大于等于两条颜色相同,则这个节点为不好的点。现在最多只能有 kkk 个不好的点,问最多需要几种颜色可以将树上所有的边进行染色。思路:比赛的时候前面几题写太慢了,导致没有写到这一题,还是太弱…哭。我们来考虑这道题如何解决。首先既然有 kkk 个不好的点,一个直接的想法就是让前 kkk 个度数最大的点成为不好的点,然后我们可以发现对...原创 2019-03-21 19:15:29 · 197 阅读 · 0 评论 -
【2017-2018 ACM-ICPC, Central Europe Regional Contest (CERC 17)】Justified Jungle【树上思维题】
题意:给定一颗树,要求用 kkk 刀将树切成等大小的 k+1k+1k+1 块,问 kkk 有哪些可能取值。将所有可能取值输出。思路:这个问题一开始看到有点懵,我们可以将其进行转化,先考虑比较简单的情况。如果要求用 xxx 刀把树切成等块,问你是否可能?这个问题就比较容易考虑,如果某一个节点的子树大小刚好为 n/(x+1)n/(x+1)n/(x+1) ,则这个节点连向父节点的边是一定要切的...原创 2019-03-21 18:38:11 · 333 阅读 · 0 评论 -
【2016-2017 ACM-ICPC (ECNA 2016) G】That's one Hanoi-ed Teacher【汉诺塔问题】
题意: 3根柱子的汉诺塔模型。给定每根柱上当前时刻有几个圆盘,判断这个时刻是否会出现在汉诺塔模拟过程中,如果不会,输出"NO"。否则输出当前状态离终态还有多少步。思路: 我们先回顾一下普通汉诺塔的模拟过程。void dfs(int n,int a,int b,int c) //第n个圆盘从a->c{ if(n == 1){ print...原创 2019-03-12 19:32:17 · 1402 阅读 · 0 评论 -
【14年浙江省赛 ZOJ 3778】Talented Chef
题意: n个人,每个人都有一个初始数值。你可以选择最多m个人,将他们的数值-1。问最少需要多少次可以将所有人的数值都减为0。 思路: 一次最多将所有人数值总和减少m,所以一个直接的思路就是sum/m向上取整就是答案。然后会发现这样考虑是不准确的,因为如果四个人分别是1 1 10 10,每次可以选择4个人,则最少需要10次。在这种情况下,是由最大值决定的。...原创 2019-02-18 00:07:02 · 187 阅读 · 0 评论 -
【Gym-100085 B】Binary Encoding【思维题】
题意: 给出n个数字,用01串对这些数字进行表示。要求所需的01个数最少,并且任意一个数字的01串不能是其他数字01串的前缀。如样例的6,即给出0-5的表示即可。 0 00 4 110 1 01 5 111 ...原创 2019-02-14 22:56:41 · 183 阅读 · 0 评论 -
【POJ1958】【典型递推问题】汉诺塔问题
题意: 给你n个盘子,问在四个柱子的情况下,最少需要多少步才能将n个盘子移动到另一个柱子上。 思路: 先来看看最经典的三个柱子问题。 f3[i] = 2*f3[i-1]+1,即将(i-1)个盘子移动到中间那根柱子上,然后再将最后一个盘子移动到目标柱子上,最后将(i-1)个盘子移动到目标柱子上即可。 那么对于四根柱子的话,我们可以...原创 2018-10-24 21:32:29 · 363 阅读 · 0 评论 -
【数论思维题】Enlarge GCD【Codeforces Round #511 (Div. 2)】
题意: 给你 n 个数,分别为 a1、a2、...、ai、... an,现在从这n个数中删去p个数,使剩下的数的gcd变大。求最小的p。 思路: 一开始的思路是想用贪心做,先求出所有数字的gcd,然后将数字排序,再依次求gcd,如果与当前这个数字求出的gcd等于开始的那个gcd,就将这个数字删掉。 然后wa 8,很明显这个方法是错的,比如 2 4 ...原创 2018-09-22 21:37:35 · 321 阅读 · 0 评论 -
【Codeforces Round #508 (Div. 2)】Slime【简单贪心】
题意: 一个数组,长度小于5*1e5,每一次你都可以选择数组中的一个数字,用这个数字将它左右两边相邻的数字吃掉,则被吃掉的数字消失,当前数字的权值变为x-y,使得最后数组中只剩一个元素的时候,使那个元素最大,询问元素最大值。 思路: 其实本题就是一个简单贪心,只需要进行一下简单的分类讨论。1.如果序列中的数有正有负,则答案为序列中所有数字绝对值之和。...原创 2018-09-07 19:31:10 · 254 阅读 · 0 评论 -
【codeforces】【01字符串匹配】Equalize【Manthan, Codefest 18 (rated, Div. 1 + Div. 2)】
Description:You are given two binary strings aa and bb of the same length. You can perform the following two operations on the string aa:Swap any two bits at indices ii and jj respectively (1≤i,j≤...原创 2018-09-03 09:39:44 · 280 阅读 · 0 评论 -
【Gym - 101848B】Almost AP【等差数列改三个数】
题意: 一个长度为 n 的数组,要求最多改动数组中的三个数,使得该数组变成一个等差数列。 题目保证有解。 思路: 我们先来思考一个问题,这个数列的公差是多少? 相信只要稍微思考一下,应该就可以得出先对这个数列的所有公差值记录一个出现次数,可以用map记录。然后求出出现次数最多的那个公差。 由于最多只能改动...原创 2018-08-31 19:16:20 · 659 阅读 · 0 评论 -
【数论】Concatenated Multiples【codeforces-Round #506-div3-D】
题意: 给定n和k,表示一共n个数字,问将其中两个数字拼接起来能够被 k 整除的组合有多少种。比如:6 1145 1 10 12 11 7 答案就是7,一共是451、4510、110、1045、1012、121、1210可以整除11。 思路: 看到题目以后,先想的是两个数相加整除另一个数的条件是什么,然后一开始想是不是两个数都能整除一个数,这两个...原创 2018-08-26 10:04:49 · 311 阅读 · 0 评论 -
【2015-2016 NEERC - G】Graph【构造 + 拓扑排序】
题意nnn 个点,mmm 条边的有向图,现可以往上添加 kkk 条边,使得新图最小拓扑序最大,此处的大与小均指序列的字典序。(1≤n≤100000,0≤m,k≤100000)(1\leq n\leq 100000,0\leq m,k\leq 100000)(1≤n≤100000,0≤m,k≤100000)思路比赛的时候看到这道题,想的就是贪心。对于此类题目,一个很明显的思路就是从开头到末尾...原创 2020-03-25 15:16:06 · 336 阅读 · 0 评论 -
【Codeforces contest-1214 E】Petya and Construction Set【树上构造】
题意:一共 2∗n2*n2∗n 个点,nnn 条关系,每条关系指定 2∗i2*i2∗i 与 2∗i−12*i-12∗i−1 两个点之间的树上距离,这个距离不会超过 nnn,保证有解。(1≤n≤105)(1\leq n\leq 10^5)(1≤n≤105)思路:构造题,主要就是如何限制条件,将问题简化再简化。比赛时,主要是发现了两个性质。第一个性质是每个数只和一个数有关,和其它数字无关,因...原创 2019-09-05 11:33:16 · 650 阅读 · 0 评论 -
【2018 SWERC - C 】Crosswords【字典树、暴力搜索】
题意给出 AAA 个长度为 NNN 的字符串,BBB 个长度为 MMM 的字符串,将长度为 NNN 的字符串竖直摆放,长度为 MMM 的字符串水平摆放,问能形成多少个 N∗MN*MN∗M 的矩阵。(2≤N,M≤4,1≤A∗B≤1008016)(2\leq N,M\leq 4,1\leq A*B\leq 1008016)(2≤N,M≤4,1≤A∗B≤1008016)如下图所示,says,area...原创 2020-03-31 00:20:22 · 411 阅读 · 0 评论 -
【Codeforces Round #533(Div. 2)】D.Kilani and the Game【多源bfs】
题意:一个 n∗mn*mn∗m 的网格,一共有 ppp 个人,每个人都有一个移动速度,并且每个人一开始都拥有若干个格子。每一轮游戏,从 111 号轮到 ppp 号,每个人轮到自己后可以从已有的格子出发去占领新的格子,新的格子距离旧的格子的距离小于等于移动速度,问最后每个人拥有的格子数。(1≤n,m≤1000,1≤p≤9)(1\leq n,m\leq 1000,1\leq p\leq 9)(1≤n...原创 2019-08-21 21:58:25 · 1266 阅读 · 0 评论 -
【GYM-100889 C】Chunin Exam【左右手路径问题】
题意:一道交互题,输入想要走的方向,系统返回是否可走,实现从 (1,1)(1,1)(1,1) 走到 (N,M)(N,M)(N,M)。询问次数不能超过 12 ∗ P + 4 ∗ (N + M)12 * P + 4 * (N + M)12 ∗ P + 4 ∗ (N + M),PPP 是栅栏总数。思路:在迷宫中如何找到一条必定可行的路径。此处涉及到了一个左右手路径的知识点,即不断左手或右手扶墙,...原创 2019-07-24 09:11:13 · 400 阅读 · 0 评论 -
【16年浙江省赛H ZOJ 3965】Binary Tree Restoring 【两个dfs序还原】
题意: 给出两个dfs序列,求出一个二叉树,使得该二叉树满足这两个dfs序列。思路: 看到这个题,比较容易想到的就是给出二叉树前、中序遍历,求二叉树的后序遍历。因此本题的思路就是对于序列中的每一段递归判断。dfs过程中给出当前两个序列的父亲节点,然后在序列的对应位置进行判断,如果两个节点相同,则这两个节点都属于当前dfs中的父亲节点。 如果...原创 2019-02-27 11:24:46 · 307 阅读 · 0 评论 -
【Codeforces Round #516_div2】Labyrinth【迷宫搜索】
题意: 给定一个迷宫,由 ‘*’ 和 ‘.’ 组成,*表示此处有障碍。给定一个起始点,以及 l 和 r ,l 代表这个点可以向右移动的次数,r表示这个点可以向左移动的次数,求从起始点出发,可以到达多少个不同的点。思路: 这是一个典型的迷宫问题,直接用bfs即可解决,主要问题在于如果只用 vis 数组求标记每个点是否走过,如果走过就不再走,这样是会出错的。因为 ...原创 2018-10-14 23:42:49 · 262 阅读 · 0 评论 -
【POJ 3074】Sudoku【剪枝】
题意: 一个数独问题,类似的还有POJ2676 = POJ 2918 < POJ3074 < POJ3076,按难度排序。解法: 大部分的题解都是用舞蹈链写的,但是实在不想学这个不太常用的算法,就一直尝试剪枝。成功剪了n小时......两个剪枝操作: 1.每次寻找可以填的数字最少的那个格子 2.每次更新的时候,顺便寻找...原创 2018-08-14 16:52:46 · 348 阅读 · 0 评论 -
POJ_3984迷宫问题(bfs基础题)
题意: 中文题干,不多说了.解题思路:先说一下dfs和bfs的区别.dfs是一条路搜到底,不能再往下了,就回溯一步,需要用到递归.而bfs是是一层层展开,比如说从第一个数0开始搜,然后把和0直接连接的数比如1,2,3都搜出来,加入队列,然后再把和1直接连接的搜出来,比如4,加入队列;然后再搜和2直接连接的,依次往下.简单的说就是一层一层的搜,每一条路径的搜...原创 2018-03-09 19:36:55 · 3326 阅读 · 9 评论 -
POJ1321-Chess Problem(dfs基础题)
题意: 中文题干,不多说了.解题思路: 基础dfs.dfs思路其实很简单,就是走到走不了了以后,就回退一步,然后重新搜索. 用bool chess[9][9]标记哪些可以走,用col[9]标记哪些列走过了,从第一行往下搜. 代码用递归的实现的,初学的时候,看代码都比较费劲,这个时候就需要自己手动模拟一遍,模拟完了以后...原创 2018-03-09 13:07:41 · 298 阅读 · 0 评论 -
【AtCoder-2164 C】Rabbit Exercise AtCoder【差分找规律+倍增】
题意:一共 nnn 个点,每个点都有自己的初始位置 xix_ixi,一共有 MMM 次操作,每次操作给出一个 pospospos,则 a[pos]=a[pos+1]+a[pos−1]−2∗a[pos]a[pos]=a[pos+1]+a[pos-1]-2*a[pos]a[pos]=a[pos+1]+a[pos−1]−2∗a[pos],如果 pos=1pos=1pos=1,a[1]=2∗a[2]−...原创 2019-11-19 20:41:37 · 392 阅读 · 0 评论 -
【Codeforces Round #291 (Div. 2) D】R2D2 and Droid Army【线段树+二分】
题意: 有n个机器人,每个机器人有m个属性。现在你有m个武器,使用第i个武器,可以对所有机器人的第i个属性值造成-1的伤害,当机器人的所有属性值均为0时,机器人被破坏。你一共可以使用武器k次,求被破坏的机器人连续的最长长度是多少。m <= 5。 思路: 比较容易想到,对于每个起点i,二分终点,即被破坏的机器人最长连续距离。 至于二分判断方面,...原创 2019-02-16 17:31:51 · 172 阅读 · 0 评论 -
【Codeforces Round #507 (Div. 2)】【交互题】【二分预测】Subway Pursuit【火车预测】
Description:This is an interactive problem.In the Wonderful Metropolis of the Future, there is no need in subway train drivers. Due to the technological progress, they were replaced by the Artific...原创 2018-09-06 08:46:42 · 826 阅读 · 0 评论 -
【POJ 3977】【折半枚举】【超大背包】Subset【暑期 No.7】
题意: 给一串数字,选取其中的数字,使其值最小,并且选取数字的个数尽可能少. 分析: 因为数字范围很大,因此不能使用动态规划来计算,从而考虑折半枚举来进行计算。 将这串数字划分为两部分,第一部分用字典序枚举的方式输出所有的可能结果,将结果输入数组,再对数组进行升序。 再对该串数字的另一部分,进行字典序枚举,对于每一种可能...原创 2018-07-27 23:03:48 · 287 阅读 · 0 评论 -
【POJ 2785】【折半枚举】4 Values whose Sum is 0【暑期 No.6】
题意: 给定各有n个整数的四个数列A、B、C、D。要从每个数列中各取出1个数,使四个数的和为0。求出这样的组合的个数。当一个数列中有多个相同的数字时,把它们作为不同的数字看待。 分析: 如果直接对四个数列进行枚举的话,将是O(n^4)的复杂度,因此可以考虑折半枚举的思想。 将A、B数组相加的所有可能性列出来加入数组,O(n^2),再进行...原创 2018-07-27 22:52:12 · 283 阅读 · 0 评论 -
【POJ 3279】【开关问题】Fliptile【暑期 No.5】
题意: 有一个M * N的格子,每个格子可以翻转正反面,它们一面是黑色,另一面是白色。黑色的格子翻转后就是白色,反之亦然。游戏要求把所有的格子都翻转成白色。不过每次翻转一个格子时,与它上下左右相邻接的格子也会被翻转。求出最少需要多少次额能够将所有格子都翻成白色。 现在给定了每个格子的颜色,请求出用最小步数完成时,每个格子的翻转情况,如果最小步数的解有多个,输出字典序最...原创 2018-07-27 16:48:28 · 225 阅读 · 0 评论 -
【POJ 3276】【开关问题】Face The Right Way【暑期 No.4】
题意: N头牛排成了一列。每头牛或者向前或者向后。为了让所有的牛都面向前方,农夫约翰买了一台自动转向的机器。这个机器在购买时就必须设定一个数值K,机器每操作一次恰好使K头连续的牛转向。请求出为了让所有的牛都能面向前方需要的最少的操作次数M和对应的最小的K。 分析: 此类问题一般都考虑状态递推的思想,即考虑后一个状态能不能由前一个状态所确定。 ...原创 2018-07-27 13:25:08 · 218 阅读 · 0 评论 -
【ZOJ 1964】【尺取】Bound Found【暑期 No.3】
题意: 给定一串数字,并给定一个目标数字t,求出一个区间,该区间上的所有值相加后取绝对值最接近t. 分析: 先考虑能不能用尺取来做,如果用尺取来做,那么尺取的数列必须是单调的,否则无法确定何时左右端点移动,因此考虑能不能用前缀和来记录每一个点. 因此考虑用sum[i]表示 1-i 的前缀和,并将sum[i]这个数列进行升序,因此sum[...原创 2018-07-27 13:04:55 · 250 阅读 · 0 评论 -
【POJ 3320】【尺取法】Jessica's Reading Problem【暑期 No.2】
题意: 为了准备考试,Jessica开始读一本很厚的课本。要想通过考试,必须把课本中所有的知识点都掌握。这本书总共有P页,第 i 页恰好有一个知识点ai(每个知识点都有一个整数编号)。全书中同一个知识点可能会被多次提到,所以她希望通过阅读其中连续的一些页把所有的知识点都覆盖到。给定每页写到的知识点,请求出要阅读的最少页数。 分析: 首先肯定需要求出总共有多...原创 2018-07-27 11:32:38 · 193 阅读 · 0 评论 -
【POJ 2456】【二分答案】Aggressive cows(暑假 No.1)
题意: 农夫约翰搭了一间有N间牛舍的小屋。牛舍排在一条线上,第 i 号牛牛舍在 xi 的位置。但是他的M头牛对小屋很不满意,因此经常互相攻击。约翰为了防止牛之间互相伤害,因此决定把每头牛都放在离其它牛尽可能远的牛舍。也就是要最大化最近的两头牛之间的距离。 分析: 该题答案是在一个区间之内,并且有单调性,而且对于每一个答案,验证起来都很方便。 ...原创 2018-07-27 11:02:07 · 601 阅读 · 0 评论