随笔分类 - ACM
大二到大三不堪回首的记忆....
摘要:原题链接 考察:线性dp 思路: 二分求最长上升子序列板子题,我们可以发现二分求得的最长上升队列中,保存的就是当前长度最小的数字,因此我们只需要每覆盖一个存储它们前面一个,最后递归输出. ##Code #include <iostream> #include <cstring> #include <
阅读全文
摘要:原题链接 考察:线性dp 思路: 其实递推方程超简单,只是我蠢. if(s[i]>s[j]) dp[i]+=dp[j] else if(s[i]==s[j]) dp[i]-=dp[j]; 如果s[i]==s[j],那么dp[i]从前面<s[i]获得的子序列都要减去,因为与s[j]构成了重复. ##C
阅读全文
摘要:原题链接 考察:二分+思维 思路: 杨辉三角有一半重复,所以我们只需要看一半.可以发现每条红线遍历处都是由内向外递增,中间红线是${i \choose 2i}\(,是每一个斜线的开头.n一定在某一条斜线上,我们可以枚举斜线再二分找位置.这里斜线最多16条(\){17 \choose 34}>10^9
阅读全文
摘要:原题链接 考察:背包dp yxc:没做出来本题的反思自己有没有认真听基础课 我:菜狗不配() 思路: dfs写的,当时觉得铁TLE,但是没有想到别的做法(.) f[i][j]表示前i个物品重量为j是否能实现. dp方程: f[i][j] = f[i-1][j] f[i][j] = f[i-1][j+
阅读全文
摘要:原题链接 考察:费马小定理 思路: 指数对1000000007-1取余,模板题我WA了n次. 讲讲坑点:开long long,N>=1不代表指数-1一定>=0,存在%(M-1)-1<0的情况 ##Code #include <iostream> #include <cstring> using na
阅读全文
摘要:原题链接 考察:欧拉定理 思路: 已知每个8888...888都可以被表示成: \(nums = \frac {8\times(10^x-1)}{9}\) $$ nums \equiv 0 \pmod L$$ $$ (10^x-1)% \frac{9\times L}{gcd(8,L)}==0$$
阅读全文
摘要:原题链接 考察:思维 思路: 每个操作都与c无关,且只+-2个a,b.也就是说这是不改变a,b个数的奇偶性的.因此操作与c无关,所以将每个c分割看成一段,比较奇偶性. 本蒟蒻是纯暴力打法,比较简单的代码就是利用异或了. ##Code #include <iostream> #include <cst
阅读全文
摘要:原题链接 考察:贪心+思维 思路: 说是D题,思路比C题明显,很明显经过次数最多的边赋最大的值,虽然是构造但思路非常明显. 难点是怎么计算经过每条边的次数(本蒟蒻就卡这了菜是原罪),经过查看题解观察可得对于一条边(u,v),有sz[v](v点以及v的子节点)个点会经过v到达u或者u以上的点,两两配对
阅读全文
摘要:原题链接 考察:思维 这题也是sb,分析出了只要有存在路径使得所有gcd(x,y)==min的可达,就可以任意交换,然后思路岔到欧拉函数去了(.) 思路: 如上文,任何min的倍数与min gcd都 = min,所以min可以使得倍数之间任意交换.我们检查每个数,如果不是倍数且不在应该的位置上就"N
阅读全文
摘要:原题链接 考察:贪心(?) 我是sb,A题想半天还是错的(.) 思路: \(x_b-(x_a-x_b) = k\) \(2*x_b-x_a = k\) 由此发现只要k+xa%2==1就需要移动.此时xa可以通过左移右移来使k+xa为偶数. 从这里开始根本不需要解不等式!直接讨论$x_a$与k: \(
阅读全文
摘要:原题链接 考察:约数 推到一点感觉完全没规律就没继续了,没想到操作如此之骚... 思路: \(\frac 1x+\frac1y=\frac1{n!}\) \(\frac {x+y}{xy}=\frac1{n!}\) 因为有两个变量,而我们用控制变量法才好求个数,因此我们最好用x(y)表示y(x).
阅读全文
摘要:原题链接 考察:约数 这题很久以前做过一次,但我没写博客,结果再来一次我还是不会(.) 错误思路: 倍数法求每个a[i]的倍数,基本代码如下: for(int i=1;i<=n;i++) { scanf("%d",&a[i]); for(int j=1;j<=M/a[i];j++) sum[j*a[
阅读全文
摘要:原题链接 考察:数位dp 思路: 求回文数字的个数. dfs参数: 1.pos 枚举到第几位 2.len 回文数的长度. 其实不需要变量记录是否合法,不合法的不取搜就行了. ##Code #include <iostream> #include <cstring> using namespace s
阅读全文
摘要:原题链接 考察:数位dp 思路: 定义一个变量st,目前枚举的数字的状态. st==0 跟上位比递减 st==1 跟上位比严格递增 st==2 出现了山峰现象. 如果出现了与上位相等或者之前出现了山峰现象,直接把状态传递下去. Code #include <iostream> #include <c
阅读全文
摘要:原题链接 考察:数位dp 思路: 预处理f[i][j][k]表示前i位数,最高位是j,k出现的次数. f[i][j][k] = \(\sum_{t=0}^9\) f[i-1][t][k]; (j!=k) f[i][j][k] = 10i-1+\(\sum_{t=0}^9\) f[i-1][t][k]
阅读全文
摘要:原题链接 考察:数位dp 莫得思路,参考大佬的题解(.) 思路: 1. 整除所有数位的数 == 整除所有数位的lcm 2. sum%(a*b)%b = sum%b; dp方程: f[pos][pre_sum][pre_lcm]+=f[pos-1][pre_sum*10+i][lcm(pre_lcm,
阅读全文
摘要:原题链接 考察:数位dp 这道题能用递推的方式实现吗...如果有请告知本蒟蒻(.) 错误思路: 建立dp数组f[pos][len][last]表示枚举到第pos位,目前长度为len,上一位是last的情况.如果我们枚举的i>last,len+1.如果i<=last,len不变,last不变. WA数
阅读全文
摘要:原题链接 考察:数位dp+状压dp 思路: 因为要求每个数字的出现次数,我们只能把所有数字的出现次数记下来.因为数字比较少考虑状压.有三种状态: 0:没出现过 1:出现奇数次 2:出现偶数次 这道题的状压dp预处理并根据情况计数感觉不是很好实现,如果用记忆化搜索我们只需要到终点看是否合法就行.注意前
阅读全文
摘要:原题链接 考察:数位dp 思路: 预处理的思路就是像背包dp那样不超过体积V的方案数,这里V对应f(a). #include <iostream> #include <cstring> #include <vector> using namespace std; typedef long long
阅读全文

浙公网安备 33010602011771号