随笔分类 -  [A] 解题报告(codeforces)

记录codeforces的题解
摘要:题目 给你一颗n个结点的树,需要执行n次以下操作: 选择一个未被删除结点u,令$a_u$等于与u相邻未被删除的结点数。 将结点u从树中删除 也就是说,n次操作完后可以得到一个序列$a={a_1,a_2,...,a_n}$。问在所有可能的序列$a$中,满足以下条件: 序列$a$可以由上述n次操作得到 阅读全文
posted @ 2021-09-08 20:24 limil 阅读(31) 评论(0) 推荐(0)
摘要:C Carrying Conundrum(思维) 方法一 直接dfs搜索,进位与不进,时间复杂度O(2^9)。 #include <bits/stdc++.h> #define endl '\n' #define IOS std::ios::sync_with_stdio(0); cin.tie(0 阅读全文
posted @ 2021-09-08 19:49 limil 阅读(81) 评论(0) 推荐(0)
摘要:题目 给定n个区间[l_i,r_i]和数m,问有多少组(a_1,a_2,...,a_i)满足: \(a_i\in [l_i,r_i]\) \(\sum\limits_{i=1}^na_i\le m\) \(\gcd(a_1,...,a_n)=1\) 数据范围:\(n\le 50\),\(m \le 阅读全文
posted @ 2021-08-22 13:25 limil 阅读(31) 评论(0) 推荐(0)
摘要:题目 Problem - D2 给定两个不同的分别包含$n$个点的森林,每次可以同时在两个森林加一条相同的边,加边过程中不能出现环。问最多能加多少边,输出任一方案。\(n\le 10^5\) 题解 在submission上看到一个很吊的做法。 先确定一个根$rt$,比如1号结点,然后遍历每个点$u$ 阅读全文
posted @ 2021-08-17 11:51 limil 阅读(69) 评论(0) 推荐(0)
摘要:题目 给定n个区间$[l_i,r_i]$和数$m$,问有多少组$(a_1,a_2,...,a_i)$满足: \(a_i\in [l_i,r_i]\) \(\sum\limits_{i=1}^na_i\le m\) \(\gcd(a_1,...,a_n)=1\) 数据范围:\(n\le 50\),\( 阅读全文
posted @ 2021-08-16 11:04 limil 阅读(83) 评论(0) 推荐(0)
摘要:题目 source 题解 首先离散化,让区间值域数量级在1e5。比较容易可以想到一个O(n^2)的做法,即从下到上遍历每一列,在每一列对其下面有交集的列连一条有向边。长度最长的链就是答案。离散化后,就可以直接在线段树上操作区间。线段树维护区间内最长的链长和对应的行的编号。每次加入一行的若干区间更新最 阅读全文
posted @ 2021-08-10 23:27 limil 阅读(72) 评论(0) 推荐(0)
摘要:题目 source 题解 按位计算贡献,$dp[i]$代表前$i$位的答案。第$i$位的贡献如下: 当$n$​为偶数时,如果第$i$位​全为1,那么前$i-1$​位可以随便取; 当$n$为奇数时,第$i$位不能全为1; 如果第$i$位不全为1,则第$i$位只能有偶数个1,贡献为$(2^{n-1}-[ 阅读全文
posted @ 2021-08-10 23:18 limil 阅读(54) 评论(0) 推荐(0)
摘要:题目 source 题解 对于数组B,每增加1个数,相当于数组A增加2个数。设B中上一个数为x,新加的数为y,如果y>x,那么A增加的两个均大于等于x;如果y<x,那么两个均小于等于x;如果y=x,那么一个大于等于x一个小于等于x。在链表上维护一个指针cur,它始终指向每一步的x。如果y>x,y位于 阅读全文
posted @ 2021-07-17 10:23 limil 阅读(59) 评论(0) 推荐(0)
摘要:题目 source 题解 直接计算似乎十分困难,那么可以单独考虑每个数x的贡献。$B_x$为最后$x$存在于队列中的方案数,那么答案就是$\sum{x\times B_x}$。 对于每条类型2的指令I,假设它的值为X,它的方案数可以用dp计算得到。令dp[i][j]代表在第i条指令时队列内比X小的数 阅读全文
posted @ 2021-07-17 10:08 limil 阅读(46) 评论(0) 推荐(0)
摘要:题目 source 题解 问题转化:1可以隔着一个1和0交换位置,等价于将两个连续的1看作一个整体,这个“11”可以与相邻的任意元素交换位置。 统计字符串中有多少组“11”(每个1至多属于1组),于是字符串等价于由“11”,“1”,“0”组成。假设“11”个数是n,“0”的个数为m,不同的情况数等价 阅读全文
posted @ 2021-07-17 09:57 limil 阅读(53) 评论(0) 推荐(0)
摘要:Description 思路 方法1 在树1上dfs,可以确保访问的点是树链,满足性质1;假设把访问到的点都在树2上标记,并将标记点之间的路径缩短到只有一条边,这样就构成一颗新树。而满足性质2的最大个数就是新树的叶子结点个数。只要我们能维护好叶子结点的个数,其中最大值就是答案。 使用树剖,就可以动态 阅读全文
posted @ 2021-05-29 21:29 limil 阅读(179) 评论(0) 推荐(0)
摘要:Description 思路 从样例的图片可以很好的理清思路。 设$dp[i]$为方案数,那么有两种贡献: 用等长的线段覆盖整个区间,共有$g(i)$种情况,其中$g(i)$代表$i$的约数个数。 中间留空,一共有$dp[i-1]+dp[i-2]+...+dp[1]$种情况。 所以转移式是 \(dp 阅读全文
posted @ 2021-05-29 20:51 limil 阅读(132) 评论(0) 推荐(0)
摘要:Description 思路 cf题解中合法的x的处于一段连续区间不太明白。在知道这个前提下,将E1的代码改成二分即可。 有空再补回来。 #include <iostream> #include <cstdio> #include <queue> #include <algorithm> #incl 阅读全文
posted @ 2020-07-04 17:48 limil 阅读(200) 评论(0) 推荐(0)
摘要:Description 思路 看了cf的题解,没想到这么的简单巧妙,tql 如果一个棋子在(x, y),那么它到k列的最小纵坐标i = y + abs(x - k)。所以就可以统计第k列的每一行有将多少枚棋子。 假设有r×m的棋盘,设f(j)为第k列、第j行及以上(j<=r)将有多少枚棋子。那么棋盘 阅读全文
posted @ 2020-06-28 19:02 limil 阅读(426) 评论(0) 推荐(0)
摘要:Description 思路 如果我们知道某一个站$b_i$到对$a_i$的贡献是多少,那么就可以用贪心求解(因为这样我们就知道$b_i$对$a_{i+1}$的贡献,从而知道$b_{i+1}$对$a_{i+1}$...)。所以可以考虑二分$b_i$对$a_i$的贡献。 可以把$b_i$对$a_i$的 阅读全文
posted @ 2020-06-26 22:47 limil 阅读(413) 评论(0) 推荐(0)
摘要:Description 题目大意: $f(x)$为十进制下x每一位上的数字的和。求满足$f(x)+f(x+1)+...+f(x+k)=n$的最小x。 思路 由于k特别小(<=9),故x+k至多发生一次进位。x每加1,必有某一位加上1。如果发生进位,那么$f(x)$只要额外减去若干个9(进位发生后9变 阅读全文
posted @ 2020-06-26 22:27 limil 阅读(543) 评论(0) 推荐(2)
摘要:Description 题目大意是,船要从(x1, y1)行驶到(x2, y2),船可以上下左右行驶或呆在原位不动。同时还有风的影响,船的移动和风的影响可以叠加。问船行驶到终点的最少时间的多少? 思路 由于只要每次行驶和风相反的方向,就至少可以保证保持原位不动。所以船要么可以更靠近终点,要么保持不动 阅读全文
posted @ 2020-06-04 10:36 limil 阅读(100) 评论(0) 推荐(0)
摘要:Description 题目大意是,一个魔法宝石可以分裂成M个普通宝石。你有若干个魔法宝石,问你生成N个宝石(包括魔法和普通宝石)的有多少种情况。 思路 设f[N]为生成N个宝石的方案数,它可以来自N-1个宝石加一个魔法宝石,或N-M个宝石加M个普通宝石(由一个魔法宝石分裂而来)。 所以可以得到递推 阅读全文
posted @ 2020-06-04 09:37 limil 阅读(141) 评论(0) 推荐(0)
摘要:###Description 题目大意:将边长为1的 2n边形(n为奇数) 嵌入一个正方形。这个正方形的最小边长是多少? 思路 大体思路是二分边缩短(\(\Delta L\))的长度,判断多边形能否通过旋转塞进正方形当中(就是判断左上角的边会不会超出边界)。 只要图中那两条边放得进正方形,那么这两条 阅读全文
posted @ 2020-05-18 22:43 limil 阅读(247) 评论(0) 推荐(0)
摘要:"Description" 思路 就是要你实现一个求第k大数的数据结构,大水题。由于空间比较吃紧,所以使用树状数组来实现。这里也当作记录一个模板。 树状数组求第k大数有 $log_2n$ 的实现方法,十分巧妙。 也可以用线段树实现,甚至不用动态开点。只要能一个数组实现就可以。 实现 用贪心的思想,按 阅读全文
posted @ 2020-05-18 22:24 limil 阅读(218) 评论(0) 推荐(0)