- 博客(56)
- 收藏
- 关注
原创 2021.11.17模拟赛总结
时间今天的时间安排不是特别合理…8:30~8:50把题目都看了一遍,研究了一下T4的式子。8:50~10:30T1看起来并不难,最开始推的二维的序列为2,4,7,11,16...2,4,7,11,16...2,4,7,11,16...,发现是n∗m+Cn−1mn*m+C_{n-1}^mn∗m+Cn−1m,扩展到三维到多维又发现(n,m)=(n−1,m−1)∗2(n,m)=(n-1,m-1)*2(n,m)=(n−1,m−1)∗2,就这样兴致勃勃地写了T1调了调大样例过不去,又想了想发,不知不觉中推
2021-11-17 16:10:10 135
原创 2021.11.16模拟赛总结
时间8:30~8:45看题~,题意倒是都比较直观。8:45~9:30先写了T1O(n3)O(n^3)O(n3)的暴力,又想了想枚举每个点所在的行与列,找到其他的点,将距离相乘后累加,直接写的话快不到那里就分段写了。9:30~10:20T2思考了一会没什么思路,就先去想T3了,T3对于题意不是特别理解“仙人掌树”(?),但看到数据范围“k=0”,就直接用并查集记录联通块个数就行了,第3,4组样例只有森林,对于森林而言切k次最多分为k个联通块,再原来联通块个数的基础上加k即可。10:30~11:3
2021-11-16 15:52:02 258
原创 2021.11.15模拟赛总结
时间8:30~8:50总体看了一边题目,T1字符串||dp,T2除了暴力没什么思路,T3树上dp,T4可能类似于数学问题。8:50~9:30T1按照前后若相等能拆就拆的思路去写,想了想大数据,认为可以利用马拉车算法中r变量的用法,但好像复杂度也没快到哪里,就先看了下一题。9:30~9:50T2真没什么思路,写了一个n2n^2n2暴力就溜了。9:50~10:30设法求出以每个店为根节点的树中,与根节点相距小于等于ddd的节点,构造出一个二维矩阵,表示当前点与其他节点在d范围以内,此时若同一列有
2021-11-15 15:18:55 239
原创 【*】做题记录表
做题记录表原则对于思路巧妙的题目可以记录详细的题解。对于多次提交未通过的题目记录错误原因。其他类型可以简单记录思路并标注专题。每道题一定要经过自己的思考记录lsj day2 T4 (3746)自己按照题解推了一下期望的数学公式......
2021-10-15 13:40:17 226
原创 2021.10.2模拟赛lsj好题分享
8:00~8:20看题,第三题花了点时间。8:20~9:00T1自己推出来的,用f[i]表示拿到i个球的总方案数,则有f[i]=f[i−j]∗f[j]f[i]=f[i-j]*f[j]f[i]=f[i−j]∗f[j],0<j<=i0<j<=i0<j<=i.9:00~10:00T3我的思路是类似于构造之类的,从1开始,1依据题目可以变为11和12,而11和12又可以按照相同的规律变为3位的符合题意的数字,以此类推,在每次变化时记录一下当前位数的数并加到累加和里,一次
2021-10-02 13:31:37 238
原创 2021.9.25正睿七连测Day.5
18:00~18:20看题,看看样例18:20~18:50T1,T2T1就是判断输入的这个数是否为3的倍数以及有无0。T2我的思路是记录每个数的位置和值,按照每个数的值排序,将数的位置标记为1,每标记一个数扫一遍标记数组内的1是否连续。18:50~19:25T3分段来写,20分直接输出,剩下的随机出每条边的颜色,再dfs一遍检查是否合法。19:25~19:35对拍T3,检查下随机数的时间19:35~20:20危!随机出大问题,调了一下。20:20~20:40T2本来是O(n)O(n
2021-09-27 21:37:11 170
原创 9.23模拟赛总结
18:20~18:40看题,这次样例比较大,主要是研究样例18:40~19:30码T2,就按照当存在如(x,y)(x,y)(x,y)到(x+1,y)(x+1,y)(x+1,y)的限制时,在转移(x,y+1)(x,y+1)(x,y+1)时则不从(x,y)(x,y)(x,y)进行转移。这之前还是想过一些其他的,但仔细读题后发现只能从(x,y)(x,y)(x,y)转移到(x+1,y)(x+1,y)(x+1,y)或(x,y+1)(x,y+1)(x,y+1)时才合法。19:30~20:10T1想了一些时间
2021-09-24 13:51:05 108
原创 2021.9.18正睿七连测Day.4
18:00~18:10读题,研究样例18:10~19:00其他的题没什么思路,先去尝试许多方法码了T1,推出来的一些性质并不能去解这道题,最后还是基于“只要当前位置是0,则其余9个位置都不可能有地雷”的性质写了个暴力。19:00~19:40T2没什么思路就先去码了T3,用O(n2)O(n^2)O(n2)去枚举g,进行分数减法。记录最小值。19:40~20:00T4依据题目要求,因为是一对一的输入输出,所以选择打表,先是写了个dfs暴力打到了9就不行了.20:00~20:30有仔细想了想T4
2021-09-22 13:26:25 148
原创 2021.09.14正睿七连测day3
18:00~18:15先码了T118:15~18:30看后面的题面及样例18:30~18:55码T2的正解,思路类似于第一章例题《费解的开关》18:55~19:05写了T3的60分暴力,就是按照题意进行模拟。19:05~19:35T4的暴力,将当前的位置为回文串中心进行扩展,去查找当前字符串中的回文串个数,再暴力改变每个字符,再次统计回文串个数。19:35~19:50由于可能会有许多相同的回文串,所以用map来优化T4(其实没优化多少)19:50~20:30检查并上交T1,T22
2021-09-14 17:19:42 159
原创 [状压dp] 动物园题解
动物园P2911 动物园 题解题意有N个成环形的房间,C个小朋友,对于每个小朋友他们能看到E - E+4共五个房间,每个小朋友有F个喜欢的房间和L个讨厌的房间,当满足以下两个条件其中之一时,小朋友就会开心:至少有一个他害怕的房间被移走;至少有一个他喜欢的房间没被移走。可以移走若干个房间,问最多能令多少个小朋友开心。分析dp式对于任一个小朋友能够看到的五个房间,我们用0和1来表示这个房间是否撤走,而每个小朋友能看到的5个房间恰好能够作为状压dp的变量,用一个五位的二进制数s来表示
2021-09-09 19:15:50 240 2
原创 2021.09.05七连测day2总结
18:00~18:20写T118:20~18:30阅读思考后三道题18:30~18:50思考并写T2代码,认为T2是类似于括号匹配多加了一步操作。18:50~19:30思考T3的前两个数据范围,想到了trie树的操作,写了40分代码。19:35~19:50思考T3的第三个数据范围(梯形),未果。19:50~22:00检查前三道题并上交,阅读并思考T4。分数预计分数为100+100+40=240结果为100+50+50=200其中T2因为string类型与char类型的相互转换,
2021-09-05 20:40:50 112
原创 2021.08.29正睿七连测(一)总结
T1.数列按照题目要求进行处理即可。T2.索引考试时思路为对于原始序列建一棵线段树,并新建一个变量x,表示当前线段树节点所包含的范围内是否有子节点满足a[i]==ia[i]==ia[i]==i这个条件,每次先进行区间修改再区间查询,复杂度为O(k∗log n)O(k*log\ n)O(k∗log n)T3.奇数考试时直接按照题目暴力拿到了30分,但题目中数据范围分了许多段,若仔细思考能用简单的算法拿到更多。T4.解密总结:大部分时间都用来检查第二题线段树的代码上了,导致没
2021-08-29 21:00:23 156
原创 2021.8.22模拟赛总结
T1.矩阵编码最开始的想法是对于最初的矩阵分解为四部分,依次暴力按照题目要求判断,若不符合条件则重复以上步骤,过程中记录答案0/100:没有拿到最基础的暴力分。T2.举重根据题目若同一对的哑铃不在同一行,则必定会进行移动,更新答案,未观察到同一对哑铃在同一行时的规律T3.区间dfs处理每个区间所放入的集合,全部放入后判断所有集合是否都有区间,若符合条件,则更新答案。10/100:大数据超时,只过了小数据T4.甜点最开始想到了缩点然后找最长链,最后时间不够,没能找到bug。总结以后做题应
2021-08-22 19:42:10 97
原创 2021 7.5~7.20日集训总结
Day.1集训开始的第一天,以数据结构为主体,在之前的基础上进行了不小的扩展。并查集启发式合并:一种根据子树大小为基准的合并集合的方式,能够使得“合并集合”操作和“询问”的复杂度降到O(logn)O(log n)O(logn)路径压缩:在只考虑每个点与其根节点的情况下,我们可以将任意一个子树的父亲设置为根节点,使得查询操作降到O(1)O(1)O(1)...
2021-07-29 09:00:14 240
原创 [字符串] kmp与trie与ac自动机的快乐一家人
kmpkmp算法,主要用于进行字符串之间的模式匹配,也就是判断字符串b是否为a的字串,并能够在线性的时间内找出b在a中的出现次数。具体实现讲完主要功能,当然要开始讲如何去实现了。通常的,判断一个字符串是否为另一个字符串的字串,就是逐字逐字地去判断,若有不相同的字符,就将b字符串整体向后平移一位。下面介绍kmp算法的主要步骤:先对母串a进行处理,求出一个数组next[n]next[n]next[n],其中next[i]next[i]next[i]表示“字符串a 1~i位中后缀能够与前缀匹配的最长
2021-07-03 08:24:41 258 2
原创 2021.07.01模拟赛订正
T1解密对字符串进行两两去重操作,用栈写,当栈顶元素等于字符串中的元素时弹出即可。T2 angry二分最少需要的能量值即可T3 黑洞考场中没有思路,于是放到了最后。T4 白银莲花池将某个位置(x,y)处理为一个点的编号(x−1)∗n+y(x-1)*n+y(x−1)∗n+y,再按照题目要求进行连边,从莲花或起点到水所花费为1,从莲花到莲花花费为0,最后跑最短路,求出最小花费。T5 山应该是dp吧,用f[i][j]表示前i个山盖j个房子所需最小费用,没输入一座山的高度便更新最小费用//dp式
2021-07-01 13:44:36 82
原创 2021.06.30普转提测试总结
T1社交距离刚开始的思路就是二分,但由于数据范围是101810^{18}1018,所以开始思考如何优化二分范围。大致思路是:记录每次区间的长度,其中的最小值为L,而R的最大范围为区间右端点的最大值。(最后的最后发现是自己想多了,就是111~101810^{18}1018…)T2 奶牛飞盘队用一个数组d[i]记录前若干个数中所构成的和对f取模后等于i的方案数,每次读入某一个数,从0~f-1循环一遍更新方案数,最后在d[a[i]%f]上++。在考场上有错未找出来,之后订正是重构了一遍a了。T3 养
2021-06-30 20:10:15 72
原创 [分块] 分块入门1~4
何为分块在学习完线段树和树状数组后,这两种数据结构已经能够解决大部分的问题了,但在使用过程中不难发现他们的缺点树状数组O((N+M)logN)O((N+M)logN)O((N+M)logN):局限性过大,不易扩展到普遍性题目线段树O((N+M)logN)O((N+M)logN)O((N+M)logN):虽然能够扩展到许多题目,其也有许多类型,但不够直观,并且代码长,细节多…分块应运而生分块的基本思想是通过适当的划分,预处理一部分信息并保存下来,用空间换取时间,达到"时空平衡" ———《算法竞
2021-06-29 16:04:22 431
原创 [并查集]校OJ-银河英雄传说
银河英雄传说大意有n列的星际战场,每一列上有一艘战舰,m条指令M i j 表示表示将第i号战舰所在的列的全部战舰全部转移到第j号C i j 表示第i,j号战舰是否在同一列,若在同一列,那么相差多少位思路将每一列的战舰看作是一个集合,用并查集来维护,,我们按照边带权的思想,在最初,让每条边的边权值为一,考虑路径压缩是如何传递权值的,在路径压缩把节点x指向根节点时,我们把dis[x]更新为从节点x到树根的之间的路径的所有权值之和int find(int x){ if(x==fa[x]) r
2021-06-02 15:06:05 155 2
原创 [数据结构]并查集
定义并查集(Disjoint-Set)是一种可以动态维护若干个不重叠的集合,并支持合并和查询的数据结构,详细的说,并查集基本包括两个操作Get 查询一个元素属于哪一个集合Merge 把两个集合合并为一个大集合解释相信大多数人看了上面的官方语言都满头雾水,其实为了实现这种数据结构,我们用一个固定的元素来代表某个集合,对于一些归属关系,我们则可以用一个树形结构来存储每个集合,树上的每个节点代表每个元素,树根就是这个集合的代表元素。为便于理解,做个形象的比喻,将每个节点比作许多人,节点所属的集
2021-06-02 14:10:02 107
原创 [并查集]校OJ-亲戚
亲戚大意n个人,m个关系,k个关系(x,y),判断(x,y)是否有关系思路并查集模板题,判断find(x)是否等于find(y)即可code#include <bits/stdc++.h>using namespace std;const int N=10860;int fa[N];int find(int x){ if(x==fa[x]) return x; return fa[x]=find(fa[x]);}int main(){ freopen("rela
2021-06-02 14:04:41 126
原创 [并查集]校OJ-犯罪团伙
犯罪团伙大意n个人,m个关系,求集合的个数。思路每次给定关系(x,y),则x元素属于y元素,也就是将x的祖先认为是y的祖先(大型认亲现场),在最后只需要记录有几个节点的祖先是它本身即可。code#include <bits/stdc++.h>using namespace std;const int N=50860;int fa[N];int find(int x){ if(x==fa[x]) return x; return fa[x]=find(fa[x]);}
2021-06-02 13:55:49 133
原创 [线段树]校OJ-JSOI2008最大数
JSOI2008最大数大意给定n个数,每个数保证小于p,下面执行两个操作添加:再当前序列末尾加上一个数询问:输出序列后L位中的最大值思路因为每次询问是某一段范围的最大值,用动态开点的线段树写起来更优code#include<bits/stdc++.h>using namespace std;const int M=4e5; int m,p,ans=0,num=0,root=0; char c; int a;struct tree{ int l,r,zhi;
2021-06-01 15:11:36 157
原创 2021-05-29模拟赛总结
T1 小W的书架按照题目意思dp即可。T2 命题刚开始看到所属关系,认为是并查集,可以用并查集做出来前两问,但第三问调不出来大数据那一组,后来才知道是算法有问题。T3 选座做这道题的时候时间不多了,没多想第一问,直接输出n,第二问贪心,按照左区间排序,当前时间能坐尽量坐,不能坐就ans++,更新最后的右区间。T4 施工正常建图,跑一遍堆优化的dijkstra,记录下不施工的最短路距离,每次施工,将施工路线的边权值设为极大值...
2021-05-29 15:47:02 58
原创 [线段树]校OJ-Interval GCD
Interval GCD题目大意一个有n个数的序列,m次操作每次操作包括:1.Q l rQ\ l\ rQ l r 查询从lll到rrr中a[l],a[l+1]...a[r]a[l],a[l+1]...a[r]a[l],a[l+1]...a[r]的最大公约数。2.C l r dC\ l \ r \ dC l r d表示从l到r每个数都加上d思路参考之前的更相减损法gcd(a,b)=gcd(x,b−
2021-05-28 16:46:10 126
原创 [线段树]校OJ-Can you answer on these queries III
Can you answer on these queries III题目简述给定长度为N的数列A,以及M条指令 (N≤500000,M≤100000)(N≤500000, M≤100000)(N≤500000,M≤100000),每条指令可能是以下两种之一:“2 x y”,把 A[x] 改成 y。“1 x y”,查询区间 [x,y] 中的最大连续子段和,即区间[l,r][l,r][l,r]内,连续累加和最大的。 对于每个询问,输出一个整数表示答案。//input5 31 2 -3 4 51
2021-05-28 16:00:04 141
原创 [线段树]校OJ-序列操作1
题目简述给定一个包含n个数的序列,初值全为0,现对这个序列有两种操作:操作1:把 给定 第k1 个数改为k2;操作2:查询 从第k1个数到第k2个数的最大值。(k1<=k2<=n)样例//input3 1 2 21 3 32 2 3//output3数据范围a,b<=105a,b<=10^5a,b<=105,n<=105n<=10^5n<=105思路模板题,在一棵线段树中进行mmm次区间查询(注意本题中m=n)(注意本题中m=
2021-05-28 15:56:30 205
原创 [随笔]笔记本
前言博主随便写写,当个笔记本ASC||值A(65)+32=a(97)(大小写字母的相互转化)switchswitch()case(…)case(…)…default(其他情况)存储单位1024B=1KB MB GB TB PB8b(bit)=1B原码 补码 反码0取反是-11取反是-22取反是-33取反是-44取反是-55取反是-66取反是-7因为 补码= 反码 +16的反码是-7 ,-7+1 = -6正好是6 的补码。这是补码数(有符号数)编码设计造成的
2021-05-28 14:30:02 107
原创 《算法竞赛指南》0x60通信线路(Telephone lines)
通信线路大意n个点,m条双向边,求从1~n的最小费用,你可以其中免费k条线路。思路将dis数组改为二位,用多出来的一维表示当前的线路免费了多少次,在正常跑完spfa 后判断每条边免费或不免费的费用,最后费用ans=min0≤i<k dp[n][i]ans=\min _{0\leq i< k}\ {dp[n][i]}ans=min0≤i<k dp[n][i]code#include<bits/stdc++.h>using namespace
2021-05-27 21:51:28 180
原创 《算法竞赛指南》0x6B 升降梯上
升降梯上大意n层塔,m个按钮,每次拉拉杆上下电梯,拉拉杆需1s,上下一层需2s,求最小的上升到顶层的时间思路虽然看起来不像,但我们可以用最短路中的分层图来思考,遍历每个点以及每个拉杆所上下的楼层,将当前楼层与拉过拉杆所在的楼层相连接,权值为拉杆的位置,连完边之后,跑一遍dijkstra求出最短路即可。#include<bits/stdc++.h>#define LL long longusing namespace std;const int N=108600;struct n
2021-05-26 13:27:55 183
原创 《算法竞赛指南》GF与猫咪的关系
GF与猫咪的关系大意给定n个点,m个边,求两个边数最多的点之间的边数,注意当两个环之间有几个绳索数相等的连接方法时,只算其中一条连接方法拉紧。思路跑一遍flord,遍历数组找到其中的最大值。#include<bits/stdc++.h>using namespace std;int a[1086][1086];int ans=-1;int n,m;int main(){ memset(a,0x3f,sizeof(a)); scanf("%d%d",&n,&
2021-05-25 20:39:47 140
原创 [图论]最短路(包括SLF优化spfa的原理)
图的一些简单概念自环:从某个顶点出发连向自己的边。环:从某个顶点出发再连到自身的边重边从一个顶点到另一个顶点有两条边直接相连图的存储对于有向图,通常通过邻接矩阵和邻接表两种方法存储,而对于无向图,在没有特殊要求时,通常认为无向边是两条方向相反的有向边邻接表通过head数组来记录每个节点第一条边出发的节点在edge.to和edge.next中存储的位置,其中to和val 分别记录每个边的终点和权值,next 记录下一条边在to和val中存储的位置。struct node{ int to,ne
2021-05-25 20:17:05 635 5
原创 [数据结构] 树状数组
前言745 …lowbit操作对于lowbitlowbitlowbit的定义为"非负整数nnn在二进制表示下最低位的1及其后面所有的0"所构成的数值,例如:当n=12n=12n=12时,12=(1100)212=(1100)_212=(1100)2,所以lowbit(12)=(100)2=4lowbit(12)=(100)_2=4lowbit(12)=(100)2=4那么如何实现lowbitlowbitlowbit操作呢?先将n取反,此时第k为变为1,第0~k-1位变为1,再令n=n+1,此时
2021-05-13 21:41:47 192
原创 [数论]中国剩余定理
题目给出你n个同余式,求解一个x满足一下同余式。{x≡a1(mod m1)x≡a2(mod m2)......x≡an(mod mn)\begin{cases}x\equiv a_1(mod\ m_1)\\x\equiv a_2(mod\ m_2)\\......\\x\equiv a_n(mod\ m_n)\end{cases}⎩⎪⎪⎪⎨⎪⎪⎪⎧x≡a1(mod m1)x≡a2(mod m2)......x≡an(mod mn)
2021-05-11 18:44:27 80
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人