摘要: 原题链接 题解 难点一:区间右端点的确定 首先,一个拔高区间的右端点一定是最右端n,接下来假设区间 [ L , R ] L>1 && R<n 我们按照左右区间情况讨论 1、对于区间左边而言——从左边到右,区间对于左侧的区间贡献要么为 0 要么 正贡献 2、对于区间右边而言——从区间到右边,区间拔高后 阅读全文
posted @ 2025-12-07 21:13 黑屿白 阅读(2) 评论(0) 推荐(0)
摘要: 原题链接:UVA12232 Exclusive-OR - 洛谷 或者 Exclusive-OR - UVA 12232 - Virtual Judge 题解: 带权并查集处理异或运算。 首先,对于第二种情况,I a b v 我们可以将a,b连起来形成一个并查集,同时用一个value数组存储当前节点异 阅读全文
posted @ 2025-04-01 15:50 黑屿白 阅读(12) 评论(0) 推荐(0)
摘要: C(n,m)的奇偶性判断奇数:当且仅当(n&m)==m偶数:否则为偶数证明一:根据卢卡斯定理,c(n,m)%2=c(n%2,m%2)*c((n>>1),(m>>1))%2;C(0,0)=1C(0,1)=0C(1,0)=1C(1,1)=1也就是只有m当前位为1的时候,n的当前位也必须为1 转载:C(n 阅读全文
posted @ 2025-02-26 15:37 黑屿白 阅读(46) 评论(0) 推荐(0)
摘要: 原题链接 题解 反悔贪心,或者说是贪心+优先队列。 code class Solution { public: static bool cmp(vector<int > a,vector<int > b){ if (a[1]!=b[1]) return a[1]<b[1]; return a[0]< 阅读全文
posted @ 2024-12-07 18:14 黑屿白 阅读(9) 评论(0) 推荐(0)
摘要: 原题链接 题解 首先,第一感觉是直接按照字符串本身大小排序再相连;但是通过样例二可知此方法错误。 因此,我们重新思考,上面的排序方法错误的原因在于上述的排序满足 s1<=s2,但是不满足s1+s2<=s2+s1(我们称之为加法的传递原则)。此时我们重新定义排序规则:当s1+s2<=s2+s1时就排序 阅读全文
posted @ 2024-12-06 20:39 黑屿白 阅读(20) 评论(0) 推荐(0)
摘要: 计算区间[1,𝑏]的区间异或,即求 1 𝑥𝑜𝑟 2 𝑥𝑜𝑟 3 … 𝑥𝑜𝑟 𝑏有如下规律: 当 𝑛%4==0时,𝑓(𝑛)=𝑛; 当 𝑛%4==1时,𝑓(𝑛)=1; 当 𝑛%4==2时,& 阅读全文
posted @ 2024-11-06 16:47 黑屿白 阅读(63) 评论(0) 推荐(0)
摘要: 原题链接 题解 显然采用二分答案,下面讲解 check 函数怎么写。 观察到 n 的属于1000以内,所以我们的check函数可以采用平方的复杂度。 我们采取枚举法,假定 ai 可以达到我们的理想值,那么我们只需要从 i 位置开始考虑 k 怎么分配即可。 code #include<bits/std 阅读全文
posted @ 2024-09-10 16:14 黑屿白 阅读(24) 评论(0) 推荐(0)
摘要: 原题链接 题解 题意:找出最大的 X 使得 na+mb=X 其中n,m中至少有一个为负数。 由于a,b互质所以n,m一定有解,即X可取任意整数。 因为n,m至少一个为负数,贪心的想最大的X一定在n=-1或者m=-1的情况。 分类讨论,n=-1时,原式子等价于-a+mb=X,此时m最大取a-1(理由见 阅读全文
posted @ 2024-08-26 15:55 黑屿白 阅读(20) 评论(0) 推荐(0)
摘要: 原题链接 题解 着重点:分类讨论+二分中位数 首先,由于要求中位数,我们先将数组进行排序;接着我们取遍所有的ai及其对应中位数。 此时,分歧产生,我们有k次增值的机会,是加到ai(不会改变中位数)上 还是 增值后改变中位数(此时中位数可能改变)? 显然,我们要分类讨论 情况一:我们加到选取的ai上, 阅读全文
posted @ 2024-08-20 21:24 黑屿白 阅读(62) 评论(0) 推荐(0)
摘要: 原题链接 题解 本质:贪心+dp 首先当我们面对一个矩形时,肯定是不停的枚举其最小边使得score上涨。 为什么面对多个矩形不行呢?我们可以注意观察到最后一组样例的答案是 35 而非36。 那么此时我们知晓了每个矩形 得到score 分的操作数 设为cost [ n ][ score ]。 接下来问 阅读全文
posted @ 2024-08-16 23:10 黑屿白 阅读(67) 评论(0) 推荐(0)