随笔分类 - ICPC-搜索、枚举、构造、模拟
摘要:题目链接 题意 : 给出一个 x 和 k 问有多少个 y 使得 x = f(y, k) - y 、f(y, k) 为 y 中每个位的数的 k 次方之和、x ≥ 0 分析 : f(y, k) - y = x ≥ 0 满足条件的 y 最多不超过 10 位 这个并不知道怎么证、网上有很多结论证明、仔细推敲
阅读全文
摘要:题目链接 题意 : 一串数字变成另一串数字,可以单个数字转变,或者一类数字转变,问最少操作次数 分析 : 15年北京赛区的银牌题 首先有一个点需要想明白、或者猜得到 即最优的做法肯定是先做完 2 操作最后用 1 操作 2 操作单次可以改变的字符数远大于 1 操作 ( 当然这个不是证明上面的结论、只是
阅读全文
摘要:题目链接 题意 : 给出 n * m 的网格、要你用 k 种不同的颜色填给出的网格、使得相邻的格子颜色不同、若有解要输出具体的方案 分析 : 看似构造、实则搜索、手构构半天没有什么好想法 直接搜就行了、注意加上剪枝 当剩下格子不足以让剩下颜色数量最多的颜色产生间隔的话则返回 具体也很好实现、即 ma
阅读全文
摘要:题目链接 题意 : 给出坐标轴上的 n 个点的横坐标,要你选出最多的点,使得这些点两两距离是二的幂 ( 特殊情况 : 选出的集合只有一个点也满足条件 ) 分析 : 官方题解已经说的很好了 最关键是是判断选出的集合元素数量肯定不可能大于 3 简单翻译一下题解就是 假设现有答案集合元素数量为 4 ,且令
阅读全文
摘要:题目链接 题意 : 给出一个排列,让你删除一个数,使得删除后整个序列的 Good 数数量最多。Good 数的定义为 若 Ai 为 Good 则存在 Aj < Ai ( j < i ) 分析 : 画画几个规律就能得出如下几个结论 ① 若删除一个 Good 数,则原序列 Good 数的数量只会减一,即只
阅读全文
摘要:题目链接 题意 : 中文题 分析 : 价值和重量都太过于大,所以采用折半枚举的方法,详细可以看挑战的超大背包问题 由于 n <= 30 那么可以不必直接记录状态来优化,面对每个用例 直接采用递归回溯的方法来写这个 DP 即可 #include<bits/stdc++.h> #define LL lo
阅读全文
摘要:题意 : 给出 n 个点,每个点有一个维护时间 a[i]。m 个条件,每个条件有2个点(x,y)且 a[x] != a[y]。选择最少的 k (最少一个)个点,使其值加1后,m个条件仍成立。 分析 : 发现改变某些数加一后可能产生联动效应 换句话说就是改变某些数则必须改变另一些数来维持 m 个条件的
阅读全文
摘要:题意 : 给出 N 表示有标号 1~N 的 N 个数,然后从下标 1 开始将这 N 个数每隔一位放置一个,直到 N 个数被安排完,现在有一个操作就是每次将数列中最右边的数向离其左边最近的空缺处填上,一直这样子填,直到下标 1~N 被填满,然后现在给出 Q 个询问,每个询问给出一个 X ,你需要回答下
阅读全文
摘要:题意 : 给出一个 01 串,要求你将其分隔出若干个子序列 ( 每个数字只能属于某一个子序列 ) ,子序列必须满足由 0 开头和结尾,且中间需 01 交替构成。若无法做到,则输出 -1。 分析 : 很容易想到需要去贪心配对 0 和 1 即 能 01 交替去构造就尽量选择这种方案,这样才能用更少的 0
阅读全文
摘要:题意 : 给出一颗无限层的满二叉树,然后每个值为 X (根的 X 等于 1 ) 左孩子的值是 2*X,右孩子的值是 2*X+1 ,现在有两种操作,(1, x,k) 表示将 x 所在层的所有节点整体向右循环地移动 k 个单位、(2,x,k)表示将 x 所在的层的所有节点及其子树向右循环地移动 k 个单
阅读全文
摘要:题意 : 给出一个序列,然后每次将重复出现的元素进行求和合并(若有多个,则优先取最小的进行合并),若某重复元素有很多,那么取最左边的那两个进行合并且合并后元素位于原来右边元素的位置,例如 3 2 6 2 2 这里 2 是重复元素,取最左边的两个 2 进行一次求和合并,合并后将变成 4 ,且这个 4
阅读全文
摘要:题目链接 题意 : 给出 N 个点(最多 1e6 )和 M 条边 (最多 N + 20 条 )要你输出一条从 1 开始回到 1 的哈密顿回路路径,不存在则输出 " There is no route, Karl! " 分析 : 题意很简单明了 众所周知,哈密顿回路是个 NP-Hard 问题 这么多个
阅读全文
摘要:题意 : 给你 N ( 1 ≤ N ≤ 16 ) 个质数,然后问你由这些质数作为因子的数 ( 此数不超 10^18 ) & ( 不一定需要其因子包含所给的所有质数 ) 的第 k 个是什么 分析 : 由于各项的数据范围都太过于大,所以考虑从比较小的 N 入手 由于 N 比较小,所以可以先到是否能折半枚
阅读全文
摘要:题意 : 以下两个问题的物品都只能取有且只有一次 ① 给你 N 个物品,所有物品的价值总和不会超过 5000, 单个物品的价格就可达 10^10 ,背包容量为 B ② 给你 N (N ≤ 40 ) 个物品,物品的单个价值和重量都达到 10^15 问你在背包容量为 W 给出 ① 和 ② 问题条件下背包
阅读全文
摘要:题意 : 将从 1 ~ n 的数分成两组,要求两组和的差值尽可能小,并输出其中一组的具体选数情况 分析 : 如果将这 n 个数从大到小四个一组来进行选择的话那么差值就为 0 ,然后再来考虑 n%4 != 0 的情况。举个例子就是 n = 9 的时候,我们考虑 6 7 8 9 ,将6、9放入一组,7、
阅读全文
摘要:题目链接 题意 : 有 n 个球队,给出主客场胜负图,找出一个序列 1、2、3..... 使得 1 战胜过 2 、2 战胜过 3、3 战胜过 4..... n 战胜过 1 ( 这个序列是 1~n 的其中一个全排列 ) 分析 : n 最大就只有 20 ,明摆着让你搜,但是这题我失了志啊,下面说几个搜索
阅读全文
摘要:题目链接 题意 : 给出一个序列,你的任务是求每次操作之后序列中 (a[j]-a[i])/(j-i)【1<=i<j<=n】的最大值。操作次数有Q次,每次操作需要将位子p处的数字变成y. 分析 : 最大值实际上只要考虑相邻的 i 和 j 就行了,即相邻的a[]数组元素,此时式子的分母永远是 1 ,为什
阅读全文
摘要:题意 : 给你一个长为n的序列a,有n*(n+1)/2个子区间,问这些子区间里面和为完全平方数的子区间个数。1 <= n <= 100000、0 <= ai <= 10 分析 : 题目的枚举对象是子区间的和,自然想到构造前缀和数组去进行操作(任意子区间的和都能由某两个前缀和做差得到)。由于这里每个元
阅读全文
摘要:题意 : 有n根木棍(n<=64),它们由一些相同长度的木棍切割而来,给定这n根木棍的长度,求使得原来长度可能的最小值。 分析 : 很经典的深搜题目,我们发现答案只可能是所有木棍长度总和的因数,那么我们只要去枚举因数然后搜索是否可行即可!具体实现看代码可能更容易看懂,这里不赘述。重要的是体会此类深搜
阅读全文
摘要:题意 : 乱七八糟说了一大堆,实际上就是问你从一个序列到另个序列最少经过多少步的变化,每一次变化只能取序列的任意一个元素去和首元素互换 分析 : 由于只能和第一个元素去互换这种操作,所以没啥最优的特别方法,只要乖乖模拟即可,如果第一个元素不在正确位置则将它和正确位置的元素交换使其回到正确位置,如果第
阅读全文