关于异或运算,是可以求前缀和的.还有一些异或运算的性质 0^a=a; 交换律 a^b=b^a 结合律 a^(b^c)=(a^b)^c 分配率 a^(b+c)=a^b+a^c 自反律 a^b^b=a 判断两个数是否相等 a^b=0 这个题真的学到好多 要找 al⊕al+1⊕…⊕amid=amid+1⊕amid+2⊕…⊕ar,即 0=al⊕al+1⊕…⊕amid⊕amid+1⊕amid+2⊕…⊕ar: 然后用一个sum数组保留前缀异或. 对于要求r-l+1是偶数,那么l,r一定不同奇偶. 只要找(l…
题意:有一个n*m的方格,每一格可能为空也可能有石头,要从(1,1)走到(n,m),每次可以往右或往下走 每次走的时候都会将自己面前的所有石头向移动方向推一格,如果碰到了边界就推不过去 问方案数模1e9+7 n,m<=2e3 思路:设dp[i][j][0/1]分别为当前走到(i,j),上一次从左/上走的合法方案数 合法的转移是行坐标或列坐标连续的一段,而且受障碍物个数和当前行/列号限制 写出式子之后可以发现决策范围对于i相同或者j相同是单调的,可以用队列维护,但显然二分更好写 #include<…
题意: 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 i ( 1≤ i≤n)个时同段上, 两节内容相同的课程同时在不同的地点进行, 其中, 牛牛预先被安排在教室 ci上课, 而另一节课程在教室 di进行. 在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的n节安排好的课程.如果学生想更换第i节课程的教室,则需要提出中情.若申请通过,学生就可以在第 i个时间段去教室 di上课, 否则仍然在教室…
题目大意:对于一个序列,定义它的价值是它的所有前缀的 $\gcd$ 中互不相同的数的个数.给定整数 $n$,问在 $1$ 到 $n$ 的排列中,有多少个排列的价值达到最大值.答案对 $10^9+7$ 取模. $2\le n\le 10^6$. 一道 Div. 2 的难度 2500 的题,真的不是吹的…… 首先考虑排列的第一个数 .假如分解质因子后为 $\prod p_i^{c_i}$,那么此时排列价值的最大值为 $\sum c_i$. 为什么?因为如果 $\gcd$ 变了,那么一定变成原来 $\…
[Luogu2600]合并神犇 题目背景 loidc来到了NOI的赛场上,他在那里看到了好多神犇. 题目描述 神犇们现在正排成一排在刷题.每个神犇都有一个能力值p[i].loidc认为坐在附近的金牌爷能力参差不齐非常难受.于是loidc便想方设法对神犇们进行人道主义合并. loidc想把神犇的能力值排列成从左到右单调不减.他每次可以选择一个神犇,把他合并到两侧相邻的神犇上.合并后的新神犇能力值是以前两位犇的能力值之和.每次合并完成后,被合并的两个神犇就会消失.合并后的新神犇不能再分开(万一他俩有…
根据裴蜀定理,当且仅当选出来的集合的L[i]的gcd等于1时,才能表示任何数. 考虑普通的dp,dp[i][j]表示前i个数gcd为j的最少花费,j比较大,但状态数不多,拿个map转移就好了. $ \bigodot $ 技巧&套路: 裴蜀定理,gcd为1表示任何数. 当状态数不多的时候,map暴力转移dp. #include <bits/stdc++.h> using namespace std; void Work(int &x) { ; i * i <= x; ++i…
题目链接 第一种解法是$O(n^3*p)$的:f[i][j][k]表示前i个人进j个人长度为k有几种方案(排列固定为123..n时).$f[i][j][k]=f[i-1][j][k]+f[i-1][j-1][k-a[i]]$最外层枚举t表示被卡的那个人.i=t时不加上f[i-1][j-1][k-a[i]].$ans={{(\sum f[n][j][k]*j*j!*(n-1-j)!)+(\sum f[n][n][k]*n)}}/(n!)$. 可以看看这篇题解 #include<cstdio> #…
题目链接:http://acm-software.hrbust.edu.cn/problem.php?id=1472 题意:给n个硬币,面值随意.问恰好凑成m元的种类数(去掉重复). dp(i,j,k)表示i个硬币,j元,最大是k时的种类数. 一开始智障记忆化dfs暴T不止,转成递推还是会T. 结果就考虑先给记忆化dfs加一些剪枝,还是T. 再给递推做一些处理,发现是因为枚举当前最大的时候,最大的l如果是j+2了,即使只有它一个,也是大于j+1了.换到这里来看,是前向着递推,那也就是说,题目所述…
[HAOI2018]奇怪的背包 \(solution:\) 首先,这一道题目的描述很像完全背包,但它所说的背包总重量是在模P意义下的,所以肯定会用到数论.我们先分析一下,每一个物品可以放无数次,可以达到的背包重量其实就是所有\(gcd(a[i],P)\)的倍数. 这一点和天天爱跑步简直神似!因为天天爱跑步中每一个人也可以走无数步,跑到环形(就是模意义下). 但是这道题目还可以加入多种物品,我们不难发现,如果加入i和j两种物品,它所能达到的重量其实只是在gcd中多加了一个,就是所有\(gcd(a[…
[CQOI2011]放棋子 \(solution:\) 看到这道题我们首先就应该想到有可能是DP和数论,因为题目已经很有特性了(首先题面是放棋子)(然后这一题方案数很多要取模)(而且这一题的数据范围很小) 但真正实用的还是分析题目性质:这一道题我们仔细读题,可以发现每一种棋子的影响是相对独立的(即我们只需要知道这种颜色的棋子占了多少行列,而不需要知道它占的哪一行那一列)(这个可以画画图自证一下),而且每一种颜色占多少行和多少列也有方案数(我占两行两列,可以用两个棋子,也可以用三个或四个棋子)(而…