- 博客(512)
- 收藏
- 关注

原创 八年终有一别
告别文章,本文应该所有的名字都会真名,我不知道侵犯权益什么的,希望不要冒犯到。NOIp2018 提高组游记ZJOI2019+上海游族杯acm游记绍兴一中集训记NOI2019同步赛 day1NOI2019同步赛 day2绍兴一中暑假集训总结慈溪中学集训记CSP-S2019游记PKUWC2020游记CSP-s2020初赛游记CSP-S2020复赛游记NOIp2020游记先把我自己的信息放到前面,我是很平凡的一个OIer,但我想郑重地告别我的OI。经历说些流水账。为什么我说的是八
2020-12-06 11:16:09
5004
7

原创 友链
排名不分先后丫orz潜力股zyporz数据结构大师zycorz神仙fxkorz神仙学长wrtorz杭二仙女hsyorz衢二神仙xzyorz义乌神仙bztorz义乌神仙zjq
2019-08-21 07:30:52
674

原创 模板整理
因为自己还得再写一遍,大部分模板得先鸽鸽鸽注:算法名称上搞了对应模板的传送门数论1、逆元2、线性筛3、miller_rabin素数判定4、exgcd#include <bits/stdc++.h>using namespace std;int x, y;void exgcd(int a, int b){ if (!b){ x = 1, y = 0; retu...
2019-07-21 16:50:23
239
原创 【题解】LuoGu8642:[蓝桥杯 2016 国 AC] 路径之谜
做一个从起点(1,1)到终点(n,n)的dfs,做的时候时刻更新两排靶子的数字,看起来时间复杂度很高,其实因为靶子的缘故,有很多很多路径是不可能实现的。所以就一个小小的剪枝就可以了。
2023-01-13 19:36:14
132
原创 【题解】LuoGu8816:[CSP-J 2022] 上升点列
本来我们是顺序选取物品,那么如果现在物品之间需要满足一种拓扑关系,或者是说想要选取物品b,必须先选取物品a这样的关系呢。这是一个树形dp,想要选课a,必须要选课b,将选课关系建成一棵树,做树形dp就是这道题目的做法。这道题物品之间只需要满足坐标不降,关联两个物品就需要欧几里得距离的重量,价值就是点数。这道题可以把课看成物品,课本身算作重量,一门课的重量就是“1”,物品的价值在这边就是课的得分,背包问题中是由。每个点就是一个物品,用的附加点的数量就是重量,能不能理解?都有背包问题的影子,都可以算作我提出的。
2023-01-12 11:19:21
362
原创 【题解】LuoGu8815:[CSP-J 2022] 逻辑表达式
这道题目看起来是大模拟,用大模拟也可以做,但是有更好的方法去做。在考前我想到了很多可能考的东西,唯独没有想到考模拟。我经历的,模拟最早可以到2017年提高组的第二题,《时间复杂度》,也是话题量特别大,很多人花了很多时间在这道题目上面。普及组的第三题向来是有东西的。2017年普及组第三题就比较难,我当时也是只拿了50分。2018年普及组第三题更是直接考了很难的dp,比2022年的第四题可要难上不少啊。,我们可以给输入分一个层次,想到先算括号,那么对于同级的形如。这是我一开始的想法,就是顺着题目的思路往下做。
2023-01-12 10:49:45
263
1
原创 【题解】LuoGu8814:[CSP-J 2022] 解密
decode解密在上个世纪充分运用在谍报里面。我高中的时候看过一本麦家写的《解密》,推荐给大家。普及组第二题还是数学题,虽然我不敢说这是考向,但是数学思维还是非常重要的。下面是我手写的题解。
2023-01-11 11:24:05
66
原创 【题解】LuoGu8813: [CSP-J 2022] 乘方
17年18年提高组的第一题都是赚足了眼球,满是话题。18年第一题是一道贪心,甚至是13年提高组的原题,但就是很多人花了很多时间才解决。就算解决了,也用了很多奇怪的算法和做法,这在考场上面就十分不值得。现在提高组变成了四道题目,那么提高组的第一题的定位肯定没有六道题的时候的第一题简单了。在CSP2022之前牛客的模拟赛第一题都是雷打不动的字符串简单模拟,非常的敷衍和苍白。虽然普及组的第一题肯定是来送分的,但是我们不能轻视这一题。你可能会说我在钻牛角尖,但是这道题目用了快速幂和不用快速幂是两个不同的思路。
2023-01-11 10:54:19
416
原创 王安石改革新论
王安石改革新论陈思王不契于时代的改变终会被淘汰,不论是落后于时代,抑或是超前于时代。任何高贵的原则终会沦为世俗的玩具。王安石乃千古哲人,不管是在文学上为“唐宋八大家”之一,还是政治上开展了历史上引人瞩目的“熙宁变法”,今人都能从其身上体察到他绝伦的智慧与超凡的才能,纵然变法最后走向虚无,成果湮灭无存,今人从其身上,从王安石身处的那个时代上头,还能把握、总结出社会的运行规则与时间无形的大道。王安石在宋神宗熙宁元年以宋神宗的大力支持走向台前推行新法,其政策的中心思想是“理财”。早在宋仁宗的嘉祐五年,王
2021-07-25 19:09:37
287
2
原创 【学习笔记】一类比较问题
本文介绍3类比较问题1、逆序对问题:一列数7 3 2 1 6 8 4 5,每次操作可以任选两个相邻的数交换,问最少几次操作使得数列升序?答案等于数列逆序对数定义逆序对:一列数{a}中对于i<j,ai>aji<j,a_i>a_ji<j,ai>aj,称(ai,aj)(a_i,a_j)(ai,aj)为一个逆序对简要证明:假如我现在是一个人工智能,我的目标使得操作数最小。每次操作肯定是做收益最高的。每次操作我都可以令数列的逆序对数-1因为一列数不是有
2021-02-23 22:12:03
193
3
原创 NOIp2020游记
Day 0离退役还有一天,昨天我们班的篮球赛还输了,我说我们班少了两个主力把冠军让给隔壁班,他们胜之不武,而且我们两个班本来就是一家人,这没什么的,王者要有王者的风度。我就这么跟同学们说,但是我却还是最愤怒的一个人。今天欧阳老师继续讲论语,他与欧阳修同宗。他是一个很受中国儒家思想的一个人。他在课前讲到了他十年前的一个学生,能在期中考考五门满分,物理国集rk2,但是因为清北学校之间的问题他没能进入国家队,这真的是我们学校历史以来最优秀的几个人之一了。欧阳老师说这位学长在清华读了八年,把博士读出了,结果老师
2020-12-04 13:11:47
1030
原创 【学习笔记】课题研究:并查集的维护
这个是我以前的一个总结并查集是用来维护连通性的,维护连通性的同时,我们还可以维护连通块里面其他的信息最普遍的用法是kruskal求最小生成树。这个是按照边长度排序,然后维护连通性然后是这道题求∑所有路径中边长max−min\sum 所有路径中边长max-min∑所有路径中边长max−min就先按照边长排序,然后边长满足递增或递减性,另外维护连通块元素的个数用来求方案数再来一道题题目转化成了序列,我就化归成上一道题目的链的形式水箱我们需要在连通块内维护高度,dp值这道题目把维护连通块信
2020-12-04 12:08:35
168
原创 【题解】LOJ3254:「JOI 2020 Final」集邮比赛 3
原题传送门发现n<=200n<=200n<=200,那么我们就可以想一个O(n3)O(n^3)O(n3)的dp发现每次肯定是向左/右推进可以令dp[i][j][k][0/1]dp[i][j][k][0/1]dp[i][j][k][0/1]表示向起点左边推进了iii个,右边推进了jjj个,总共收集到了kkk个邮票,现在在起点左/右边直接转移Code:#include <bits/stdc++.h>#define maxn 210#define LL long lo
2020-12-04 11:28:34
194
原创 【题解】LuoGu6869:[COCI2019-2020#5] Putovanje
原题传送门树上差分就是走n−1n-1n−1条路每次从iii走到i+1i+1i+1,所以用树上差分进行路径覆盖对于每条边可以直接买多程票,也可以买几次单程票Code:#include <bits/stdc++.h>#define maxn 200010#define LL long longusing namespace std;LL delta[maxn], odd[maxn], even[maxn], ans;struct Edge{ int to, next;}ed
2020-12-03 21:24:13
180
原创 【学习笔记】差分
差分思想,一言以概之,就是delta[i]=a[i]−a[i−1]delta[i]=a[i]-a[i-1]delta[i]=a[i]−a[i−1]a[i]=∑j=1idelta[j]a[i]=\sum_{j=1}^{i}delta[j]a[i]=∑j=1idelta[j]然后可以做很多题目
2020-12-03 20:55:37
148
1
原创 【题解】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
96
原创 【题解】AT2386:[AGC016B] Colorful Hats
@luogu手摸几个样例之后我们可以发现,每个人看到的帽子数之差必然<=1然后我们根据a1...ana_1...a_na1...an排序然后a1=ana_1=a_na1=an,意思是,每个人看到的帽子个数相同,那么有两种情况,一种是所有人都不相同,那么aia_iai必须满足ai=n−1a_i=n-1ai=n−1;或者是帽子情况被分成了几段,每段的个数>1,就是2ai<=n2a_i<=n2ai<=n。以上两种情况都是yes,否则noa1+1=ana_1+
2020-12-03 19:26:36
99
原创 【题解】LuoGu4654:[CEOI2017]Mousetrap
原题传送门以陷阱为根建树首先是一个很重要的结论,抑或是一个性质假设现在是这样一个状态(命名为STA1),老鼠在一棵子树的根,这棵子树没有任何东西,老鼠所在的点与父亲的边是脏的(为什么会是脏的?因为老鼠刚从上面走下来)然后我们堵住一条边,老鼠会逃往一个它认为更优的地方我们再将一军好,现在,我们把老鼠堵在了某一个地方,老鼠动不了了,我们可以慢慢操作还可以推出更一般的情况,我们先堵住一个旁支,再擦干净一个地方,老鼠由于本能会走过去,然后那地方又脏了现在我们只用了4次操作将老鼠堵在了“起点”
2020-12-03 18:32:23
138
原创 【题解】LuoGu6359: [CEOI2018]Cloud computing
原题传送门用背包做,如果可以直接枚举物品以及核心数量复杂度是4000∗50∗2000=4e84000*50*2000=4e84000∗50∗2000=4e8差不多可以那么我们基本上就知道怎么做了想着怎么把fff的限制去掉可以直接按照fff从大到小排序,那么我们就能保证现在手里面拥有的肯定都可以用来做任务然后就做一个背包Code:#include <bits/stdc++.h>#define maxn 2010#define maxm 200010#define LL lon
2020-12-02 11:23:22
102
原创 【题解】LuoGu6801:[CEOI2020]花式围栏
原题传送门又是非常常见的数矩形用单调栈维护高度,如果每次矩形长高的话就不用管如果变矮,那么就把多出来的那一块割掉算贡献贡献为割掉的矩形里面的一个正方形为左上顶点,在其他地方再取一个合理的正方形作为右下顶点的方案数图比较抽象,可以根据代码理解Code:#include <bits/stdc++.h>#define maxn 100010#define LL long longusing namespace std;const LL qy = 1000000007;stru
2020-12-02 11:03:39
169
原创 【题解】LOJ3252:「JOI 2020 Final」只不过是长的领带
原题传送门有一个很显然的贪心思想,都从小到大排序,然后直接两两配对就行了证明:a<bc<d一种方案,max(a-c,b-d,0)另一种,max(a-d,b-c,0)=max(b-c,0)发现一定是前一种方案更优然后排好序后,每次就是扔掉一个aia_iai那么配对情况就是a1 a2 a3…ai-1,ai+1,…,an+1b1 b2 b3…bi-1,bi,…,bn对于每个bib_ibi,求出ai−bi,ai+1−bia_i-b_i,a_{i+1}-b_iai−b
2020-12-01 16:30:37
248
原创 【题解】LOJ2350:「JOI 2018 Final」月票购买
原题传送门可以很套路地得到一个结论,答案与月票的路径有一段连续的重复路径以s,t,u,vs,t,u,vs,t,u,v为起点跑四次最短路现在我们枚举两个月票最短路上的点x,yx,yx,yans=min(ans,disu[x]+disv[y],disu[y]+disv[x])ans=min(ans,dis_u[x]+dis_v[y],dis_u[y]+dis_v[x])ans=min(ans,disu[x]+disv[y],disu[y]+disv[x])对于一个xxx,disu[x],dis
2020-12-01 14:10:54
256
原创 【题解】LuoGu7073:表达式
原题传送门我觉得,这道题目主要考察的还是把后缀表达式转成一棵树然后遍历一遍树求出每个节点的值然后暴力改动每个节点的值,往上跑,如果某一个时刻新算的值跟原来一样,那么就不用进行下去,否则继续结果果然只T了一个点,然后我开了O2就过了Code:#include <bits/stdc++.h>#define maxn 1000010using namespace std;struct Edge{ int to, next;}edge[maxn << 1];int n
2020-11-30 21:30:30
98
原创 【题解】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
165
原创 【题解】LuoGu4657:[CEOI2017]Chase
原题传送门扔磁铁得到的收益有两种情况我在起点,扔一个磁铁,周围的权值是收益,因为周围的那些铁块我肯定不会遇到,而追逐者肯定会遇到我从某一个点走过来,假设上一个点是红点,现在我在绿点,然后我扔了一个磁铁,我获得的收益是周围点的权值和减去红点的权值,因为我是经过了红点的,遇到过红点的铁块,而且追逐者也肯定会遇到所以一条路径上,扔磁铁获得的收益有两种情况而且我们可以发现,假如我从某一个点出发,一定要扔一个磁铁。或者说,我扔第一个磁铁的地方,一定是出发点思考树形dp,遍历到某个点uuu的时候,计算
2020-11-30 09:02:10
108
原创 【题解】LuoGu6521:[CEOI2010 day2] pin
原题传送门暴力枚举哪些位上必须相同,剩下的必须不相同然后用容斥Code:#include <bits/stdc++.h>#define maxn 50010#define LL long longusing namespace std;int n, m, a[maxn][5], vis[maxn];struct data{ LL x; int one, two, three, four;}val[maxn];LL ans, ex[5], base;int num[40
2020-11-29 19:32:07
91
原创 【题解】LuoGu4799:[CEOI2015 Day2]世界冰球锦标赛
原题传送门题目的暗示非常明显,因为n<=40n<=40n<=40,所以我们可以用折半搜索对于状态不能直接开桶,所以排个序线扫Code:#include <bits/stdc++.h>#define maxn 2000010#define LL long longusing namespace std;LL a[maxn], n, m, s, M, ans;int m1, m2;LL q1[maxn], q2[maxn];inline LL read(){
2020-11-29 18:58:42
100
原创 【题解】LuoGu4656:[CEOI2017]Palindromic Partitions
原题传送门贪心的从两边开始扫,一旦可以分割就分割肯定是对的,但是怎么实现呢不会所以我写了个35分的暴力剩下的部分用哈希骗分,用了5个哈希就神奇的过了Code:#pragma GCC optimize("-Ofast")#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>#define maxn 1000010#define LL long longusing namespace s
2020-11-29 18:57:00
106
原创 【题解】LuoGu7108:移花接木
原题传送门可以一个一个部分分推下来,放到联赛T1也是可以的,用时不会超过40minh=0:h=0:h=0:把根的儿子都砍掉,答案为aaaa=b:a=b:a=b:把第hhh层的所有点的儿子都砍掉,答案为ah+1a^{h+1}ah+1a=1:a=1:a=1:引入接木的概念,每次拿下来的一棵子树就是原树(因为是无限延展的),对于这个部分其实就是非最后一层的点都要接上b−1b-1b−1个最后一层的点都要砍掉儿子然后其实可以先砍掉,再接木上去,并成一步操作答案就是最后一层的叶子个数,bh
2020-11-29 12:28:08
468
原创 【题解】模拟赛11.28 T2 数数
枚举腰xxx再拿出一条xxx作为一个底,只需要知道所有长度yyy满足(x,y)=1(x,y)=1(x,y)=1的边枚举上底aaa,对于一个yyy,如果a<y<a+2x,(a,x,y)=1a<y<a+2x,(a,x,y)=1a<y<a+2x,(a,x,y)=1,也可以贡献先把边排序,离散预处理sum[i][j]sum[i][j]sum[i][j]表示前iii条边,与jjj互质的有几个可以O(2000∗10000∗gcd)O(2000*10000*gcd)O..
2020-11-28 20:58:26
1130
1
原创 【题解】模拟赛11.26 T1
很容易就能得到每跳一步就是从黑到白或白到黑所以如果起点和终点全白或全黑,肯定No如果起点和终点一黑一白,肯定Yes然后我就错掉了,因为我没有注意到有可能起点到不了终点这种情况只会在棋盘较小的情况下出现所以我用宽搜判断了一下Code:#include <bits/stdc++.h>#define maxn 100010using namespace std;int dx[8] = {-2, -2, -1, 1, 2, 2, 1, -1}, dy[8] = {-1, 1, 2..
2020-11-28 20:52:30
85
原创 【题解】模拟赛11.22T1 玩具
以样例为例,我们这样排列数字枚举所有人最多不能超过iii个玩具,就把超过的部分买回来然后我自己至少得拥有i+1i+1i+1个玩具,所以如果不够的话,从下面取可以用线段树维护,所以需要一开始离散化,每次数据结构套离散化真的挺麻烦的Code:#include <bits/stdc++.h>#define maxn 100010#define ls rt << 1#define rs rt << 1 | 1#define LL long longusi..
2020-11-25 21:13:41
108
原创 【题解】模拟赛11.22 T4 星际战争
首先想想暴力做法先以1为起点跑一遍bfsbfsbfs枚举每个除1以外的点作为基地,跑一遍bfsbfsbfs统计答案复杂度为O(n2)O(n^2)O(n2),可以拿到20分的好成绩然后第二部分的bfsbfsbfs可以优化, 当前如果跑到一个已经不可能保护的点,就是路径长大于和1的距离,就不必再继续跑下去了,结果就过了80分然后是一棵树的部分,还是先以1为起点,建树建好考虑对于一个非1的点xxx,可以保护哪些点令dis[x][y]dis[x][y]dis[x][y]表示两点最短距离F(x,..
2020-11-25 11:54:22
139
原创 2020-11-23
对于 202020% 的数据,n≤1000n \leq 1000n≤1000。显然对于这一档部分分我们可以枚举每一个点 xxx,比较一下 111 和 xxx 哪个先到 iii,然后取个 min\minmin 就好了。复杂度 O(n2)O(n^2)O(n2)。其实还可以剪个枝,数据水,可以拿到 80 分。对于树的数据。考虑到一棵树 每一条树上路径的边 都是固定的,所以可以直接找 1→x1 \to x1→x 的中点,如果长度为奇数,找 1→x1 \to x1→x 距离 xxx 为 ⌊distance(1
2020-11-24 19:50:18
145
原创 【题解】模拟赛11.22T2 树
考虑已经在两棵树都找到了最优点d1,d2d1,d2d1,d2,每棵树内部的贡献再说,若是在d1,d2d1,d2d1,d2之间连边,需要求得树1的点−>d1−>d2−>树2的点树1的点->d1->d2->树2的点树1的点−>d1−>d2−>树2的点的贡献如果我们知道树1的点−>d1树1的点->d1树1的点−>d1的总贡献是sum1sum1sum1,树2的点−>d2树2的点->d2树2的点−>d2的总贡献是sum2s..
2020-11-22 19:31:16
79
原创 【题解】模拟赛11.22T3 七巧板
性质是,如果一条线能穿过一条线,那么能多切一个七巧板其实只是一个形式所以答案就是7+(6+7+8+...+(n+1))7+(6+7+8+...+(n+1))7+(6+7+8+...+(n+1))Code:#include <bits/stdc++.h>#define LL long longusing namespace std;LL n;int main(){ freopen("tangram.in", "r", stdin); freopen("tangram.ou..
2020-11-22 19:16:05
103
原创 【题解】LOJ2349:团子制作
原题传送门按照套路来的话按照中间点GGG来统计对于两个GGG,如果不在同一条对角线的相邻位置,是不会相互影响的所以根据dp的定义,我们以一条条对角线为阶段每个阶段,每个GGG按照不放,横放,竖放讨论转移Code:#include <bits/stdc++.h>#define maxn 3010using namespace std;char a[maxn][maxn];int n, m, ans;int get(){ char c = getchar(); for (
2020-11-20 21:34:44
141
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人