Wannafly
文章平均质量分 78
ccDLlyy
不忘初心,方得始终
展开
-
Wannafly挑战赛1 MMset2(虚树+树的直径)
题目链接:点击打开链接 思路:虚树直径除以2,向上取整。不会证明的话,仔细思考、举几个sample可以YY出来。 通过这个题学了几个新东西: 1.虚树 所谓虚树,其实就是把询问中需要用到的点建到另一棵树上,对于一些问题可以降低复杂度。比如我们询问一条链上的两个端点,直接做dfs的复杂度是O(N)的,但是对于虚树,这两个端点可以直接相连,它们之间的边记录了原本整条链上的信息,于是复杂度变成了原创 2017-10-17 16:42:53 · 596 阅读 · 0 评论 -
Wannafly模拟赛3 反蝴蝶效应
题目链接:点击打开链接 思路:水题,答案为max{ Ai + i },i从0开始。 #include #include #include #include using namespace std; int main(){ int n, t, re; while (scanf("%d", &n) != EOF) { re = -1; for (int i = 0; i < n原创 2017-10-10 10:09:02 · 539 阅读 · 0 评论 -
Wannafly模拟赛3 生物课程
题目链接:点击打开链接 思路:水题,按照三种无向图的结构特点判断,具体为判断节点度数:X有一个4度节点,其他的节点最多为2度;Y有一个3度节点,其他的节点最多为2度;I的节点度数最多为2度。还可以看出另一个约束条件为:图是连通的,加上没有重边和自环的限制,其实就是说明三种图均为树形结构。 // 生物课程2 运行/限制:27ms/1000ms #include #include #inclu原创 2017-10-10 12:02:58 · 312 阅读 · 0 评论 -
Wannafly模拟赛3 绝对半径2051(离散化+尺取法)
思路:题目求的为最大的连续相同数字的长度,也就是说,若把相同数字分到一组,组间没有太大联系,联系只发生在组内数字的相对位置上,那么就把每组数字的位置存储下来分别处理,因为数字最大可以到10^9,数组开不下,但n最大只有10^5,所以可以把这些数字映射到10^5内。具体处理每组数字时,可以采用尺取法,也可以理解为贪心求解,对于每个le,rig在条件限制内最大可能的右移使区间最大。 // 绝对半径2原创 2017-10-10 20:06:14 · 450 阅读 · 0 评论 -
Wannafly挑战赛1 Treepath(树形DP,思维)
题目链接:点击打开链接 思路:除了树形DP,自己没想到其他思路,直接就写的DP...... 开的数组形式为dp[n][3],对于当前父节点,dp[x][0]、dp[x][1]表示已经遍历过的子树中,从该父节点出发到子树节点的路径长度为奇、偶的路径条数;dp[x][2]表示以该父节点为树根的树,满足条件的情况总数。dp[x][2]可以不开,更节省空间,直接用一个变量存储最后的结果即可。具体状态转原创 2017-10-14 09:40:13 · 1185 阅读 · 0 评论 -
Wannafly模拟赛3 贝伦卡斯泰露(搜索+剪枝)
题目链接:点击打开链接 思路:搜索+剪枝 // 贝伦卡斯泰露 运行/限制:3ms/1000ms #include #include #include using namespace std; int n; int num[45], s1[45], s2[45];//s1表示序列1,s2为序列2 bool dfs(int cnt1, int cnt2, int dep) { if (de原创 2017-10-14 18:14:47 · 563 阅读 · 1 评论 -
Wannafly模拟赛3 监视任务(贪心+线段树)
题目链接:点击打开链接 思路:把所有约束按照右端点排序。这样每一个前面的约束区间[l1,r1],与后面的一个约束区间[l2,r2]的交,一定为[max(l1 ,l2 ),r1]。对于排序后的区间依次满足约束,假设当前枚举到的约束还没有满足,就不断把对应区间中最右端的0改为1,这些过程可以用线段树维护来完成。时间复杂度O((n + m)logn)。 // 监视任务 运行/限制:898ms/200原创 2017-10-14 22:42:17 · 362 阅读 · 0 评论 -
Wannafly挑战赛1 Xorto(前缀异或+思维)
题目链接:点击打开链接 思路:开始没理解题意啥意思,两个不相交区间的异或和,其实就是两个区间的的数一块做异或,两个区间的异或和为0,也就是两个区间的异或和相等。联想到了前缀和,可以预处理一下区间前缀异或,这样每个区间的异或和就能O(1)的复杂度求出,剩下的就是不相交非空区间的选择问题了,想让区间不相交,可以取一个界限位置,区间在界限左右取,具体实现为枚举右区间的左边界的前一个位置,也就是左区间的原创 2017-10-14 11:14:45 · 635 阅读 · 0 评论