摘要:
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 阅读全文
摘要:
原题链接 题解 反悔贪心,或者说是贪心+优先队列。 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]< 阅读全文
摘要:
原题链接 题解 首先,第一感觉是直接按照字符串本身大小排序再相连;但是通过样例二可知此方法错误。 因此,我们重新思考,上面的排序方法错误的原因在于上述的排序满足 s1<=s2,但是不满足s1+s2<=s2+s1(我们称之为加法的传递原则)。此时我们重新定义排序规则:当s1+s2<=s2+s1时就排序 阅读全文
摘要:
计算区间[1,𝑏]的区间异或,即求 1 𝑥𝑜𝑟 2 𝑥𝑜𝑟 3 … 𝑥𝑜𝑟 𝑏有如下规律: 当 𝑛%4==0时,𝑓(𝑛)=𝑛; 当 𝑛%4==1时,𝑓(𝑛)=1; 当 𝑛%4==2时,& 阅读全文
摘要:
原题链接 题解 显然采用二分答案,下面讲解 check 函数怎么写。 观察到 n 的属于1000以内,所以我们的check函数可以采用平方的复杂度。 我们采取枚举法,假定 ai 可以达到我们的理想值,那么我们只需要从 i 位置开始考虑 k 怎么分配即可。 code #include<bits/std 阅读全文
摘要:
原题链接 题解 题意:找出最大的 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(理由见 阅读全文
摘要:
原题链接 题解 着重点:分类讨论+二分中位数 首先,由于要求中位数,我们先将数组进行排序;接着我们取遍所有的ai及其对应中位数。 此时,分歧产生,我们有k次增值的机会,是加到ai(不会改变中位数)上 还是 增值后改变中位数(此时中位数可能改变)? 显然,我们要分类讨论 情况一:我们加到选取的ai上, 阅读全文
摘要:
原题链接 题解 本质:贪心+dp 首先当我们面对一个矩形时,肯定是不停的枚举其最小边使得score上涨。 为什么面对多个矩形不行呢?我们可以注意观察到最后一组样例的答案是 35 而非36。 那么此时我们知晓了每个矩形 得到score 分的操作数 设为cost [ n ][ score ]。 接下来问 阅读全文
摘要:
原题链接 题解 解法一:三维dp,dp[ root ][ j ][ k ] 含义,以root为根结点的树中只在前 j 棵子树 中选 k 门课程的最大学分。 code #include<bits/stdc++.h> using namespace std; int n,m; int val[305], 阅读全文
摘要:
原题链接 题解 首先,位运算很容易想到按位枚举。而这道题的关键是如何快速求区间异或和。 对此,我们构建一个后缀异或数组即可,甚至这个数组可以进一步优化为 cnt1和cnt0 两个变量。(具体实现看code理解) code #include<bits/stdc++.h> using namespace 阅读全文