02 2025 档案

摘要:P3367 【模板】并查集 题目背景 自 2025 年 1 月 21 日,本题测试数据范围更新,详见:https://www.luogu.com.cn/discuss/1045596 这意味着现存题解的代码可能无法通过本题,管理组将会在 2025 年 2 月处理。 题目描述 如题,现在有一个并查集, 阅读全文
posted @ 2025-02-26 20:47 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:P1106 删数问题 题目描述 键盘输入一个高精度的正整数 \(n\)(不超过 \(250\) 位),去掉其中任意 \(k\) 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 \(n\) 和 \(k\),寻找一种方案使得剩下的数字组成的新数最小。 输入格式 输入两行正整数。 第一 阅读全文
posted @ 2025-02-26 19:55 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:CF607B Zuma 题目描述 \(\texttt{Genos}\) 最近在他的手机上下载了祖玛游戏。在祖玛游戏里,存在 \(n\) 个一行的宝石,第 \(i\) 个宝石的颜色是 \(C_i\)。这个游戏的目标是尽快的消灭一行中所有的宝石。 在一秒钟,\(\texttt{Genos}\) 能很快的 阅读全文
posted @ 2025-02-25 20:03 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:P1063 [NOIP 2006 提高组] 能量项链 题目描述 在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链。在项链上有 \(N\) 颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因 阅读全文
posted @ 2025-02-25 19:25 郭轩均 阅读(3) 评论(0) 推荐(0) 编辑
摘要:P1880 [NOI1995] 石子合并 题目描述 在一个圆形操场的四周摆放 \(N\) 堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的 \(2\) 堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 试设计出一个算法,计算出将 \(N\) 堆石子合并成 \(1\) 堆的最小得 阅读全文
posted @ 2025-02-25 16:26 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:P1775 石子合并(弱化版) 题目描述 设有 \(N(N \le 300)\) 堆石子排成一排,其编号为 \(1,2,3,\cdots,N\)。每堆石子有一定的质量 \(m_i\ (m_i \le 1000)\)。现在要将这 \(N\) 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两 阅读全文
posted @ 2025-02-25 15:53 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:B4016 树的直径 题目描述 给定一棵 \(n\) 个结点的树,树没有边权。请求出树的直径是多少,即树上的最长路径长度是多少。 输入格式 第一行输入一个正整数 \(n\),表示结点个数。 第二行开始,往下一共 \(n-1\) 行,每一行两个正整数 \((u,v)\),表示一条边。 输出格式 输出一 阅读全文
posted @ 2025-02-21 17:00 郭轩均 阅读(5) 评论(0) 推荐(0) 编辑
摘要:我最开始将n减了1,应为边长有n-1条,但是这会导致计算时出现错误,因为其他地方会用到n #include<iostream> #include<vector> using namespace std; const int N=1e5+5; vector<int>v[N]; int f[N]; in 阅读全文
posted @ 2025-02-21 16:29 郭轩均 阅读(3) 评论(0) 推荐(0) 编辑
摘要:P1352 没有上司的舞会 题目描述 某大学有 \(n\) 个职员,编号为 \(1\ldots n\)。 他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。 现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数 \(r_i\),但是呢,如果某个职员的 阅读全文
posted @ 2025-02-21 15:31 郭轩均 阅读(3) 评论(0) 推荐(0) 编辑
摘要:P8641 [蓝桥杯 2016 国 C] 赢球票 题目描述 某机构举办球票大奖赛。获奖选手有机会赢得若干张球票。 主持人拿出 \(N\) 张卡片(上面写着 \(1 \sim N\) 的数字),打乱顺序,排成一个圆圈。 你可以从任意一张卡片开始顺时针数数 $:1,2,3 \cdots $。 如果数到的 阅读全文
posted @ 2025-02-21 15:29 郭轩均 阅读(4) 评论(0) 推荐(0) 编辑
摘要:P1119 灾后重建 题目背景 B 地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响。但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车。换句话说,只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄。 题目描述 给出 B 地区的村庄数 \(N\) 阅读全文
posted @ 2025-02-20 18:35 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:P6464 [传智杯 #2 决赛] 传送门 题目描述 传智专修学院里有 \(n\) 栋教学楼,有 \(m\) 条双向通行道路连接这些教学楼,不存在重边和自环。每条道路都有一定的长度,而且所有教学楼之间都可以直接或者间接的通过道路到达。我们可以很容易的求出这些教学楼之间的最短路。 为了使交通更为顺畅, 阅读全文
posted @ 2025-02-20 17:32 郭轩均 阅读(3) 评论(0) 推荐(0) 编辑
摘要:P3275 [SCOI2011] 糖果 题目描述 幼儿园里有 \(N\) 个小朋友,\(\text{lxhgww}\) 老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,\(\tex 阅读全文
posted @ 2025-02-19 20:36 郭轩均 阅读(3) 评论(0) 推荐(0) 编辑
摘要:P1993 小 K 的农场 题目描述 小 K 在 MC 里面建立很多很多的农场,总共 \(n\) 个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共 \(m\) 个),以下列三种形式描述: 农场 \(a\) 比农场 \(b\) 至少多种植了 \(c\) 个单位的作物; 阅读全文
posted @ 2025-02-19 17:23 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:这道题我最开始是想着用dfs的但一看数据量肯定会超时,看了视频才发现可以用spfa,虽然是无权图,但我们可以把边权看作一,我们只需要记录到1的最短距离,如果vc[u][i].dis+w[u]==w[v]那就cnt[v]=(cnt[v]+cnt[u])%100003;如果遇到vc[u][i].dis+ 阅读全文
posted @ 2025-02-19 15:42 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:由于题目没有说是连通图,所以最开始时要把所有点加入队列 #include<iostream> #include<queue> #include<vector> using namespace std; struct node { int id; int dis; }; const int N=5*1 阅读全文
posted @ 2025-02-19 14:42 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:这道题要用floyd算法,如果a可以战胜b,b可以战胜c,那么a可以战胜c,并且这道题的数据范围很小,首先遍历第i头奶牛可以战胜几头奶牛,然后再统计有几头奶牛可以战胜它,如果加起来等于n-1,说明它与其它所有的奶牛的关系都确定了, #include<iostream> using namespace 阅读全文
posted @ 2025-02-19 14:11 郭轩均 阅读(5) 评论(0) 推荐(0) 编辑
摘要:如果1可以变换到2,2可以变换到3,那么1可以变换到3,这可以用Floyd算法,要注意一点的是,其它数不可以变换到零,而零可以变到其它数, 我的高精度算法一开始是错的,我的做法会导致进位的数也乘了s,在最后要处理carry,但要记得carry/10,不然会成死循环 #include<iostream 阅读全文
posted @ 2025-02-18 22:30 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:#include<iostream> using namespace std; int d[120][120]; int w[10020]; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=m;i++)cin>>w[i]; for(int i=1;i<= 阅读全文
posted @ 2025-02-18 20:28 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:这道题要注意初始化w数组为最大值,并且w[1]=0;有负环的话输出YES,没有输出NO; #include<iostream> #include<queue> #include<vector> using namespace std; const int N=3000+5; struct node{ 阅读全文
posted @ 2025-02-18 20:13 郭轩均 阅读(3) 评论(0) 推荐(0) 编辑
摘要:迪杰斯特拉算法就是每次寻找与与原点最近的点然后更新与它相连的点,要注意的是传入起始点时不需要标记它,因为需要它扩展到其他点,只有当一个点出队时才需要标记它,因为后入队的同一个点可能距离更小 #include<iostream> #include<queue> #include<vector> #de 阅读全文
posted @ 2025-02-18 20:10 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:这道题,没想到可以把启动机器时间对后面的影响分离出来,这样第i个物品处理完的时间就是处理前面i个物品的时间总和 #include<iostream> #define int long long using namespace std; const int N=1e6; int f[N]; int c 阅读全文
posted @ 2025-02-18 15:19 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:注意不要把q[h+1]写成q[h-1]; #include<iostream> using namespace std; #define int long long const int N=4*1e6+200; int f[N]; int s[N]; int c[N]; int q[N]; doub 阅读全文
posted @ 2025-02-18 14:33 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:斜率优化dp最重要的就是写正确关系式并且找对x,y,k,b; f[i]=f[j]+(i-(j+1)+sum[i]-sum[j+1-1]-l)^2 减的是j+1,因为求的是j+1到i; f[i]=f[j]+(s[i]+i-(s[j]+j)-(l+1))^2; 令pi=s[i]+i,pj=s[j]+j, 阅读全文
posted @ 2025-02-18 13:53 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:本来是一个很简单的线段树结果再update函数里忘更新tr[p]了害我卡了好久,太久没写线段树的过 #include<iostream> #define int long long using namespace std; const int N=2*1e5+5; struct tree{ int 阅读全文
posted @ 2025-02-17 18:45 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:没看到这道题是多组测试数据输入 阅读全文
posted @ 2025-02-17 17:13 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:#include<iostream> #define int long long using namespace std; int ans=0; int num[1<<11]; int f[110][1<<10][1<<10]; int s[1<<12]; int g[1<<12]; signed 阅读全文
posted @ 2025-02-17 15:52 郭轩均 阅读(3) 评论(0) 推荐(0) 编辑
摘要:要注意sum+a[i]的位置,我放错了,不知道为什么会re #include<iostream> #include<cstring> #define int long long using namespace std; int n,m,ans,a[30],vis[2020]; int f[2020] 阅读全文
posted @ 2025-02-16 16:54 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:这道题对取最大值的地方有要求,要先取最大值再入队 阅读全文
posted @ 2025-02-16 13:20 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:这题最开始数据比较水,后来加强了,我没过hack数据,我的代码最主要的问题是有一些点会从前面无法经过的点更新,所以就需要初始化f为最小值 #include<iostream> #include<cstring> using namespace std; #define int long long c 阅读全文
posted @ 2025-02-15 20:44 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:崩溃了,debug半天发现是变量名重复了 #include<iostream> #include<cstring> #define int long long using namespace std; const int N=1e5; int q[N]; int f[N]; int w[N]; in 阅读全文
posted @ 2025-02-15 18:12 郭轩均 阅读(3) 评论(0) 推荐(0) 编辑
摘要:![](https://img2024.cnblogs.com/blog/3599636/202502/3599636-20250215165220271-949058549.png) ![](https://img2024.cnblogs.com/blog/3599636/202502/3599636-20250215165224696-1477296427.png) 阅读全文
posted @ 2025-02-15 16:52 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:位运算符好麻烦,没打括号被卡了半天 #include<iostream> #define int long long using namespace std; int f[12][100][1<<11]; int s[1<<11]; int num[1<<11]; signed main(){ in 阅读全文
posted @ 2025-02-15 15:36 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:由于我的cnt是从一开始的,我还debug了一会 由于数据是一行一行的输入,我们不能像蒙德里安的梦想那样,按列判断 if((s[a]&g[i])s[a]&&(!(s[a]&s[b])))f[i][a]=(f[i][a]+f[i-1][b])%p; 如果(s[a]&g[i])s[a]说明s[a]在g[ 阅读全文
posted @ 2025-02-15 14:40 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:1.首先就是每列状态的表示,如果该列有横着的方块就用1,表示否则就用零,一共n行最多有n个一就是2^n-1最少0个一就是0,所以0<=i<n;j表示i位移的个数,i最多n位所以最多位移n-1位来检验i每一位,如果是1就检验cnt来检验是否有连续奇数个0,最后还要再检验一次来检验高位零 #includ 阅读全文
posted @ 2025-02-15 13:12 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:这道题真的做的我鬼火冒,尤其是这个第二问要用到dilworth但是我看讲解完全不知道他们在讲什么,我看了好久才理解,一个数组至少可以由几个不增子序列覆盖就等于严格单调递增的最长子序列的长度,如果是至少可以由几个严格递减子序列覆盖就等于最长单调不减子序列的长度,然后对于第一个问题求最长不增子序列我们将 阅读全文
posted @ 2025-02-13 18:45 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:这道题题标签虽然标了一大堆,但我感觉我只用到了双指针,首先set容器储存id有多少种,map储存id有多少种,当map.size==set.size说明该区间包含了所有种类的奶牛,让c【i】.x-c[j].x; 然后让j对应的id数量--;如果map.size还等于set.size说明可以继续操作 阅读全文
posted @ 2025-02-13 15:10 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:这道题要注意空间不能开太小,还有我第一次是build函数忘写return了,我很奇怪,结构体数组开小后,有一个报错和tle,不知道tle是怎么来的 #include<iostream> #include<set> #include<map> #include<algorithm> #include< 阅读全文
posted @ 2025-02-13 14:03 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:这是一道主席树的模板题, #include<iostream> #include<set> #include<map> #include<algorithm> #include<vector> #include<cmath> #include<climits> #include<cstring> # 阅读全文
posted @ 2025-02-13 12:13 郭轩均 阅读(0) 评论(0) 推荐(0) 编辑
摘要:#include<iostream> #include<set> #include<map> #include<algorithm> #include<vector> #include<cmath> #include<climits> #include<cstring> #define int lo 阅读全文
posted @ 2025-02-12 14:33 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:这是我的第一道离散化题,虽然只是一道普及-的题,但我理解起来还是有点吃力,看完视频后我我觉的离散化,就是将一堆数据用他们的相对大小表示 例如 1,99,100,1000,可以表示为1,2,3,4. 55 100 300 1,可以表示为 2 3 4 1;这道题目就是先把各个区间的两个端点存储到c数组, 阅读全文
posted @ 2025-02-12 13:34 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:说实话竟然没想到还能这样差分,这道题我们需要二分查找m个订单,对于每次二分用一次差分,然后看如果只考虑1到mid个订单是否会出现教室不够用的情况,如果够用说明导致教室不够用的订单在后面,应该让begin=mid+1;反之让end-1;其实这道题就是让我们找第一个出现教室不够用的订单 #include 阅读全文
posted @ 2025-02-11 20:47 郭轩均 阅读(3) 评论(0) 推荐(0) 编辑
摘要:像这种对区间进行加以或者减一的操作多半要用差分,要使所有数一样,就是要让除b[1]以外的其他数等于零,因为b[1]是a[1]与a[0]的差值,要求有多少结果就是求b[1]有多少可能,我们先让b[2]到b[n]的数一个加一一个减一,直到只剩一个数,要进行min(abs(fu),zheng)次,然后还剩 阅读全文
posted @ 2025-02-11 17:42 郭轩均 阅读(4) 评论(0) 推荐(0) 编辑
摘要:这道题要用到差分,因为反复经过一条路时只需要买一张对应的卡就行了,不用买多张,所以我们可以用差分,算出经过每条路的次数,要注意假设从1到3城市,只经过了道路1和道路2,应该让cha【1】++,cha【3】--; 还有算结果时应该从1到n-1列举每一条路,我最开始就搞错了,还要注意的一点就是两座城市的 阅读全文
posted @ 2025-02-11 17:02 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:这道题最核心就是二分W,然后对于每一个W都构建一个前缀和数组,但要注意ans不能开太小,我开INT_MAX都不行,其次就是二分左右端点的变化,如果s-y>0说明满足要求的点多了,这时候我们要提高标准,就是让W增大,及让beign=W+1,反之让end=W-1;如果s=y,此时ans=0;这时候我们可 阅读全文
posted @ 2025-02-10 20:53 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:本题要构建两个st表,一个储存区间最大值,一个储存区间最小值,我们的思路是先构建k个最长的的子序列 这样就可以求出最小的极差的最大值(有点绕口),这个怎么理解呢,因为当你扩大区间时,区间的极差只可能比原来更大,因为如果扩进了一个大值那么极差不变,如果扩进了一个比原先区间最小值还小的值的话,极差就会变 阅读全文
posted @ 2025-02-10 16:04 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:由于本题是一个环,所以可以开三倍的空间,要找i就可以转化成i+n,然后从前后查找(之前没遇到过,可以积累),本体的核心就是st表的处理和二分查找,我原本想直接用二分查找寻找[1,pos-1]和[pos+1,3*n]中>=b[i]并且与pos最近的值,但发现值的大小不是有序排列,所以不行,但是我们可以 阅读全文
posted @ 2025-02-09 20:56 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:这道题要用带权并查集,感觉没听懂只能先把自己能懂得写了; 数组b[i]表示i与根节点的关系,//0 : 同类 1:吃 2:被吃#include r1 == r2 && b[x] != b[y]说明x和y在同一集合,但他们与根节点的关系不是一样的,说明他们不是同类,是假话 #include<set> 阅读全文
posted @ 2025-02-09 15:41 郭轩均 阅读(6) 评论(0) 推荐(0) 编辑
摘要:并查集还是不熟,还得练 #include<iostream> #include<set> #include<map> #include<algorithm> #include<vector> #define int long long const int N = 1e6; using namespa 阅读全文
posted @ 2025-02-08 21:31 郭轩均 阅读(3) 评论(0) 推荐(0) 编辑
摘要:(题目大骗子,最后一个序号后面明明可以有空格),我原本想的是将map中的两个值都定义成string类型 ,但发现不对,然后发现题目说序号能重复,也就是说一个单词多次出现在一个句子时,只用统计一次,然后我就修改,但还是不对,也不知道为什么,我就按照答案的写法将两个值定义为string 和set就ac了 阅读全文
posted @ 2025-02-08 17:27 郭轩均 阅读(2) 评论(0) 推荐(0) 编辑
摘要:这道题应该没法用双指针做,应为当i增大,j减小时A-B都是减小,我们可以将问题转化为A=B+C, 也就是当遍历到a【i】时求数组中有多少个数等于a【i】+c(最开始由于n和t取成一样的变量名了,导致卡了一会) 一下是二分查找的代码 #include<iostream> #include<set> # 阅读全文
posted @ 2025-02-08 16:38 郭轩均 阅读(5) 评论(0) 推荐(0) 编辑
摘要:首先要注意score的范围,所以要用long long int,其次OK两个字母都是大写,并且插入和修改后都要输出Ok #include<iostream> #include<set> #include<map> #define int long long using namespace std; 阅读全文
posted @ 2025-02-08 15:49 郭轩均 阅读(1) 评论(0) 推荐(0) 编辑
摘要:由于题目保证木材的长度互不相同所以很自然的想到要用set op=1时 使用find函数查找length 如果it==s.end(),说明仓库里没有该长度的木材,应该insert 反之输出“Already Exist” op=2时 使用lower_bound 函数查找第一个大于等于length的木材, 阅读全文
posted @ 2025-02-08 15:18 郭轩均 阅读(4) 评论(0) 推荐(0) 编辑
摘要:总的来说这是一道简单的哈希算法,由于是字符串,所以哈希编码时只用乘26就行了 阅读全文
posted @ 2025-02-07 21:50 郭轩均 阅读(3) 评论(0) 推荐(0) 编辑
摘要:这道题本质上,是一道结论题,结论如下: 1.小尺寸处理: 如果点阵的行或列有一个为1,则马无法移动,只能留在起点,此时答案为1。 如果点阵的最小边为2,则马只能沿着较长的边移动,每次移动步长为2,此时答案为较长边的一半加1。 2.中等尺寸处理: 当点阵为3x3时,马无法到达中间点,因此答案为8。 3 阅读全文
posted @ 2025-02-07 20:47 郭轩均 阅读(9) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示