摘要:
我觉得这种题目还很神奇。。 溢出的定义:一个整型表示的数据其实是一个环,比如说short它可以表达的范围是-32768~+32767,那么+32767再加1后就会变成-32768 所以说这一道题目,我们假设输入了一个a,由于b是在int范围内的,所以从a走是不可能走满一圈的;如果a是正数,加上b后得 阅读全文
摘要:
可以想一下这道题(这里样例的二进制是补码) 我的代码 一些其他思路(特别是思路三,想想为啥) #include <cmath> #include <iostream> using namespace std; int main() { char n = 0; int power = 30, k = 阅读全文
摘要:
本来一看数据范围,n为200 就很容易去想以各个区间的序号为状态 但是这样要么顾得了头顾不了尾,要么顾得了尾顾不了头(即以区间左端点排序或者以区间右端点排序) 所以我们以区间的时间为状态,那么这里肯定要离散化,这样枚举的时间既有可能是左端点,也有可能是右端点,就可以推走了 然后可以看看这篇题解 解释 阅读全文
摘要:
首先就是不要折磨自己,设状态可以拆成两维别弄成一维 其次是标记后记得还原现场(搜索要求) 最后一个,一定要把搜索函数的每个参数在递归后表示的东西想清楚!!!这个调了好久 比如说: if(j+2>=y||(last&(1<<j+2))==0||(now&1)!=0) 这个now是填的下一排的状态,为1 阅读全文
摘要:
什么叫做博弈论DP呢? 这里也是双方采取最佳策略,但是与普通博弈论不同的是,这里问的不是先手必胜or必败,而是问的最优值 因此称作博弈论DP 那么这种DP也是像SG游戏一样,我们想出博弈图然后倒推 同时这题也是轮廓线DP,具体见这篇题解 那么为什么菲菲要max,牛牛要min呢? 我们就考虑dp数组的 阅读全文
摘要:
这个题目就当一个见识吧 设f[i][j][k]表示当前的状态是[i,j]并且j后面还有k个与j颜色相同的木块的最大价值 第一种情况,当第j块和第j-1块颜色相同时,f[i][j][k]=f[i][j-1][k+1] 第二种情况,当第j块和第j-1块颜色不同时,考虑最后那一堆颜色相同的怎么消去的 如果 阅读全文
摘要:
这一题很显然是需要我们猜一些结论 然后发现无法证明只写1/2 所以我们尝试找填的数的上限 假设最终的数的最大值为x,那么这个节点的周围肯定有1...x-1,一共x-1个节点 对这x-2个节点(除1外),每个节点都可以产生i-1个节点(其中i是节点的权值) 然后以此类推,不难写出一个代码 #inclu 阅读全文
摘要:
这道题很长 一读完可以发现不是模拟题,那么这道题还有这么多情况供我们去讨论,则一般都是可以去掉一些情况的 我们发现,对任意一种和牌,如果有杠子,我们把这个杠子换成少一张牌的刻字答案是会变得更优的(很简单的列算式) 所以就不用考虑大于15张牌的情况了 对于国士无双暴力即可 对于七对子,算出每一种雀头的 阅读全文
摘要:
这一道题如果直接做是没有什么思路的,所以我们合理猜测应该是有什么结论 看这个数列最开始就只有三个值,所以我们猜测最后也只有这三个值 下面是证明 首先第一个数最小是-1,所以所有数的下界是-1 其次如果存在某一个数大于1,我们找到这个数列最前面的这个数,那他前面的数肯定是1,然后对相同的操作我们把这个 阅读全文
摘要:
这种题看起来很难确定如何给出一个简单的判别方法去判断是否符合条件的一般都是证明下界再构造下界 首先给出结论:对于一个数列,某一个数字\(i\)的个数有\(cnt[i]\)个,那么此数字可以覆盖一个区间\([i-cnt[i]+1,i]\),遍历\(1\) ~ \(n\)每一个数字并更新每个数字被当前区 阅读全文