摘要:
1.无向图删边 使得每个点连接的边数为奇数 直接dfs即可 2.判断树上两条路径是否相交 LCA(u,v)在<x,y>上 或者 LCA(x,y)在<u,v>上 3.判断一个点x是否在路径(u,v)上 dp[LCA(u,v)]<=dp[x] 并且lca(x,u)=x||lca(x,v)=x 4.树上n 阅读全文
摘要:
https://pintia.cn/problem-sets/1703372159713652736/exam/problems/type/7 I Pa?sWorD 分析: 每个字符必须得至少出现一次 立马想到容斥 转移就顺序转移就好 不过有空间限制 因为当前位置的所有状态都由上一个位置转移 所以我 阅读全文
摘要:
https://oi-wiki.org/math/combinatorics/vandermonde-convolution/ 一些其他的公式: 阅读全文
摘要:
https://www.cnblogs.com/wzxbeliever/p/16484848.html 这是一道非常好的容斥题目 求矩形的并集 并且可以在规定区域内求矩形的并集 https://www.luogu.com.cn/problem/P1450 分析:一道非常牛逼的容斥 如果我们就赤裸裸的 阅读全文
摘要:
![](https://cdn.luogu.com.cn/upload/image_hosting/e5b29xuf.png) ![](https://cdn.luogu.com.cn/upload/image_hosting/ps9okvi5.png) ![](https://cdn.luogu. 阅读全文
摘要:
BD202201 洞穴 https://www.matiji.net/exam/brushquestion/1/3956/4FCAF025E79704820690062E3FDE6CA1 分析: 从小到大依次处理边 这样的好处在于如果此时没有合适的中间点 我们只需合并就好 因为后续的边一定更大 不可 阅读全文
摘要:
Wannafly挑战赛1 https://ac.nowcoder.com/acm/contest/15 A 给定一棵n个点的树,问其中有多少条长度为偶数的路径。路径的长度为经过的边的条数。x到y与y到x被视为同一条路径。路径的起点与终点不能相同。 分析:开始以为是个很复杂的dp 其实只需要将点按照深 阅读全文
摘要:
https://pintia.cn/problem-sets/994805046380707840/exam/problems/1649748772845703169 当时比赛的时候想到方法的 结果时间不够了.... 后面一遍就过了 挺可惜的吧 分析: 分情况 如果子树大小为偶数 这样里面一定是一半 阅读全文
摘要:
https://codeforces.com/problemset/problem/1819/B 分析:总面积总是不变的 考虑第一刀横着劈开 这样一块宽度是最大的 同理竖着劈开 高度是最大的 这样两种情况 通过算面积能够求出剩下的长宽度 考虑贪心 对于剩下的块 如果有长宽相匹配的就直接匹配 顺序不重 阅读全文
摘要:
A 构造 分析: 这个题目思维挺好的 #include<bits/stdc++.h> #define ll long long using namespace std; const int M=1000005; int p[M]; int main() { int n,a,b,t; cin>>t; 阅读全文
摘要:
https://pintia.cn/problem-sets/994805046380707840/exam/problems/994805047638999040 大意是在一条直线上,有N个从0..N-1编号的城市,每个城市之间的道路有最大负载ai,现在有M张从i城到j城的运货订单,假设每个城市的 阅读全文
摘要:
https://codeforces.com/contest/1794 C. Scoring Subsequences 分析: 发现每次前i个的最优答案一定是从后往前连乘的一段 分母依次可以考虑为1 2 3 4。。。(也就是n-i+1) 从后往前考虑 发现只要当前a[i]的>=n-i+1 对答案一定 阅读全文
摘要:
https://ac.nowcoder.com/acm/contest/50846 A.优美数字 直接按照题意模拟即可 求出rev(x) B.树上赋值 分析: C.上班 分析 具体代码 先将走到<n,m>的路径提出来 对于其他分支 用背包去跟新他 背包开一个新数组方便转移 对于主干上 用得到的每个分 阅读全文
摘要:
https://ac.nowcoder.com/acm/contest/51137 对于非完全图的情况 从大到小把边去掉即可 阅读全文
摘要:
https://ac.nowcoder.com/acm/contest/49244 小杜要迟到了! 分析: 比较(n-1)a和 (n+k-2)b的大小,按要求输出结果即可。 时间复杂度O(1) #include<bits/stdc++.h> #define ll long long #define 阅读全文
摘要:
https://ac.nowcoder.com/acm/contest/42819 题目出得很好 分析: 很清晰的一道启发式合并 小集合合并到大集合 当 1 在大集合时 遍历小集合的时候就可统计答案 当 1 在小集合时 因为每个点最多只会统计一次答案 此时遍历大集合也能统计答案 #include<b 阅读全文
摘要:
分析: 不可能把所有情况都给列出来 但是好像这样可以得一半的分数 考虑每个点对 对答案产生的贡献 发现具有父子关系的点对无论什么情况 相对位置都是固定的 产生的贡献就是再乘上f[rt] (f[rt]表示整个树的不同dfs序的种类) 关键在于不具有父子关系的点对 该如何考虑 假如<a,b>是不具有父子 阅读全文
摘要:
https://codeforces.com/gym/104090 唉我还是太菜了 A.Modulo Ruins the Legend 纠正一下:第一种情况最小是sum2 第二种情况最坏是sum2 可以比sum2更小 为什么? 因为g是m的因数 所以后面就会循环了 题解中说明:其实d只用取0或者1 阅读全文
摘要:
https://codeforces.com/gym/102059/problem/G 题意: 一条街上一共 N 个点,需要在某些点上建路灯,使得整条街被照亮,一个路灯可以照亮左右两个点,每个点都有一个建路灯的花费。 现在你还有 K次机会,可以交换两个路灯的建造费用,求使得整条街被照亮的最小花费。( 阅读全文
摘要:
https://zhuanlan.zhihu.com/p/560661911 https://codeforces.com/contest/600/problem/E 非常裸的题 前面知乎链接里面有讲 const int N = 1e5 + 5; int n, c[N], id[N], tot = 阅读全文
摘要:
https://codeforces.com/contest/1709 C. Recover an RBS 题意: 这里原本有一个合法的括号序列,现在将这个合法的括号序列中的一部分字符串替换为 ? 你可以将 ?替换为 ( 或者 )问替换出合法括号序列的方式是否唯一 分析: 题目要求判断方式是否唯一 阅读全文
摘要:
https://codeforces.com/gym/104076 E. Identical Parity 分析: 简化问题 A个长度为M的长链 B个长度为M-1的短链 问能否将这些链分为两部分 两部分差值小于等于1 特别注意:对于正数和负数的向上向下取整不可同日而语 两种操作不同 #include 阅读全文
摘要:
https://codeforces.com/gym/104077 C. Clone Ranran 签到题 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using 阅读全文
摘要:
做的有点慢 但是准确性很高 C. No More Inversions 分析: 首先算出该序列的逆序对显然对构造没有任何帮助 pass 一般这样的题目都会有巧妙点 也就是思维题 随便构造一组数据 1 2 3 4 3 2 1 最差的情况就是p为原序列 1 2 3 4 然后想办法优化 使得字典序最大 发 阅读全文
摘要:
**D. Meaningless Sequence** ![](https://cdn.luogu.com.cn/upload/image_hosting/wfsjpbu3.png) **分析:** 我居然找规律做出来了!!!! ![](https://cdn.luogu.com.cn/upload 阅读全文
摘要:
https://codeforces.com/gym/103470 H. Crystalfly 分析: 可以很好的分析出 一个节点 最多只能选择两个儿子产生贡献 过程就是 u子树中 x y分别为u的儿子并且t[y]=3 u先到x 然后立马折返 回到y 或者直接选择一个点往下走 dp[u][0] 表示 阅读全文
摘要:
题意: 给你一个长度为n的序列。对于每一个k,k∈[1,n].问你将其分成k个段,每个段的贡献为该段最大值-最小值。贡献总和最大值是多少.n≤1e3 分析: 很好写出一个朴素的dp dp[i][k]=dp[j][k-1]+MAX a(j+1,i)-MIN a(j+1,i) 其中0<j<i 但是复杂度 阅读全文
摘要:
L Let's Play Curling 分析: 转换一下就是 找每两个b之间 最多有多少个a 先离散化 再树状数组维护一下就好 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long 阅读全文
摘要:
A. A Hero Named Magnus 签到题 输出2x-1 注意用到unsigned long long I. PTSD 签到题 G. Occupy the Cities 分析: 考虑从左到右依次考虑 pre表示当前1需要向前贡献多少 并且不断跟新pre 因为在有限的时间内 所有的1都尽可能 阅读全文
摘要:
我的首站 本来想着练练手 拿铜牌血赚 打铁不亏 结果 保底铜牌 要是G题做出来应该可以冲击一下银牌 https://codeforces.com/gym/104008 A. Lily 签到题:所有不在 L 旁的字符替换为 C 即可。 #include <iostream> #include <cst 阅读全文
摘要:
题意: 有一根围绕原点O顺时针旋转的棒OA,初始时指向正上方(Y轴正向)。在平面中有若干物件,第i个物件的坐标为(xi,yi) ,价值为zi 。当棒扫到某个物件时,棒的长度会瞬间增 长zi,且物件瞬间消失(棒的顶端恰好碰到物件也视为扫到),如果此时增长完的棒又额外碰到了其他物件,也按上述方式消去(它 阅读全文
摘要:
题意: 小青蛙住在一条河边,它想到河对岸的学校去学习。小青蛙打算经过河里的石头跳到对岸。河里的石头排成了一条直线,小青蛙每次跳跃必须落在一块石头或者岸上。不过,每块石 头有一个高度,每次小青蛙从一块石头起跳,这块石头的高度就会下降1,当石头的高度下降到0 时小青蛙不能再跳到这块石头上(某次跳跃后使石 阅读全文
摘要:
选数异或 题意: 给定数组a 和整数x ,m 次询问,每次询问区间[ l , r ] 是否存在两个数字使得异或值等于x 分析: 一个比较经典的解法 对每个数字a [ i ] ,找到它左边最近的a [ j ] ,满足a [ i ] ⊕ a [ j ] = x,则< j , i > 二元组是一个合法解, 阅读全文
摘要:
H Hard Calculation 签到题 J Parallel Sort 分析:很好想到找环 对于每个环 最多两次操作即可还原 构造每个环的方案 :每次将环脱去一对即可 开始我构造的按照顺序脱去一对 但是只过了70个点 正解为首尾依次脱环 #include<iostream> #include< 阅读全文
摘要:
A Matrix Equation 分析:其实很好列出n*n个方程组 最后答案就是pow(2,方程组自由解的个数) 但是很明显复杂度是过不了的 仔细观察可以发现 c矩阵一列是单独的一组n元方程组 所以可以对于每列进行高斯消元 复杂度n的4方 但是此时还是不能过200 有个关键的结论 相加模2 等价于 阅读全文
摘要:
A Mocha 上小班啦 题意 求有 n 位且每位数字都不同的最小正整数 1 ≤ n ≤ 20 签到题 B hash 分析: 其实很好想到dp 但是数据范围不允许n方 考虑本题的性质 发现长度超过15 就会超过模数 所以对于第二维枚举 不用从头开始枚举 直接从结尾往前十五位开始枚举就好 E Serv 阅读全文
摘要:
A 《签到题》 开局被这个签到题搞心态了 md #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long int main(){ int n,x,c,ans=0; cin>>n 阅读全文
摘要:
质量很高的几道题 A October的落叶 签到题 没啥说的 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long const int maxn=4e5+5; int T, 阅读全文
摘要:
B potion 题意: 有一个容量仅在一半位置有刻度的量杯,有两类水,求最小接水步数使得杯子里面两类水的比例为 x : y,或者输出无解。 分析: 找规律可以发现 最终成立的话 x+y一定是2的次幂 一直不断递推可以发现 成立的条件是一定最初会回到1 比如 3 5 3是怎么来的 4-1=3 出现了 阅读全文
摘要:
K 题意: 一个钟表,三个指针都是连在一起的,问某一时刻的位置。 做法: 模拟一下就好 int len1, len2, len3; int t1, t2, t3; double pi = acos(-1); void slove() { int T; cin >> T; cin >> len1 >> 阅读全文