摘要: 神仙题%%% 场上想了两个小时都没想出来 #include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; #define fi first #define se second #define mp make_pair #de 阅读全文
posted @ 2021-03-11 16:34 cminus 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 想清楚它不是DP而是贪心就好做了 首先, 我们称子树刚好包含所有某一颜色的点为临界点, 那我们要优先选择深度越深的临界点越好 用另一种方式来说, 在dfs的过程中, 第一次发现有一个点恰好为临界点,那么就选择这个点为分界线新增一个答案, 很容易想清楚, 选择越深的肯定更优, 让其它点的有更多分块的机 阅读全文
posted @ 2021-03-08 20:06 cminus 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 官方题解传送门 B 系数 这一题的重点就在于1和-2在模3下是同余的,所以这一题的$(x2+x+1)2$和$(x2-2x+1)2$在3下是同余的,题目就转化成了求$(x2-1){2n}$的第$k$项系数,用二项式定理可知,就是$(-1)^C(2n, k)$,用Lucas求解即可 #include < 阅读全文
posted @ 2021-03-01 16:46 cminus 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 这题在场上卡了我很久,研究了一段时间题解之后觉得非常精妙,所以决定认真写一写题解 第一种方法: 就是题解方法,我们考虑对于数字串的每个数字加入哪一个串,此时第一个串末尾是t1,第二个是t2,当前这个是x \(x \neq t1\) && \(x = t2\) 或者 \(x = t1\) && \(x 阅读全文
posted @ 2021-02-16 16:24 cminus 阅读(55) 评论(0) 推荐(0) 编辑
摘要: 树上DP,考虑到先后手变化只和子树大小有关,因为每条边走两次,点走一次; 令dp[u]为拿u点coin的情况下对于整个子树,两人的硬币差会是多少,那么对于另一方而言,先选择不交换先后手并且对自己更好的子树(即dp[v] < 0),然后和另一方轮流选择子树,两方都会选择dp[v]尽可能最小的让自己的尽 阅读全文
posted @ 2021-02-15 16:26 cminus 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 整出来了七道题,ABC最后都没做赛后补的 A题我和题解以及大部分人思路都不一样,并没有用到树状数组,我甚至看到有笛卡尔树做的(并不会),我是用了两次单调栈,维护两边最远的位置,再算贡献,然后这样写好像是代码长度最短的,应该是最简单的方法吧,但是这么写细节上也有很多坑,比如最小值不在区间内,在端点上时 阅读全文
posted @ 2021-02-13 16:50 cminus 阅读(65) 评论(0) 推荐(0) 编辑
摘要: 简单构造,推了一会就推出来了,无法理解为啥有2500分,感觉还不如一些1900的题( #include <bits/stdc++.h> using namespace std; int main() { int t; scanf("%d", &t); while (t--) { int n; sca 阅读全文
posted @ 2021-02-02 15:06 cminus 阅读(65) 评论(0) 推荐(0) 编辑
摘要: 最优贸易 分层图SPFA,三层图,第二层是购买,第三层是卖出,但是虽然没有卡SPFA,最坏情况下复杂度是会到$O(n^2)$的 Tarjan强连通分量缩点+DP(ps:很麻烦) 最优解,把所有的点从小到大排序,从最小的点开始尽可能BFS更新所有点,所以复杂度是$O(m + n)$ 飞行路线 分层图裸 阅读全文
posted @ 2021-01-25 01:29 cminus 阅读(60) 评论(0) 推荐(0) 编辑
摘要: \(x > y\) 的时候,每次都在降低,直接看能不能撑住t次 \(x <= y\) 的时候,情况比较复杂一些,可以这样考虑,只有在当前的水量已经没办法再减少,又无法加 \(y\) 的情况下,才会出现超出范围,所以如果 \(l-r\) 的范围是超过或者等于 \(x+y\) 的,是不会出现这种情况的, 阅读全文
posted @ 2021-01-17 22:07 cminus 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 用了很神奇的办法,对于每一个数,取反,暴力找它所有子集,如果dfs到的数字又是我们输入的数字,就继续取反暴力找子集 #include <bits/stdc++.h> using namespace std; const int N = (1 << 23) + 10; int a[N]; bool v 阅读全文
posted @ 2020-12-06 20:20 cminus 阅读(77) 评论(0) 推荐(0) 编辑