noip
ModestCoder_
一个modest的coder
展开
-
NOIp2020游记
Day 0离退役还有一天,昨天我们班的篮球赛还输了,我说我们班少了两个主力把冠军让给隔壁班,他们胜之不武,而且我们两个班本来就是一家人,这没什么的,王者要有王者的风度。我就这么跟同学们说,但是我却还是最愤怒的一个人。今天欧阳老师继续讲论语,他与欧阳修同宗。他是一个很受中国儒家思想的一个人。他在课前讲到了他十年前的一个学生,能在期中考考五门满分,物理国集rk2,但是因为清北学校之间的问题他没能进入国家队,这真的是我们学校历史以来最优秀的几个人之一了。欧阳老师说这位学长在清华读了八年,把博士读出了,结果老师原创 2020-12-04 13:11:47 · 1232 阅读 · 0 评论 -
【题解】LuoGu1083:借教室
原题传送门不能满足的方案满足二分性二分枚举什么时候无法满足然后O(n)O(n)O(n)用差分算出每天需要的教师数量进行判断Code:#include <bits/stdc++.h>#define maxn 1000010#define LL long longusing namespace std;int n, m;LL a[maxn], b[maxn], d[maxn], s[maxn], t[maxn];inline int read(){ int s = 0, w原创 2020-12-03 20:17:06 · 170 阅读 · 0 评论 -
【题解】LuoGu7074:方格取数
原题传送门普及的题目就直接秒杀了因为题目已经帮我们划好了dp的阶段,就是一列一列的走然后在一列里面可以分为向上走和向下走,那么我需要知道上一个阶段每个地方的最优值,用dp数组记录下来,很套路得转移就行了Code:#include <bits/stdc++.h>#define maxn 1010#define LL long longusing namespace std;const LL inf = 1e12;LL a[maxn][maxn], f[maxn], g[maxn原创 2020-11-30 19:52:55 · 246 阅读 · 0 评论 -
【题解】LuoGu7077:函数调用
原题传送门还记得初中的时候Ag学长FancyCoder给我们讲过一个倒着做的思想这道题不妨倒着做如果操作 *2 +3 *4把每个数的初始值看成一次加操作那么就是 +ai *2 +3 *4对于这个+3的贡献其实是+3∗4+3*4+3∗4,对于+ai+a_i+ai,贡献是+ai∗8+a_i*8+ai∗8所以倒着做的话,对于每个加操作,乘上当前乘操作的累乘积,就是贡献可以对于每个函数记一个mulimul_imuli表示调用一次该函数,会乘上多少如果函数类型是1,那么mul=1mul=1原创 2020-11-14 17:25:42 · 311 阅读 · 0 评论 -
【题解】LuoGu7078:贪吃蛇
原题传送门首先是要推一个结论加入我是当前最强的蛇,我会如何抉择?当前有四条蛇,长度为a>b>c>da>b>c>da>b>c>d,我是aaaa−d>=b,a-d>=b,a−d>=b,我吃了一条最弱的之后,还是最强的,肯定是吃的a−d>=c,a-d>=c,a−d>=c,我吃了一条最弱的之后,不是最弱的,那么如果我吃了,我变成了a−da-da−d,现在最强的是bbb,最弱的是ccc,一定有b−c<=a−db原创 2020-11-14 16:55:53 · 472 阅读 · 0 评论 -
【题解】LuoGu7076:动物园
原题传送门对于某一位,只要有已有的动物的这一位是1,或是要求中没有提及这一位,都有2种情况设有mmm位这样的位,答案就是2m−n2^m-n2m−n可以直接用二进制的位运算解决问题,但是因为数据范围是2642^{64}264,所以要爆ll我考场上不敢用ull,所以写了高精,但是T了然后ull的话也要注意m=0,k=64m=0,k=64m=0,k=64的情况,特判一下Code:...原创 2020-11-13 12:12:00 · 262 阅读 · 0 评论 -
【题解】LuoGu7075:儒略日
原题传送门模拟题,比同为联赛题的时间复杂度还要复杂一点两个分界点,公元前后,以及1582年10月4日直接模拟是可行的,但是注意到询问有10510^5105组,所以每个询问最多做1000次计算可以考虑周期性,不管分界点的话,周期是400年但是我考场上没有想到这一层,为了过掉大样例,我先做10000年,再做2000年,再做1000年,是在前1000年还是在后1000年在4年4年跳然后我在民间数据上只拿了40分,原因是我在1582年10月份,日期统统加了10这导致本来合法的1582年10月1号原创 2020-11-12 16:44:48 · 903 阅读 · 0 评论 -
【题解】LuoGu5023:填数游戏
原题传送门这道题有一个非常实用的考场策略在里面,就是暴力当年考场里写了最慢的暴力,找出了1~4的规律,拿到了75分const p = 1000000007;var a : array[0..1000, 0..1000] of char; flag : boolean; s, num : array[0..1000000] of ansistring; n, m, tot : longint; ans : int64; sum : ansistr原创 2020-10-17 21:13:01 · 303 阅读 · 0 评论 -
CSP-s2020初赛游记
这次初赛是我竞赛生涯里参赛感觉最好的一次,从昨天下午做完作业来到机房起,整个人处于一个松弛的状态,实在是不怎么紧张,回想起一年前那个战战兢兢的自己,心感到我一年来的进步是如此之大,不但在竞赛水平,更在心理状态。考试的时候很淡定,阅读第三题我做了一个多小时,因为我觉得这不但是一个很有难度,要求很高的编程题,更是一道数学趣味题,虽然我最终没有完全理解,但是这个过程我很享受。完善程序做了不到半小时,相比于去年取石子那道奇葩状压使我15分全扣光,今年的水平很稳定,直接秒杀。去年的我只考了73.5,接下来的两周原创 2020-10-11 17:26:29 · 1340 阅读 · 0 评论 -
LuoGuCSP初赛模拟题错题本
传送门答案A原题NOIp2008初赛完形传送门一棵树也算是森林,所以选择C答案D到达的状态是O(nm)O(nm)O(nm)的代码里面虽然有记忆化,但是对于每一个状态还是需要O(m)O(m)O(m)的时间求值所以选择AAA代码中有取模操作,所以是错的第一遍dfs相当于删边,如果目标点入度为0,或者我当前点事被封禁的,那么目标点一定不能被封禁,所以需要拓展一下是不是目标点的目标点可以被封禁的可能性...原创 2020-10-10 19:03:32 · 133 阅读 · 0 评论 -
【题解】CSP-S2019初赛:取石子
(取石子)Alice和Bob两个人在玩取石子游戏。他们制定了nn条取石子的规则,第ii条规则为:如果剩余石子的个数大于等于a[i]a[i]且大于等于b[ilb[il, 那么他们可以取走b[i]b[i]个石子。他们轮流取石子。如果轮到某个人取石子, 而他无法按照任何规则取走石子,那么他就输了。一开始石子有mm个。请问先取石子的人是否有必胜的方法?有两种做法暴力dp:dpidp_idpi表示iii是否必胜,对于一个规则(a,b)(a<=i),dpi∣=(dpi−b==0)(a,b)(a<=i原创 2020-09-30 21:46:28 · 2015 阅读 · 0 评论 -
【题解】LuoGu5664:Emiya 家今天的饭
原题传送门每行最多取一个告诉我们可以枚举行所以这道题目总体复杂度里肯定有行的复杂度O(n)O(n)O(n)考场上写的是m=2/3m=2/3m=2/3的暴力,直接把每一列分别取了几个写到状态里面去正解需要考虑正难则反我们写直接将每行最多一个当作大前提要求的是没有一列取了超过一半的东西那么这个答案其实 =所有方案-有一列取了超过一半的方案这里就有一个重要性质:最多只有一列会超过一半(虽...原创 2020-01-20 19:12:21 · 352 阅读 · 0 评论 -
【题解】LuoGu5024:保卫王国
原题传送门这里不讲ddp,用倍增优化树形dp解决令fu,0/1f_{u,0/1}fu,0/1表示uuu的子树,自身选不选的最小代价令gu,0/1g_{u,0/1}gu,0/1表示整棵树−u-u−u的子树,uuu选不选的最小代价令dpu,i,0/1,0/1dp_{u,i,0/1,0/1}dpu,i,0/1,0/1表示anc(anc为u往上跳2i步的祖先)anc(anc为u往上跳2^i步的祖先)anc(anc为u往上跳2i步的祖先)的子树−u-u−u的子树,u与ancu与ancu与anc分别选不原创 2020-08-04 16:50:00 · 161 阅读 · 0 评论 -
【题解】LuoGu5666:树的重心
原题传送门把重心换成新的根,记为rtrtrt,接着考虑针对,每个u(u!=rt)u(u!=rt)u(u!=rt),被作为重心的次数令sus_usu表示uuu的子树的节点数和,gug_ugu表示uuu的重儿子子树节点数和,SSS表示切断一条边之后,一棵树中有uuu这个点,另一棵没有uuu的树的节点数和若uuu是新树的重心,必须满足(1) 2gx<=n−S2g_x<=n-S2gx<=n−S(2) 2(n−S−sx)<=n−S2(n-S-s_x)<=n-S原创 2020-08-02 21:03:54 · 322 阅读 · 0 评论 -
【题解】LuoGu5689:[CSP-SJX2019]多叉堆
原题传送门计数DP并查集维护连通性令dpudp_udpu表示以uuu为根的答案若将vvv连到uuu的下面,则dpu=dpu∗dpv∗Csizeu+sizev−1sizevdp_u=dp_u*dp_v*C_{size_u+size_v-1}^{size_v}dpu=dpu∗dpv∗Csizeu+sizev−1sizev(因为整棵树中只有根是一定要最小的那个数,其他随意,所以乘法原理)Code:#include <bits/stdc++.h>#define maxn原创 2020-08-02 13:35:13 · 313 阅读 · 0 评论 -
【题解】LuoGu5687:[CSP-SJX2019]网格图
原题传送门肯定是让你一排一排的考虑那就一排一排的考虑暴力做法就是暴力kruskalkruskalkruskal,那么怎么把一整排看成一条边?这样就可以满分了根据kruskalkruskalkruskal我们可以知道,只要每次选取最小的边且还未联通就是最优的那么就直接一排一排的搞,每次加进来一排值最小的,但是要减去多余的部分(这部分若加入,那么会形成环)第一次出现横行或列行,全部加若不是第一次,则看与自己垂直的有几排,只有一排或没有,不会形成环,全加;否则有x(x>1)x(x>1)原创 2020-08-02 13:16:17 · 272 阅读 · 0 评论 -
【题解】LuoGu5662:纪念品
原题传送门枚举当前是第几天dpidp_idpi表示今天本金是iii的情况下,今天买进,明天卖出后会获得最多的利润就是说,转化了题意,把pi+1,j−pi,jp_{i+1,j}-p_{i,j}pi+1,j−pi,j当做一个物品枚举商品,dpk=max(dpk,dpi−pi,j+pi+1,j−pi,j)(i为第几天,j为商品,k为本金)dp_k=max(dp_k,dp_{i-p_{i,j}}+p_{i+1,j}-p_{i,j})(i为第几天,j为商品,k为本金)dpk=max(dpk,dpi原创 2020-08-01 18:06:45 · 256 阅读 · 0 评论 -
【题解】LuoGu5663:加工零件
原题传送门传送带可以理解为边权为1的一条边题目可以转化成一个可以重复来回走的无向图中,对于每个询问(a,L)(a,L)(a,L),询问1是否有到aaa长度为LLL的路径那么如果两个点之间存在长度为xxx的路径,那么这两个点必定存在长度为x+2x+2x+2的路径但是这两个点之间却不一定存在长度为x−2x-2x−2,或是x+1x+1x+1的路径所以我们可以求1到每个点的奇数最短路和偶数最短路,用dijkstra就好了Code:#include <bits/stdc++.h>#defi原创 2020-08-01 12:52:11 · 261 阅读 · 0 评论 -
【题解】LuoGu3957:跳房子
原题传送门二分答案,然后O(n2)O(n^2)O(n2)的dp来计算是否合理这个暴力可以拿到50分考虑优化dp部分,发现另外30分是d=1d=1d=1的情况,这样就有很多中思路,很容易想到单调队列,直接做出来了满分做法,因为有一个区间,所以当前点iii的时候,与80分不同的是,不一定能从i−1i-1i−1那个点转移过来,我们单调队列中要维护的是能跳到当前点的所有点但是我又可以发现,随着枚举当前点iii,最后那个能跳到当前点的lll也在不断递增,所以就另外开一个变量lll,每次更新一下加入队尾就行了原创 2020-08-01 11:45:37 · 486 阅读 · 0 评论 -
【题解】LuoGu5658:括号树
原题传送门树上括号序列匹配问题考场上写了个O(n2)O(n^2)O(n2)暴力加上优化过掉了思路如下:树形dp想法,令cntucnt_ucntu表示从1到uuu的字符串中以uuu结尾的合法子串有多少个那么可以想到,如果当前是个(((,那么不存在以这个结尾的合法子串将(((看成1,)))看成-1,比如()())()())()())的权值就是-1转移:令sis_isi表示从1到iii的权值,那么若存在su=svs_u=s_vsu=sv,那么对于uuu,祖先中深度最大的满足上式的vvv就是原创 2020-07-30 17:36:54 · 197 阅读 · 0 评论 -
【题解】LuoGu5665:划分
原题传送门考场上我先是一个暴力dpdpi,jdp_{i,j}dpi,j表示前iii个数最后一组有jjj个的答案枚举i,j,ki,j,ki,j,k就行了发现有冗余转移,可以把kkk省掉达到O(n2)O(n^2)O(n2),此方法就已经到头了,因为状态就是O(n2)O(n^2)O(n2)我的一个基友在考场上5min秒掉O(n2)O(n^2)O(n2),而且状态是一维的,但他当时无法证明正...原创 2020-01-23 18:52:41 · 297 阅读 · 0 评论 -
【题解】LuoGu1850:换教室
原题传送门期望dp状态:dpi,j,0/1dp_{i,j,0/1}dpi,j,0/1表示到第iii个时间点,共计请求jjj次,当前这一个时间点是否请求的答案预处理:v<=300v<=300v<=300直接floydfloydfloyd预处理最短路转移:dpi,j,0=min(dpi−1,j,0+wci−1,ci,dpi−1,j,1+wci−1,ci∗(1−ki−1)+...原创 2019-11-15 20:56:57 · 196 阅读 · 0 评论 -
【题解】LuoGu1084:疫情控制
原题传送门需要用mmm个点封死一棵树答案满足二分性,直接二分本题难点在于checkcheckcheck贪心思想:驻扎到深度越小的点越优通过倍增上提军队,有些军队在二分的mid范围内走不到根节点,那么他就驻扎在能走到的最上的地方有些军队可以,那么他们暂时在根节点休息一会儿,接着从根节点往下走到需要帮助的深度为2的点(根据贪心思想)通过一开始走不到根节点的点可以先处理出哪些深度为2的点其...原创 2019-11-15 10:28:42 · 222 阅读 · 0 评论 -
【题解】LuoGu3952:时间复杂度
原题传送门写的我一口老血你得先想好什么时候会ERR\text{ERR}ERR变量名冲突(那么需要的是一个变量名的桶usedusedused)E多了或F多了(需要一个记录目前存在几重循环的变量tottottot)然后你得知道当前的循环到底有没有用具体来说是这个循环的外面是否有类似F i 100 1 或 F i ...原创 2019-11-14 21:01:39 · 191 阅读 · 0 评论 -
【题解】LuoGu2827:蚯蚓
原题传送门此题非常优先队列,非常裸但是数据规模似乎在暗示我们甚至有O(n)O(n)O(n)写法惊讶地发现题目中的一个隐含性质先切的蚯蚓一定比对应的后切的蚯蚓长维护3个队列,分别表示没切过,∗p,∗(1−p)*p,*(1-p)∗p,∗(1−p) 3组蚯蚓因为单调,每次比一比队首弹出,队尾插入再是用到一个思想,既然每秒都加q,不如要用的时候统一加上一个kqkqkq,那么中途插入的也必须先...原创 2019-11-14 17:00:27 · 213 阅读 · 0 评论 -
【题解】LuoGu5021:赛道修建
原题传送门二分答案树形dp验证对于每个点的儿子中尽可能两两组合(贪心)达到最大值,最好在这个基础之下还能选择一个尽可能长度大的路径和自己组合起来上传到父亲上去把儿子的值存下来,排序,首先用贪心(头尾指针扫描)求出最大赛道值,接着发现上传的值的大小满足可二分性,就二分,看看去掉二分的mid剩下的还能不能两两组合达到之前的答案Code:#include <bits/stdc++.h&...原创 2019-11-14 15:37:28 · 190 阅读 · 2 评论 -
【题解】LuoGu3958:奶酪
原题传送门可以O(n2logn)O(n^2logn)O(n2logn)并查集维护两点之间连通性把起点和终点也看做两个点Code:#include <bits/stdc++.h>#define maxn 1010#define LL long longusing namespace std;int f[maxn], n;LL x[maxn], y[maxn], z[ma...原创 2019-11-14 10:01:27 · 191 阅读 · 0 评论 -
【题解】LuoGu1083:借教室
原题传送门刚开始我想到了差分方法可以O(n)O(n)O(n)检验是否所有订单均可满足然后我就想到这道题是否和飞扬的小鸟一样的套路再去用什么方法找到第一个不能满足的点发现答案满足二分性,那么就直接二分好了,然后每次都用差分数组O(n)checkO(n)\text{check}O(n)check把所有均可满足的情况一并包括进二分一起做Code:#include <bits/stdc...原创 2019-11-14 09:17:03 · 181 阅读 · 0 评论 -
【题解】LuoGu2661:信息传递
原题传送门直接遍历整张图,若是走到已经走过的点,两种情况这个点是刚刚走过的,绕回来了,说明是个环,更新答案这个点是以前走过的,那我就不用继续走下去了,不然只是把前人的路途重新走了一遍无用功Code:#include <bits/stdc++.h>#define maxn 200010using namespace std;int n, nxt[maxn], vis[...原创 2019-11-14 08:43:33 · 205 阅读 · 0 评论 -
NOIp历年真题整理解答
有时间的话再写几道吧,个人准备联赛的方式就是刷历年题目,主要是熟悉一下思维模式,算法方面NOIp2012摆花:普通DP,DP水平到一个层次就不用烦恼的题目文化之旅:抛去数据水的槽点,n<=100\text{n<=100}n<=100一个O(n3)floydO(n^3)floydO(n3)floyd国王游戏:贪心套路,简便的数学推导解出最优策略,无耻的高精。。。开车旅行...原创 2019-11-13 20:15:42 · 2187 阅读 · 0 评论 -
【题解】LuoGu5020:货币系统
原题传送门水博客~~若是系统中的某一个数可以被系统中的其他数表示,这个数就是无关紧要的所有不能被其他数表示的数的个数就是答案用DP\text{DP}DP解决即可Code:#include <bits/stdc++.h>#define maxn 25010using namespace std;int dp[maxn], n, a[maxn];inline int ...原创 2019-11-12 11:02:19 · 177 阅读 · 0 评论 -
【题解】LuoGu2296:寻找道路
原题传送门细节挺多的,如果心情浮躁的话就很难调出来从终点跑反向边跑出能达到的点,这样就知道了哪些点无法到达终点用这些点跑反向边跑出出点无法和终点联通的点,这些点也是不能到达的剩下的点就是可以走的点,用bfsbfsbfs就可以了Code:#include <bits/stdc++.h>#define maxn 200010using namespace std;stru...原创 2019-11-10 21:20:09 · 167 阅读 · 0 评论 -
【题解】LuoGu2831:愤怒的小鸟
原题传送门俗话说得好,三点确定一条抛物线起点是(0,0)(0,0)(0,0),所以两只猪可以确定出一条有用的抛物线枚举这两只猪,求出抛物线,求出这条抛物线可以经过哪些猪,把这个压成二进制状态进行状压dp注意一些细节,比如有些猪只能自己一条抛物线Code:#include <bits/stdc++.h>#define maxn 1000010#define eps 1e-...原创 2019-11-10 18:23:52 · 189 阅读 · 0 评论 -
【题解】LuoGu1351:联合权值
原题传送门因为只有距离为2的点对才能产生贡献,所以这道题目很简单对于每个点所有与它相连的点两两之间是距离为2的,令这些点的权值分别为a1,a2,...,ama_1,a_2,...,a_ma1,a2,...,am这些点的权值乘积和就是a1∗(a2+a3+...+am)+a2∗(a1+a3+...+am)+...+am∗(a1+a2+...+am−1)a_1*(a_2+a_3+...+a_...原创 2019-11-10 13:02:15 · 174 阅读 · 0 评论 -
【题解】LuoGu1941:飞扬的小鸟
原题传送门此题暴力dp可过dpi,jdp_{i,j}dpi,j表示到(i,j)(i,j)(i,j)的最小点击数非常naivenaivenaive的转移方程dpi,j=min(dpi−1,j−xi,dpi,j−xi)+1dp_{i,j}=min(dp_{i-1,j-x_i},dp_{i,j-x_i})+1dpi,j=min(dpi−1,j−xi,dpi,j−xi)+1dpi,j...原创 2019-11-10 10:43:32 · 174 阅读 · 0 评论 -
【题解】LuoGu3953:逛公园
原题传送门NOIp2017tgD1T3NOIp2017tgD1T3NOIp2017tgD1T3当然是先跑个dijkstradijkstradijkstra把最短路求出来然后想到dp求答案dpu,ddp_{u,d}dpu,d表示到uuu路程为ddd方案数状态太多,看到K<=50K<=50K<=50更改状态dpu,ddp_{u,d}dpu,d表示路程为disu+ddi...原创 2019-11-01 21:31:57 · 238 阅读 · 0 评论 -
【题解】LuoGu1351:联合权值
这道题分为两部分求最大联合权值和求和先想到:如果j,k是i的邻居,那么j,k距离为2,可以算联合权值那么,最大联合权值是max{maxa[i]*maxb[i]}(1&amp;amp;lt;=i&amp;amp;lt;=n)maxa,maxb表示最大的两个相邻权值接下来求和易知,一个点i,若有邻居的权值为a1,a2,a3,……,at,那么和为a1*(a2+a3+……+at)+a2*(a1+a3+……+at)...原创 2018-08-01 20:49:50 · 234 阅读 · 0 评论 -
【题解】BZOJ4326:NOIP2015 运输计划【二分+LCA+树上差分】
题目描述公元 2044 年,人类进入了宇宙纪元。L 国有 n 个星球,还有 n?1 条双向航道,每条航道建立在两个星球之间, 这 n?1 条航道连通了 L 国的所有星球。小 P 掌管一家物流公司, 该公司有很多个运输计划,每个运输计划形如 :有一艘物流飞船需要从 ui 号星球沿最快的宇航路径飞行到 vi 号星球去。显然,飞船驶过一条航道是需要时间 的,对于航道 j,任意飞船驶过它所花费的...原创 2018-08-01 19:46:46 · 328 阅读 · 0 评论 -
【题解】LuoGu1073:Noip2009最优贸易
方法来自这位大佬 LuoGu题目传送门 【题解】 此题有一个非常巧妙的方法——分层图+SPFA 由题意可知,输出的答案只跟买入卖出价格有关,且买入卖出仅限一次 如果是普通宽搜的话我们很难维护这个买入卖出的状态,更新答案也比较麻烦这个分层图方法就很方便 我们建立三层图第一层:初始道路,可以走来走去没有权值第二层:在同一层可以跟第一层一样走来走去,但是是从第一层通过来的,由第一...原创 2018-08-06 21:56:22 · 248 阅读 · 0 评论 -
【题解】LuoGu1967:NOIP2013货车运输
原题传送门 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路。每一条道路对车辆都有重量限制,简称限重。 现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。输入 第一行有两个用一个空格隔开的整数 n,m,表示 A 国有n 座城市和 m 条道路。 接下来 m 行每行 3 个整数 x、y、z,每两个整数之间用...原创 2018-08-13 21:28:41 · 269 阅读 · 0 评论