摘要:我现在是不会的了。 看看等我退役前能不能做出吧。 https://www.hackerrank.com/contests/w27/challenges/how-many-substrings
阅读全文
摘要:http://codeforces.com/problemset/problem/19/B 对于每个物品,能偷多ti个,那么先让ti + 1, 表示选了这个东西后,其实就是选了ti + 1个了。那么只需要选出>=n个即可。 一开始的时候想不到ti + 1,一直不知道能多选ti个后,本来是选了多少个。
阅读全文
摘要:★、背包求方案数的时候,多重背包是不行的,因为产生重复的背包会有多种情况。 ★、背包记录路径的时候,其实是不行的,因为更新了12的最优解,如果它依赖于6这个背包,然后你后面改变了6这个背包,就GG 1、01背包问题。 tot:总背包空间,vall[i]:每件物品的价值,w[i]:每件物品的重量 ht
阅读全文
摘要:http://codeforces.com/contest/294/problem/B 据说是贪心,我用了一个复杂度是2e8的dp水过去了。 其实这题就是给你n个数,每个数有两个权值,分成两组,使得第一个权值之和,和第二个权值之和的最大值最小。 那么直接设dp[i][j][k][h]表示前i个数中,
阅读全文
摘要:http://codeforces.com/contest/366/problem/C 在n个物品中选出若干个,使得sum(a[i]) = k * sum(b[i]) 把问题转化一下就是,求sum(a[i] - k * b[i]) = 0的最大的a[i],这个时候已经把a[i]作为价值了 那么怎么去
阅读全文
摘要:注意getch()是从console读取,(非标准函数) getch()需要的头文件是<conio.h>。 而getchar()是从stdin,一般是指键盘 windows平台下ENTER键会产生两个转义字符 \r\n, \r : 回到开头的地方。 \n : 去到下一行开头 因此,getch()读到
阅读全文
摘要:http://codeforces.com/contest/730/problem/J 3 4 36 1 90 45 40 其实可以知道,选出多少个瓶子呢?是确定的,当然选一些大的。 那么问题转化为: 在n个瓶子中,选出k个,然后把剩余的n - k个瓶子得液体转移过去这k个里面,费用最小。其实就是使
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3506 四边行不等式:http://baike.baidu.com/link?url=lHOFq_58V-Qpz_nTDz7pP9xCeHnd062vNwVT830z4_aQoZxsCcRtac6CLzbPYLNI
阅读全文
摘要:http://acm.nyist.net/JudgeOnline/problem.php?pid=737 数据很小,适合区间dp的入门 对于第[i, j]堆,无论你怎么合并,无论你先选哪两堆结合,当你把[i, j]合成一堆的那一步的时候,花费肯定就是sum[i....j] 可以用纸模拟下。 那么我们
阅读全文
摘要:http://poj.org/problem?id=1661 对板按高度排序后。 dp[i][0]表示现在站在第i块板上,向左跑了,的状态,记录下时间和其他信息。 O(n^2)LIS; 唯一的麻烦就是,如果由第i块板 >第j块板,除了高度差会摔死之后,还可能会中间隔着一些板,使得它是去不了第j块的
阅读全文
摘要:http://codeforces.com/contest/752/problem/E 首先有一个东西就是,如果我要检测5,那么14我们认为它能产生2个5. 14 = 7 + 7.但是按照平均分的话,它是不能产生5的,那就把那两个7当成是两个5,因为7比5还大,对min(b[i])是没有影响的。 可
阅读全文
摘要:http://codeforces.com/contest/752/problem/C 这题的意思其实就是叫你固定x个点,使得按顺序走这x个点后,产生的轨迹是给定的序列。 对于有若干条最短路径走到第i个点,这些情况可以忽略,就是你可以默认走的是任意一条最短路径。 对于一个序列,可以固定两个方向,只要
阅读全文
摘要:http://codeforces.com/contest/752/problem/B uuu yyu xy xx 注意变化了之后,检查一次前面已经变化过的就好。因为可能前面的满足,但是变了后不满足。 #include <cstdio> #include <cstdlib> #include <cs
阅读全文
摘要:P1159岳麓山上打水 https://vijos.org/p/1159 dfsID,第一次听说这东西,但是感觉不太靠谱啊。 一开始的时候,想到了排个序后,然后进行dp,如果要输出字典序最小其实还是可以搞定的,就是2、3、比26小的话,还是可以的。 排序后,只要在转移的时候,如果这个背包有解了的话,
阅读全文
摘要:https://vijos.org/p/2001 设perXor[i]表示1 i的前缀异或值。 那么要得到某一段的异或值,只需要perXor[j] ^ perXor[i - 1] 那么我们把perXor[n]先加入去字典树,然后用perXor[n - 1]去找,找到的就是下标n的贡献。 同理,然后把
阅读全文
摘要:https://www.hackerrank.com/contests/w27/challenges/hackonacci-matrix-rotations 一开始是没想到观察题的。只想到直接矩阵快速幂。 但是超时了,因为我的矩阵快速幂是应对稀疏矩阵的, http://www.cnblogs.com
阅读全文
摘要:http://codeforces.com/contest/749/problem/D 现在发现做题要把样例抄下来,然后画一画,这样才容易发现新大陆。嗯,以后做题就这样。 如果排除了被删除了的人,那么,剩下的人中,胜出的,就是剩下出价最高的那个,但是它有可能不需要出价那么高,所以只需要比现在剩下的人
阅读全文
摘要:http://codeforces.com/contest/747/problem/D 大概的思路就是找到所有两个负数夹着的线段,优先覆盖最小的长度。使得那时候不用换鞋,是最优的。 但是这里有个坑点,就是最后一段,如果最后一段的长度和中间某一段的长度相等,那么应该优先覆盖中间那段,因为中间的那些,如
阅读全文
摘要:http://codeforces.com/contest/747/problem/E 首先,把字符串变成这个样子。 hello,2,ok,0,bye,0,test,0,one,1,two,2,a,0,b,0 hello 2 1ok 0 2bye 0 3test 0 4one 1 5two 2 6a
阅读全文
摘要:http://codeforces.com/contest/746/problem/D 首先说下一定是NO的情况。 假设a > b 那么,b最多能把a分成b + 1分,如果每份刚好是k的话,那么就最多能支持a的最大值是(b + 1) * k 其实就好比如,分成3分的话,x1 + x2 + x3 =
阅读全文
摘要:https://biancheng.love/problem/640/index 一直re 不是并查集吗 #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #in
阅读全文
摘要:https://biancheng.love/contest-ng/index.html#/131/problems 首先,去到n点的最小时间是所有数加起来。 然后,如果我1 2,然后再2--1,那么,就相当于从1继续开始,只不过是时间变化了。 所以,以后的每一步的代价都是2 * a[i] 那么设d
阅读全文
摘要:http://codeforces.com/contest/745/problem/C 把他们并查集后, 其他没有连去government的点,全部放去同一个并查集,然后选择一个节点数最多的government集合,连接过去即可。 至于有多少条边增加,可以暴力判断。 #include <cstdio
阅读全文
摘要:http://codeforces.com/contest/745/problem/B 题目要求的是,给定一个图形,要求里面判断是否有矩形,且仅有一个 就是 XXX.... XXX...X 是不行的,因为有两个了。 #include <cstdio> #include <cstdlib> #incl
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=5996 博弈论待补。 这题变化了一下,因为注意到奇数层的东西(层数从1开始),对手可以模仿地动,那就相当于没动。 比如从第5层,我选择去了第4,他去第3,我去2,他去1,结果还是到我。所以只需要把偶数层的东西,拿出
阅读全文
摘要:http://codeforces.com/contest/743/problem/D 如果我们知道mx[1]表示以1为根节点的子树中,点权值的最大和是多少(可能是整颗树,就是包括了自己)。那么,就可以O(n)扫一次各个点,对于每个点的儿子。 选出最大的两个mx[son],更新答案即可。(注意这个节
阅读全文
摘要:https://www.hackerrank.com/contests/101hack44/challenges/palindromic-subsets 如果有3个a。2个b。1个c。 每个a看成不同的,那么能选出多少个不同的回文串呢? 从回文串入手,因为回文串最多只有1种字母是奇数个。 那么,如果
阅读全文
摘要:http://codeforces.com/problemset/problem/740/D 对于每一对<u, v>。设dis[u]表示root到点u的距离,那么dis<u去v>就是dis[v] - dis[u], 就是在它的儿子中找出有多少个v使得dis[v] - dis[u] <= a[v]。然
阅读全文
摘要:https://biancheng.love/contest-ng/index.html#/123/problems 如果只是输出最小的值,那么好办,a升序,b降序,这样是最优的。 但是需要次数,这就麻烦了。 但是注意到它说数字互不相同。 那么,用个数组book[a[i]]表示a[i]需要匹配的是那
阅读全文
摘要:http://poj.org/problem?id=2002 只能说hash比二分快很多。随便一个hash函数都可以完爆二分。 判断是否存在正方形思路如下: 1、枚举任意两个点,作为正方形的一条边,那么,整个正方形就确定了,有两个方向。 因为, 设枚举的坐标为(x1, y1) & (x2, y2),
阅读全文
摘要:https://biancheng.love/contest-ng/index.html#/123/problems 做题要在纸上弄弄,才会有发现。 发现到答案只是-1和4,因为坐标都是整数。 然后就是找是否存在正方形了。 判断如下: 1、枚举任意两个点,作为正方形的一条边,那么,整个正方形就确定了
阅读全文
摘要:https://www.hackerrank.com/contests/hourrank-13/challenges/arthur-and-coprimes 我们可以枚举每一个p在[2, sqrt(n)]里,然后就是在[p + 1, n / p]中找有多少个数和p互质了。 标准容斥,先算出[1, n
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1695 要求[L1, R1]和[L2, R2]中GCD是K的个数。那么只需要求[L1, R1 / K] 和 [L2, R2 / K]中GCD是1的对数。 由于(1, 2)和(2, 1)是同一对。 那么我们枚举大区间
阅读全文
摘要:http://codeforces.com/contest/342/problem/E 如果把询问1存起来,每到sqrt(m)的时候再处理一次。 那么总复杂度就是msqrt(m)的。 把要变颜色的节点存起来,可以同时一次O(n)的bfs 然后就是LCA了。LCA需要倍增的做法。这题真的是个好题。。
阅读全文
摘要:http://codeforces.com/contest/742/problem/E 跪着看题解后才会的。 对于任何一对BF[i]和GF[i] 连接了一条边后,那么他们和隔壁都是不会有边相连的了,这是题目数据保证的。因为BF[i]和GF[i]是唯一确定的嘛。 那么,我们把BF[i]连接去GF[i]
阅读全文
摘要:http://codeforces.com/contest/602/problem/D 这题需要注意到的是,对于三个点(x1, y1)和(x2, y2)和(x3, y3)。如果要算出区间[1, 3]的L(h)函数的最大值,则一定不会是 通过(y3 - y1) / (x3 - x1)算出。因为很简单,
阅读全文
摘要:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1627 http://acm.fzu.edu.cn/problem.php?pid=2238 对应的51NOD这个题,先把n--和没m-- 再套公式 #include <cs
阅读全文
摘要:http://codeforces.com/contest/535/problem/D 如果真的要把m个串覆盖上一个串上面,是可以得,不会超时。 要注意到一点,全部覆盖后再判断时候合法,和边放边判断,结果是一样的,后者还更难做到。 那么就是先按顺序把串覆盖上去,已经存在的就不去覆盖了,然后kmp一次
阅读全文
摘要:http://poj.org/problem?id=2104 由于这题的时间限制不紧,所以用线段树水一水。 每个节点保存的是一个数组。 就是对应区间排好序的数组。 建树的时间复杂度需要nlogn 然后查询的时候,对于线段树覆盖了的区间,可以直接二分即可。 查询复杂度需要logn^2 所以复杂度需要m
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2227 用dp[i]表示以第i个数为结尾的nondecreasing串有多少个。 那么对于每个a[i] 要去找 <= a[i]的数字那些位置,加上他们的dp值即可。 可以用树状数组维护 #include <cstd
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4366 今日重新做了这题的分块,果然是隔太久了,都忘记了。。 首先,用DFS序变成一维的问题 关键是它有两个权值,该如何处理呢? 首先假设我们的DFS序列是List, 那么,对其进行分块。对于每一个块,先按能力排序
阅读全文
摘要:Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5560 Accepted Submission(s): 2532 Pro
阅读全文
摘要:http://codeforces.com/contest/742/problem/C 首先把图建起来。 对于每个a[i],那么就在i a[i]建一条边,单向的。 如果有一个点的入度是0或者是>= 2,那么就不行了。直接-1 然后就是把图分成若干个圈了。 对于每一个圈,只需要找一个点,dfs,算出它
阅读全文
摘要:http://codeforces.com/gym/101064/problem/D 题目是给定一个数组,如果两两组合,有C(n, 2)种结果,(找出第一个大于等于第k大的结果) 思路, 二分答案val,判断如下。 先把数组排序。 然后暴力枚举每个数a[i],那么找出第一个大于val - a[i]的
阅读全文
摘要:https://www.hackerrank.com/contests/hourrank-15/challenges/taras-beautiful-permutations 题意是说,给定一个数组,里面的数字最多出现两次,求所有的合法排列,合法排列定义为没有相同的数字排在一起。 首先先统计一下个数
阅读全文
摘要:http://www.ifrog.cc/acm/problem/1032 1032 - A-B Time Limit:1s Memory Limit:128MByte Submissions:680Solved:126 1032 - A-B Time Limit:1s Memory Limit:12
阅读全文
摘要:http://codeforces.com/problemset/problem/673/C 先说一个枚举区间的技巧,枚举前缀,不要枚举后缀。 就是下面这个代码是不好的 为什么呢?就是很多东西重复了,而且也被迫用不上。只能老老实实地计算。 但如果考虑下枚举前缀。 则能用上以前的东西 比如[1, 1]
阅读全文
摘要:http://www.gdutcode.sinaapp.com/problem.php?cid=1049&pid=4 Problem E: 穷游中国在统题 Description Travel_poorly队是广工大目前最年轻的金牌队伍,队内成员分别是tmk、YFQ、Maple。这天他们接到教练的o
阅读全文
摘要:http://www.gdutcode.sinaapp.com/problem.php?cid=1049&pid=3 dp[i][state]表示处理了前i个,然后当前状态是state的时候的最小休息天数。 比如用1代表休息,2是训练,3是运动。 如果当前这天允许的状态只是训练。 那么dp[i][3
阅读全文
摘要:http://codeforces.com/contest/734/problem/F 因为 x + y = (x & y) + (x | y) 有了这个公式后,然后应该手动模拟一下,把公式化简。一开始的时候知道有这个公式,但是自己却不动手。动手能力太差。思考能力太弱了。 如果你肯动手,这题是可以化
阅读全文
摘要:1、不希望for (int i = 1; i <= n; ++i) { } 中间按下去后,自动缩进到中间,只缩进到下一行。 可以去掉其中一个。 2、不自动完成,就是出现一个括号后不补充另一个。 3、支持格式化代码后,本来运算符两边要空格的,没有空格,补上。 其中中间那两个,是在花括号里面补上,就是p
阅读全文
摘要:http://codeforces.com/contest/712/problem/C 要使得把三角形由边长n变成m,等价于由m变成n 如果是从n变成m,则很难判断每次判断变成多少。比如22的变成4,一开始那一条边变成什么都是可以得,都是满足三角形规律的。 但是如果你直接变成m,则后面的得不到最优。
阅读全文
摘要:http://vjudge.net/problem/UVA-11582 http://acdream.info/problem?pid=1060 首先证明下为什么暴力枚举n^2项以后就一定会重复。 我们说如果fib数列重复,只需要fib[i - 1] == f[0] && fib[i] == fib
阅读全文