
思维
Frozensmile
这个作者很懒,什么都没留下…
展开
-
Codeforces 1172B Nauuo and Circle
传送门题意:圆上有n个坐标,现在有n个结点形成了一棵树,现在要把这n个结点指派到n个坐标中,问有多少种指派方法,使得这棵树的边互不相交。思路:考虑一个结点v,假设他有x个儿子以及它的父结点是u,那么它与儿子的连线必须在线段uv的上方或者下方,所以其实共有x+1条线,共有(x+1)!种方法,再乘上每个子节点的方法数即可。注意:根节点没有父亲节点,故只有x!种方法。#inclu...原创 2019-06-09 22:05:10 · 255 阅读 · 0 评论 -
Codeforces 1201D Treasure Hunting 动态规划
传送门思路: dp[i][0]代表由原点到达第i行最左边(y坐标最小)所需要的最小步数, dp[i][1]代表由远点到达第i行最右边(y坐标最大)所需要的最小步数. 第i行如何往第i+1行进行状态转移呢? 这里拿从第i行最左边出发为例.例如dp[i][0]所对应的位置的纵坐标为x,那么从i上到i+1只需要走最大的且<x的可以上升的列,或走最小的且>=x的可以上升的列,这里可以通过二...原创 2019-08-06 12:38:00 · 527 阅读 · 0 评论 -
CF 1198B Welfare State 思维
传送门题意:给定n个数字,q次操作,操作分为两种(且称之为1类操作和2类操作),1 p x为把a[p]改为x, 2 x为把数组中所有小于x的数字全部改为x.思路:对于有1类操作1 p x更新的p,我们只关心它最后一次的1类更新以及它最后一次1类更新之后有无可以改变它的2类更新(例如最后一次对a[3]的操作为a[3]=10,那么我们可以看这次更新后面有无2 x 且x>10.). 于是...原创 2019-08-01 14:04:08 · 496 阅读 · 0 评论 -
Codeforces 1195E OpenStreetMap 单调栈
思路:对于某一行来说,我们只需要维护[1,b],[2,b+1],[3,b+2]...[m-b+1,m]的最小值,然后再对列进行维护即可,最后的矩阵的和就是答案。如何维护[1,b],[2,b+1],[3,b+2]...[m-b+1,m]的最小值呢?我一开始的思路是把区间的数字放到multiset中,然后set.begin()存的就是最小值,每次区间向右移,则增加新元素,删掉之前区间最左边的元素,但是...原创 2019-07-19 18:04:02 · 309 阅读 · 0 评论 -
Codeforces 1187D Subarray Sorting 线段树
传送门题意: 给一个数组a,一个数组b,每次可以选择数组a的一个区间并从小到大排序,问是否可以将数组a变成数组b.思路: 其实相当于每次可以选择相邻的两个数字,将其从小到大排序.因为任何区间进行排序后的结果,都可以由每次选两个进行多次而得到.我们来看这个样例:a: 159 7 10 8b:78 9 15 10对于操作a数组, 很明显第一步我们要把7挪到第一个位置,能把...原创 2019-07-01 01:28:44 · 542 阅读 · 0 评论 -
Codeforces 1187E Tree Painting
传送门题意:给定一棵树,确定一个根,使得所有子树的大小之和最大思路:设u是v的父亲,设val为以u为根的子树大小之和,那么以v为根的子树大小之和为val-siz[v]+(n-siz[v]),当根变成v时,siz[v]大小的子树则消失,但多了一棵以u为根,大小为(n-siz[v])的子树.D题链接:https://blog.youkuaiyun.com/Frozensmile/article/det...原创 2019-07-02 16:47:01 · 679 阅读 · 0 评论 -
Codeforces 1185F Two Pizzas 状态压缩
传送门思路: 首先不难想到,每个人的喜好和每个pizza的成分都可以用一个长度为9的01串表示,也就是用一个1~511之间的数字来表示. 然后对于具有相同数字表示(相同成分)的pizza,我们只需要记录价格最小的即可.这样,我们就把m个披萨,压缩到了最多511个披萨,这样就可以511*511的复杂度进行枚举了.对于每个人的喜好,我们可以暴力dfs,找出哪些披萨可以满足他.例如 000001...原创 2019-06-22 18:56:32 · 431 阅读 · 0 评论 -
Codeforces 1176D Recover it!
传送门思路:每次考虑最大的数字即可。最大的数字如果是质数,那么它肯定输入后来附加到数组b的,那么他在质数中的位置下标肯定就是数组a的元素。最大的数字如果不是质数,那么他肯定在数组a,因为它不可能是任何数的因子。#include <algorithm>#include <iostream>#include <cstdlib>#include ...原创 2019-06-10 19:50:32 · 382 阅读 · 0 评论 -
Codeforces 1175E Minimal Segment Cover
传送门思路:没想到这道题竟然可以用倍增思想!f[x][j]代表从x到开始使用2^j条线段最远可以到达的坐标。#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include &l...原创 2019-06-09 22:20:48 · 169 阅读 · 0 评论 -
Codeforces 1175D Array Splitting
传送门题意:给定一个数组a,将a分成k段,每一段都非空。其中如果一个数字a[i]在第j段中,那么它的贡献为a[i]*j,现在需要最大化每个数字的贡献之和。思路:相当于在n-1个空中切k-1刀,设sum[i]为i到n的后缀和。如果在a[i]之前切一刀,那么贡献值则会增加sum[i],所以我们将后缀和排序,取最大的前k-1个即可。#include <algorithm>...原创 2019-06-09 22:12:40 · 179 阅读 · 0 评论 -
Codeforces 1203F2 Complete the Projects (hard version) 贪心
传送门思路:首先b>=0的项目不难处理,根据a值从小到大排序,能完成则r+=b[i]即可.关键是在于处理b<0的项目.对于b<0的项目采用贪心策略:先根据a值从大到小排序,每遍历到一个,就看它是否可以完成,如果可以,r+=b[i]并且标记i为完成状态. 如果不可以,看它是否可以替换之前已经完成的项目.假设j是某个之前已经完成的项目,i为当前不可完成项目,替换的条件...原创 2019-08-18 20:23:44 · 360 阅读 · 0 评论