摘要: 设 \(f_i\) 表示最后一个区间以 \(a_i\) 结尾的方案总数,也即前 \(i\) 个数的方案总数。最后的答案是 \(f_n\)。 很容易得到转移方程: \[f_i = \sum_{j=1}^{i-1}f_j \]其中,需要保证 \(a_i \sim a_j\) 是一个合法区间才能累加,这个 阅读全文
posted @ 2024-10-24 17:02 Jerrycyx 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 这里将每一个三元组 \((a_i,b_i,c_i)\) 称为一组数。 Subtask 1 暴力枚举所有的非空子集即可。 枚举方式可以采用类似状压 DP 的二进制枚举或者直接 DFS。 时间复杂度 \(O(N \times 2^N)\)。 Subtask 2 性质:此时的特征值最多由两个有效组组成,原 阅读全文
posted @ 2024-10-24 09:52 Jerrycyx 阅读(12) 评论(0) 推荐(0) 编辑
摘要: A. Image Scaling 签到题,找出举行宽高以后直接除以它们的 \(\gcd\) 使它们互质即可。 (这道题居然会有人又 WA 又 RE,我不说是谁) 点击查看代码 #include<cstdio> #include<cstring> using namespace std; const 阅读全文
posted @ 2024-10-22 16:19 Jerrycyx 阅读(15) 评论(0) 推荐(0) 编辑
摘要: A - 369 样例已经包括了所有的情况(真良心)。 点击查看代码 #include<cstdio> #include<algorithm> using namespace std; int main() { int a,b; scanf("%d%d",&a,&b); int ans=0; if(a 阅读全文
posted @ 2024-10-21 18:57 Jerrycyx 阅读(11) 评论(0) 推荐(0) 编辑
摘要: A. Two Friends 一共只有两种情况: 存在 \(A\) 的最好朋友是 \(B\) 且 \(B\) 的最好朋友是 \(A\) 的情况:此时只需邀请这两个人即可。 不存在上述情况:设某个人 \(A\) 的最好朋友是 \(B\),\(B\) 的最好朋友是 \(C\),这时邀请 \(A,B,C\ 阅读全文
posted @ 2024-10-21 14:58 Jerrycyx 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 总体发挥还算正常 A - Jiro 呵呵呵,有人像我这么做的吗? 点击查看代码 #include<cstdio> using namespace std; int main() { char ab,ac,bc; scanf("%c %c %c",&ab,&ac,&bc); if(ab=='<'&&a 阅读全文
posted @ 2024-10-18 20:33 Jerrycyx 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 比赛链接 正常发挥 A. Verify Password 挨个判断即可,秒了。 #include<cstdio> #include<cstring> using namespace std; const int N=25; int T,n; char str[N]; bool is_digit(ch 阅读全文
posted @ 2024-10-18 20:01 Jerrycyx 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 思路全在注释里了: #include<cstdio> #include<cmath> #include<algorithm> using namespace std; const int N=5e5+5; int n,l,r,a[N]; bool Solve() { //打工次数:一个人能将其他人运 阅读全文
posted @ 2024-10-10 19:54 Jerrycyx 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 空位与数(game) 贪心即可,因为正正得正,负负也得正,所以将两个数组分别按照正负性分开,然后让正数里面大的配上大的,负数里面绝对值大的配上绝对值大的,这样可以让正积总和尽量大。剩下不足的(必须要一正一负相乘的)让绝对值大的配绝对值小的,这样可以让负积总和尽量小。 #include<cstdio> 阅读全文
posted @ 2024-10-09 16:25 Jerrycyx 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 排序算法 稳定性 最优时间复杂度 平均时间复杂度 最坏时间复杂度 空间复杂度 选择排序 不稳定 \(O(N^2)\) \(O(N^2)\) \(O(N^2)\) \(O(1)\) 冒泡排序 稳定 \(O(N)\) \(O(N^2)\) \(O(N^2)\) \(O(1)\) 插入排序 稳定 \(O( 阅读全文
posted @ 2024-10-05 20:40 Jerrycyx 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 思路与官方题解一样,不过我采用了递归的写法,这样就可以避免排序等操作。 另外还要注意递归的时候不能让多个不同的递归函数同时修改一个数组,否则这个数组同时被多个函数使用,会很混乱。我这里把它开成了二维来避免这个问题。 代码如下: #include<cstdio> #include<algorithm> 阅读全文
posted @ 2024-10-05 20:40 Jerrycyx 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 题目大意: \(2 \times n\) 大小的方格矩阵,某些格子不能走,走过的格子不能走。从任意点出发,一次最多走多少次? 首先有一个贪心的思想,每次从最左走到最右,只能向上下右走,不能向左走(因为向左走一定不会让步数更多)。 动态规划,设 \(f_{i,j}\) 表示从每个连通块走到 \((i, 阅读全文
posted @ 2024-10-05 19:07 Jerrycyx 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 题目大意:一个由四种镜面(| - / \)组成的矩阵,根据镜面的方向反射光线。问坐标 \((x,y)\) 处向某方向射入一束光线后(此光线会直接穿过此位置 \((x,y)\) 的镜面),一共会反射(直接穿过的不算)到多少个不同(一个坐标算一个镜面)的镜面。 总体思路为预处理出每一个坐标向每一个位置发 阅读全文
posted @ 2024-10-05 16:48 Jerrycyx 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 快速幂 递归 long long quick_pow(long long x,long long y,long long p) { long long tmp=quick_pow(x,y>>1,p); tmp=tmp*tmp%p; if(y&1) return tmp*x%p; else retur 阅读全文
posted @ 2024-10-02 17:23 Jerrycyx 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 背包 01 背包 for(int i=1;i<=n;i++) for(int j=m;j>=v[i];j--) { f[j]=max(f[j],f[j-v[i]]+w[i]); ans=max(ans,f[j]); } 完全背包 for(int i=1;i<=n;i++) for(int j=v[i 阅读全文
posted @ 2024-10-02 17:03 Jerrycyx 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 原题链接 解析 在操作一时,最小值如果在最后一位,其无法更新任何数,会被删除;否则不在最后一位时一定会被其右侧更大的数更新。所以在操作一时,最小值一定会被更新掉。 同理,在操作二时,最大值一定会被更新掉。 由此,操作一决定了答案的下限,操作二决定了答案的上限。 所以可以得出贪心策略:先进行 \(m\ 阅读全文
posted @ 2024-09-01 08:27 Jerrycyx 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 原题链接 思路 + 算法 首先,考虑读入到 \(a_i\) 时,如果要得到此时的最优解(指所有牛的编号不重不漏地覆盖 \([1,i]\) 的所有编号),对于第 \(i\) 头奶牛,因为在它前面有 \(a_i\) 头奶牛的编号小于它,所以第 \(i\) 头奶牛的编号应当为 \(a_i+1\)。 如果有 阅读全文
posted @ 2024-09-01 08:26 Jerrycyx 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 原题链接 介绍一种(也许是正解的)卡常做法 先说总体思路:对于每个三元组 \((x,y,z)\),若有一个 \(w\) 满足 \((x,y,w),(x,z,w),(y,z,w)\) 均存在,则找到了一个合法的四元组 \((x,y,z,w)\)。 \(20\ \rm{Pts}\) 做法 如果暴力搜索, 阅读全文
posted @ 2024-09-01 08:24 Jerrycyx 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 大部分是上课做的笔记,包含我自己的一些思考的推导,希望可以帮助到大家! 本文在以下平台同步发送:洛谷(已通过全站推荐)、博客园。 (因为洛谷专栏更新需要重新审核全站推荐,所以更新相对博客园略有延迟) UPD 2024.11.2:撤除了引用格式并添加了分割线以分割不同结论及证明;修正了整除的 \(\K 阅读全文
posted @ 2024-08-28 15:21 Jerrycyx 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 原题链接 题目描述 算法 引用自 树的直径 - OI-Wiki: 若树上所有边边权均为正,则树的所有直径中点重合 证明:使用反证法。设两条中点不重合的直径分别为 \(\delta(s,t) 与 \delta(s',t')\),中点分别为 \(x\) 与 \(x'\)。显然,\(\delta(s,x) 阅读全文
posted @ 2024-08-21 19:15 Jerrycyx 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 最长公共上升子序列(LCIS) 原题链接:CodeForces、洛谷 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 描述 给定两个整数序列,写一个程序求它们的最长上升公共子序列。 当以下条件满足的时候,我们将长度 \(N\) 的序 阅读全文
posted @ 2024-08-14 15:29 Jerrycyx 阅读(38) 评论(0) 推荐(0) 编辑
摘要: [HAOI2009] 逆序对数列 原题链接 题目描述 对于一个数列 \(\{a_i\}\),如果有 \(i<j\) 且 \(a_i>a_j\),那么我们称 \(a_i\) 与 \(a_j\) 为一对逆序对数。若对于任意一个由 \(1 \sim n\) 自然数组成的数列,可以很容易求出有多少个逆序对数 阅读全文
posted @ 2024-08-12 11:34 Jerrycyx 阅读(12) 评论(0) 推荐(0) 编辑
摘要: KMP namespace KMP{ int nxt[LEN]; void Init() { nxt[1]=0; for(int i=2,j=0;i<=plen;i++) { while(j && p[j+1]!=p[i]) j=nxt[j]; if(p[j+1]==p[i]) j++; nxt[i 阅读全文
posted @ 2024-08-09 21:47 Jerrycyx 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 链表 定义 struct Peter{ int val; int nxt,pre; }node[M]; int idx=0; 初始化 inline void Init() // head:0; tail:n+1 { node[0]={0,n+1,0}; node[n+1]={0,n+1,0}; re 阅读全文
posted @ 2024-08-09 19:47 Jerrycyx 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 邻接表(链式前向星)存图 定义 struct Allan{ int val; int to,nxt; }edge[M]; int idx,head[N]; 加边 inline void add(int x,int y,int z) { edge[++idx]={z,y,head[x]}; head[ 阅读全文
posted @ 2024-08-09 19:45 Jerrycyx 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 二分 & 三分 整数二分 int BinarySearch(const int L,const int R) { int l=L-1,r=R+1; while(l+1<r) { int mid=l+r>>1; if(check(mid)) l=mid; else r=mid; } return l; 阅读全文
posted @ 2024-08-09 19:43 Jerrycyx 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 预处理部分 \[\max(a[i,i+2^k-1]) =\max \left\{ \begin{aligned} \max&(a[i,i+2^{k-1}-1])\\ \max&(a[i+2^{k-1},i+2^{k-1}+2^{k-1}-1]) \end{aligned} \right.= \lef 阅读全文
posted @ 2024-08-05 10:14 Jerrycyx 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 优秀的树 时间限制:C/C++ 2000MS,其他语言 4000MS 内存限制:C/C++ 256MB,其他语言 512MB 描述 给定一棵树,其所有边权重均为 \(1\),定义 \(f(u)=Σ_v dis(u,v)\),v 表示树上的所有结点,\(dis(u,v)\) 表示结点 \(u\) 和 阅读全文
posted @ 2024-08-02 19:37 Jerrycyx 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 树(tree) 时间限制:C/C++ 2000MS,其他语言 4000MS 内存限制:C/C++ 256MB,其他语言 512MB 描述 给定一个 \(n\) 个结点,\(n−1\) 条边的有根树。 第 \(i\) 条边可以用 (\(a_i,b_i\)) 来描述,它表示连接结点 \(a_i\) 和结 阅读全文
posted @ 2024-08-02 18:34 Jerrycyx 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 费解的开关 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 描述 你玩过“拉灯”游戏吗? \(25\) 盏灯排成一个 \(5×5\) 的方形。 每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。 游 阅读全文
posted @ 2024-07-29 23:55 Jerrycyx 阅读(10) 评论(0) 推荐(0) 编辑