摘要: dp 真是又爱又恨,当你推出式子来非常开心,但当你毫无思路时又无可奈何。 阅读全文
posted @ 2024-09-29 07:17 sad_lin 阅读(19) 评论(0) 推荐(1) 编辑
摘要: P3355 骑士共存问题 我还没学网络流所以先讲二分图的做法,讲述下思路怎么推出来的。 可以发现骑士可达的点的颜色总是与自己的颜色相反,放了这个骑士,周围可达的方格就不能放骑士,要求客房的最多骑士数量,发现这与二分图最大匹配是相同的,所以直接进行分点匹配。 #include <bits/stdc++ 阅读全文
posted @ 2024-09-28 18:42 sad_lin 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 很显然看到要求最大值最小就可以想到二分答案,然后依次判断长度是否合法。 这题的输出比较特殊越靠前的区间长度越小,所以我们要将最后得到的答案从后向前依次划分区间即可。 #include <bits/stdc++.h> #define ll long long using namespace std; 阅读全文
posted @ 2024-09-27 20:24 sad_lin 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 欧几里得算法 欧几里得算法又称辗转相除法,用来求两个数的最大公约数的算法。 省流:\(gcd(a,b)=gcd(b,a\mod b)\) 学习笔记 点击查看代码 #include <bits/stdc++.h> using namespace std; int a,b; int gcd(int x, 阅读全文
posted @ 2024-09-23 20:24 sad_lin 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 学习笔记 学习笔记 逆元 当 \(ax\equiv1\ (mod \ b)\) 称 \(x\) 为 \(a \mod b\) 的逆元,记作 \(a^{-1}\)。 求逆元 以下都是求逆元的方法,为了不那么无聊 给个例题做。 拓展欧几里得法 exgcd链接 虽然 exgcd 是为了求 \(ax+by= 阅读全文
posted @ 2024-09-23 19:20 sad_lin 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 小费马定理: 如果 \(p\) 是一个素数,且 \(a\) 是任意整数,则: \[a^p \equiv a \ (\text{mod} \ p) \]当 \(a\) 与 \(p\) 互质时,即 \(\gcd(a, p) = 1\), 则有:$$a^{p-1} \equiv 1 \ (\text{mo 阅读全文
posted @ 2024-09-23 19:02 sad_lin 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 其实三分和二分实现是一样的,但是为什么我还要写一下呢,因为我没学的时候感觉太可怕了,学了后发现也就那样,所以我要记录一下(水题解)。 原题链接 每次三分取 \(x\) 判断大小。 #include <bits/stdc++.h> using namespace std; #define ll lon 阅读全文
posted @ 2024-09-23 17:52 sad_lin 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 裴蜀定理 \(i|j\) 表示 \(i\) 是 \(j\) 的约数。 \(ax+by=c\),\(x,y\in \mathbb{Z}\),该等式成立的条件为 \(gcd(a,b)|c\)。 省流: \[ax+by=gcd(a,b) \]接下来证明一下: 设 \(s\) 为 \(gcd(a,b)\), 阅读全文
posted @ 2024-09-23 17:01 sad_lin 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 欧拉函数 定理 欧拉函数,即 \(\varphi(n)\),表示的是小于等于 \(n\) 和 \(n\) 互质的数的个数,详细定义看wiki。 欧拉函数其实就是容斥原理的应用,举个例子: 如 \(n=6\),\(1,2,3,4,5,6\) 是整个序列,我们将 \(6\) 的质因子 \(2\),\(3 阅读全文
posted @ 2024-09-23 14:16 sad_lin 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 一个正向取前缀和,一个反向取,最后枚举断点。 #include <bits/stdc++.h> using namespace std; #define ll long long int n,sum; int a[200005]; int front[200005]; int back[200005 阅读全文
posted @ 2024-09-23 12:36 sad_lin 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 又是一个思维毒瘤好题,但dp题都是这样,菜就多练吧。 拆环为链,前缀和加速计算,枚举断点数、起点、终点、断点。 #include <bits/stdc++.h> using namespace std; #define ll long long const int N=105; int a[N*2] 阅读全文
posted @ 2024-09-23 10:24 sad_lin 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 原题链接 虽然我还是看题解才会做的(菜),但我还要说这题挺简单的(菜),还是菜就多练。 因为是对一个字符串操作求树的可能数,所以考虑区间dp,设状态 \(dp[i][j]\) 为区间 \(i\) 到 \(j\) 树的状态数。 在转移的过程中如果 \(s_i=s_j\) 时代表这可能为同一个根节点组成 阅读全文
posted @ 2024-09-23 09:21 sad_lin 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 学习笔记 因为这题总是涉及相邻位,所以在计算的时候要多计算几个。 #include<bits/stdc++.h> using namespace std; #define ll long long int n,m; ll dp[15][15]; int a[15]; void init(){ for 阅读全文
posted @ 2024-09-22 09:50 sad_lin 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 纯纯数位dp板子,可以顺着思路下来。 传统技能学习笔记 不要62 libreoj 设状态为 \(dp[i][j]\) 为第 \(i\) 位是 \(j\) 的可能情况数。 枚举位数,这位的数,低一位的数,将每一位的组合可能存下来,但要把这位是 4 与这位是 6 低一位是 2 的情况排除掉。 void 阅读全文
posted @ 2024-09-22 09:00 sad_lin 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 存下输赢代价,计算时先减为平局,判断输赢,如果还是输,那继续加一变为胜利这局,判断输赢。 #include <bits/stdc++.h> using namespace std; #define ll long long const int N=1e6+10; int n; int a[N]; i 阅读全文
posted @ 2024-09-21 22:04 sad_lin 阅读(33) 评论(0) 推荐(0) 编辑