随笔分类 - 题解
摘要:题面 对于每一个开关,我们可以看成一个0/1串,初始是一个全部为0的串,要求经过这些开关的操作后,出现的不同的0/1串的个数 建模就是存在一些数,这些数异或起来是0(等价于没有操作)。那么需要求一个集合,满足集合中元素相互异或不会出现0. 线性基派上用场了。 接下来就是线性基的基本插入操作和统计一下
阅读全文
摘要:题面:小澳的葫芦【 题目描述】小澳最喜欢的歌曲就是《葫芦娃》。一日表演唱歌,他尽了洪荒之力,唱响心中圣歌。随之,小澳进入了葫芦世界。葫芦世界有 n 个葫芦,标号为 1~ n。 n 个葫芦由 m 条藤连接, 每条藤连接了两个葫芦, 这些藤构成了一张有向无环图。小澳爬过每条藤都会消耗一定的能量。小澳站在
阅读全文
摘要:题面 注意到每次只染色一行或者一列,那么我们最后输出第i行第j列的数字是多少的时候只需要看一下最后一次i行和第j行被染了什么颜色,所以我们需要对每一行和一列记录最后一次染色的颜色。 但是我们也需要比较是行比列后染色还是列比行后染色,所以我们还需要记录一下每行每列染色的最后时间。 然后模拟即可
阅读全文
摘要:题面 显然,n有n个位置可以选择,我们先来考虑两边的位置。 如果插入到最左边,会造成新的序列比原来多一个大于号 如果插入到最右边,会造成新的序列比原来多一个小于号 如果插入到大于号的位置,删去一个大于号,多一个大于号一个小于号,也就是多一个小于号 如果插入到小于号的位置,删去一个小于号,多一个大于号
阅读全文
摘要:题面 好题啊!~ 设f[i][j][k][l]表示已经处理完前i个请求后,a在j,b在k,c在l的最小值是多少; 那么f[i][p[i]][k][l]=min(f[i][p[i]][k][l],f[i-1][j][k][l]+c(j,p[i])); f[i][j][p[i]][l]=min(f[i]
阅读全文
摘要:题面 好难啊好难啊好难啊~(以后再玩魔兽的时候绝对绝对虐死他) 做完后总结了一下思路; 首先推一下以下三条性质: 1.若两个 i 与 i+1 不相邻,那么我们直接交换这两个数字就可以组成一个新的数列 (这一条便是我们状态转移的依据) 2.每个数字ai 变成 (n+1)-ai 会得到另一个数列,且新数
阅读全文
摘要:题面 引理1: 1~n中的最大反质数,就是1~n中约数个数最多的数中最小的一个(因为要严格保证g(x)>g(i)); 引理2:1~n中任何数的不同因子不会超过10个,因为他们的乘积大于2,000,000,000; 引理3: 1~n中任何数的质因子的指数总和不超过30; 引理4: x的质因子是连续的若
阅读全文
摘要:题面 这道题是一道整除分块的模板题; 首先,知道分块的人应该知道,n/i最多有2*sqrt(n)种数,但这和余数有什么关系呢? 注意,只要n/i的值和n/(i+d)的值一样,那么n%i到n%(i+d)的值就是一个等差数列!因为n/i=n/(i+1)*(i+1)=n/i*(i+1)=n/i*i+n/i
阅读全文
摘要:题面 裸的树上背包: 设f[u][i]表示在以u为子树的树种选择i条边的最大值,则:f[u][i]=max(f[u][i],f[u][i-j-1]+f[v][k]+u到v的边权);
阅读全文
摘要:题面 这是一道标准的带反悔贪心; 利用大根堆来维护最大值: 当选择了num[i]后,反悔了,反之选择选了num[i-1]和num[i+1]时获利便增加了num[i-1]+num[i+1]-num[i]。 所以当num[i]被选时,我们就可以删去num[i-1]和num[i+1],并把num[i]改成
阅读全文
摘要:题面 lcm(x,y)=xy/gcd(x,y) lcm(x1,x2,···,xn)=lcm(lcm(x1,x2,···,xn-1),xn)
阅读全文
摘要:题面 我来一发很实用的题解;本人想出了O(n)的做法,是一种DP;先说大体思路:答案分两种情况,一种是选择的两段均不跨越n到1(也就是环),另一种是选择的两段跨过了环;如果均不跨越环,那么也就是意味着这是一道模板题;设maxl[i]表示从1~i的最大字串和,maxr[i]表示i~n的最大字段和;很明
阅读全文
摘要:题面 注意一个细节,查询和更新都需要pushdown();
阅读全文
摘要:题面 这道题是一道隐藏的比较深的DP(我太蒟蒻了!) 设f[i][j]表示到第i列时高度为j的最少步数是多少; 求上升时的方案就是一个完全背包!,求下降时的方案就是一个01背包; 然后处理边界就能A掉;
阅读全文
摘要:题面 并查集处理问题的基本思路:如果不是强制在线那么可以倒着处理,把删边改为可爱的加边,然后使用并查集来判断是否联通; 所以可以较为轻松的写出AC代码:
阅读全文
摘要:题面 一道思维难度不大的状态压缩,也并不卡常,但细节处理要格外注意; f[i][j]表示前i行最后一行状态是j的方案数
阅读全文
摘要:题面 一个树形DP, f[i]=表示以i为根可以得到的子树个数; 则f[i]*=(f[j]+1); 初始化f[i]=1; ans=sigma(f[i]);
阅读全文
摘要:题面 状态可能不太好想,设f[i][j][k]表示前i行其中有j行是放一个炮,有k行是放两个炮的合法方案数; 那么: f[i+1][j][k]+=f[i][j][k] 在这一行不放任何棋子; f[i+1][j+1][k]+=f[i][j][k]*(m-k-j); 在剩余的m-k-j个空行中随机选择一
阅读全文
摘要:题面 这道题我觉得是个不错的题; 根据题意可以较清晰的发现ans只和n和k有关;(因为输入的只有这两个数啊~); 那么设f[i][j]表示前i层用了j个节点的方案数,g[i][j]表示深度小于等于i并且用了j个节点的方案数总和; 对于一颗树,可以把它分成3部分:根节点,左字树,右子树; 对于一颗深度
阅读全文
摘要:题面 设f[i][j][k][l]为从小渊传到小轩的纸条到达(i,j),从小轩传给小渊的纸条到达(k,l)的路径上取得的最大的好心程度和。 f[i][j][k][l]=max( f[i][j-1][k-1][l] , f[i-1][j][k][l-1] , f[i][j-1][k][l-1] , f
阅读全文

浙公网安备 33010602011771号