Noip模拟76 2021.10.14】的更多相关文章

T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 然后维护一个冰茶姬,处理出$le,dw$数组就可以单调队列优化$dp$了 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #define in…
T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列,里面的最大值高度是$j$, 并且后面还至少存在高度为$j$的土块,在前$i$列挖平了$p$个土块,积水的体积是奇数或者偶数的方案数 采用刷表更新$dp$值的方法,更新$f[i][j][k][u]$的所有可能到达的状态 可能有人问数组怎么开,因为$k \leq 26$所以最大值的哪一维只记录前$k+1…
考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则先手必输 那么这道题给出了取石子上限,那么每堆石子$\mod x+1$然后异或就可以知道谁必胜了 然后这道题就转化为如何求$\sum \limits_{i=1}^{n}\oplus a_i \mod(x+1)$. 分段考虑每一段$[k(x+1),(k+1)(x+1)]$,然后预处理一个$f$数组 $…
T1 语言 比较简单的题,然后就瞎写了,所以考场上就我一个写了线段树的,所以我的常数.... 所以就枚举动词的位置,找前面后面有没有出现$4$即可 1 #include<bits/stdc++.h> 2 using namespace std; 3 inline int read(){ 4 int x=0,f=1;char ch=getchar(); 5 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 6 while(ch&…
T1 树上的数 有手就能在衡中$OJ$上过,但是$WaitingCoders$不行,就是这样 必须使用$O(n)$算法加上大力卡常,思路就是找子树内没更新的更新,更新过了直接$return$ 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,q1,vis[5000001],fa[5000001],a,b,X,Y,tmp,ans; 4 struct SNOW{int to,next;}e[5000001];int head[50…
预计得分:5 实际得分:140?????????????? T1 邻面合并 我考场上没切掉的大水题....(证明我旁边的cty切掉了,并觉得很水) 然而贪心拿了六十,离谱,成功做到上一篇博客说的有勇气(也就是很菜,变成了自己瞧不起的人...) 思路很假,但他很真(雾)... 暴力枚举矩形,暴力删除这个矩形,暴力的找下一个矩形.....然后六十??? 唯一提高正确性的地方就在枚举矩形时一个点正序,另一个倒序.... 1 #include<cstdio> 2 #include<bitset&…
T1 F 缩点缩成个$DAG$,然后根据每个点的度数计算期望值 1 #include<cstdio> 2 #include<cstring> 3 #include<vector> 4 #include<iostream> 5 #include<algorithm> 6 #define int long long 7 using namespace std; 8 namespace AE86{ 9 #define fuck cout<<…
T1 如何优雅的送分 他说是送分题,我就刚,没刚出来,想到莫比乌斯容斥后就都没推出来 好吧还是不能被恶心的题目,挑衅的语言打乱做题节奏 于是这一场也就没了.... $F(i)$表示$i$的不同质因子集合大小 $2$的这么多次方显然是在枚举子集 那么改变一下枚举顺序,问题答案可以理解为: 几个不同的质数连乘组成的数在$n$的范围内有多少倍数 考虑枚举这个乘积,可以得到式子 $ans=\sum\limits_{k=1}^{n} \mu ^2(k) \left \lfloor \frac{n}{k}…
T1 自然数 考场上当我发现我的做法可能要打线段树的时候,以为自己百分之百是考虑麻烦了 但还是打了,还过掉了所有的样例,于是十分自信的就交了 正解还真是线段树,真就第一题数据结构 但是包括自己造的小样例还是大样例我都少考虑了一个问题,就是元素可能相等 所以估分$100$实际只有$68$,以后造样例的时候还是要根据题目搞一些极端的数据出来 先说暴力吧,考虑到$a_i$的值域是拿来吓唬人的,因为$mex$不可能超过$2e5$ 所以大于边界的值直接跳过不考虑,这个条件比较关键 那么我们使用经典指针 $…
T1 出了个大阴间题 真就以为他出了个大阴间题就没写,打个暴力就跑了 数据范围显然摆明是状压 设$f[sta][0/1]$表示在已经选择的集合$sta$中,$A$的最大值是$A$还是$A+1$ 然后按照转移之后的集合内的最大值与当前集合的最大值的关系分情况转移,(这里的最大值不是$A$的最大值,是原数的最大值) 所以预处理一个集合内最大值的数组,转移可以达到$O(2^n n)$ 1 #include<bits/stdc++.h> 2 #define int long long 3 using…
T1 签到题 结论题,找到规律就会做 规律是每个点的度数$\mod$颜色种数,如果不是$0$则贡献一个答案 1 #include<bits/stdc++.h> 2 #define int long long 3 using namespace std; 4 namespace AE86{ 5 #define out(x) cout<<#x<<":"<<x<<endl 6 #define fuck cout<<&qu…
T1 玩水 成功在考试的时候注释掉正解,换成了暴力,只因为不敢保证正解思路的正确 脑子瓦特了,不知道把暴力打成函数拼在一起,不知道当时咋想的.... 就是你找有没有一个点上面和左面的字符一样, 如果这两个点有相邻关系或者包含关系就有解(包含关系是说一个点在另一个点的右下,不在同一行一列) 1 #include<bits/stdc++.h> 2 #define int long long 3 typedef unsigned long long ULL; 4 using namespace st…
T1 ZYB和售货机 首先这道题有两种做法. 一种是发现每个点都可以先被取到只剩一个,只要收益大于$0$ 然后发现建一个$i->f[i]$的图时出现环,要把它去掉, 那么跑一个$tarjan$枚举每一个强联通分量然后找到收益获得最少的边删掉就行 第二种做法是建立两个数组$mx[f[i]],nx[f[i]]$分别表示对于连向$f[i]$的边中收益最大和次大的点 那么我们像跳父亲一样$dfs$,找到一个环就比较他们构成环的最大点与次大点里面差值最小的 记录这个点为$x$,那么对于$x$,需要少让他被…
T1 打地鼠 都切掉了的简单题 1 #include<bits/stdc++.h> 2 #define int long long 3 using namespace std; 4 const int NN=2005; 5 int n,k,g[NN][NN],ans,sum[NN][NN]; 6 char s[NN]; 7 inline int calc(int x1,int y1,int x2,int y2){ 8 return sum[x2][y2]-sum[x1-1][y2]-sum[x…
T1 夜莺与玫瑰 题目越发的变态起来... 这题刚开始看超级像仪仗队,好不容易码完欧拉函数后尝试×2后输出但不对!! 于是选择了跳过.... 正解居然是莫比乌斯函数....我也是醉了 预处理完就剩下$O(1)$求解然而我做不到.. 于是打了超级恶心的前缀和$O(n^2)$预处理以及$O(Tn)$求解. (多亏JYFHYX想到的手摸数组辗转相除超吊好吧). 竟然还可以定义short数组防止MLE,小马长见识了. 先考虑到柿子: $\sum_{a=1}^{n-1}\sum_{b-1}^{m-1}[g…
这次时间分配还是非常合理的,但可惜的是$T4$没开$\textit{long long}$挂了$20$ 但是$Arbiter$上赏了蒟蒻$20$分,就非常不错~~~ T1 F 直接拿暴力水就可以过,数据无法精心构造,根本卡不掉,除非测评姬像老奶奶(详情见这一篇) 考场经过 造个大的数据试试跑几秒........ woc,2.7秒,不行,还是得卡常....... (30min later.....) 终于1.4秒了,就这样吧,拿个60分走人.....不对,这题时限4秒........ 然后就比较自…
T1 最大或 $T1$因为没有开$1ll$右移给炸掉了,调了一年不知道为啥,最后实在不懂了 换成$pow$就过掉了,但是考场上这题耽误了太多时间,后面的题也就没办法好好打了.... 以后一定要注意右移左移要加$1ll$ 思路的话我的做法比较麻烦,就是开一个指针$pos$每次跳到下一个数是$0$的$1$的下一个(也就是指向那个$0$) 然后判断左边界或上从$pos$那一位开始后面都是$1$的那个数,如果不超过右边界,就给左边界或上那个数 最后再和右边界或便可得到答案,复杂度没分析,$log$级别的…
老妈送来了防寒补给就很棒,再也不用晚上盖两层毛巾被了,再也不用担心晚上自动把毛巾被$split$了 还有一些好吃的耶叶 T1 小L的疑惑 考场上疑惑的切掉了 直接把$a$排序然后处理前缀和的过程中判断和下一个的数的差就行 1 #include<bits/stdc++.h> 2 #define int long long 3 using namespace std; 4 namespace AE86{ 5 inline int read(){ 6 int x=0,f=1;char ch=getc…
还是困,不过已经可以用脑子思考问题了 T1 数据恢复 没啥明确的算法,可以说是贪心? 考虑部分分, 链的直接扫, 对于菊花的发现只要根节点在第一个,剩下的点位置不重要 那么按照$a/b$排序,扫一遍就行. 这启发我们正解如何考虑祖先和儿子的关系 我们设$v=\frac{a}{b}$,那么还是贪心的选择$v$最小的最优 考虑父子关系 如果当前最优的点的父亲被选,那么直接选他更优 如果当前最优的点的父亲没选,那么选上他的父亲再选他更优 这样就可以使用并查集维护,每次找到$v$最小的点后把他和他父亲合…
T1 接力比赛 思路就是直接做背包$dp$,然后看看容量相同的相加的最大值. 考虑如何在$dp$过程中进行优化 注意到转移方程的第二维枚举容量没有必要从容量总和开始枚举 那么我们便转移边统计前缀和,从前缀和到当前容量做转移就行 复杂度$???$,可以过 1 #include<bits/stdc++.h> 2 #define int long long 3 using namespace std; 4 namespace AE86{ 5 inline int read(){ 6 int x=0,…
以后估计都是用\(markdown\)来写了,可能风格会有变化 T1 宝藏 这两天老是会的题打不对,还是要细心... 考场上打的是维护\(set\)的做法,但是是最后才想出来的,没有维护对于是没有交.. 然后觉得细节太多于是下午来的就去打了比较好搞得权值线段树 基本思想就是用一个指针\(pos\)指向当前需要更新的答案(\(pos\times 2+1\)是题目输入的选择的数的个数,这样解释应该就好懂了) 那么考虑先将所有宝藏按照价值从小到大排序,发现从最后开始向前扫每一个宝藏,他可以更新的\(p…
T1 洛希极限 不难发现每个点肯定是被它上一行或上一列的点转移.可以预处理出每个点上一行,上一列最远的能转移到它的点,然后单调队列优化. 预处理稍显ex.可以用并查集维护一个链表,记录当前点之后第一个没有被预处理的点的位置,这样就保证了每个点只会被更新一次. 同时正因为只被更新一次,所以行列的预处理都应先排序. 单调队列可以手写结构体,维护方案数比较方便. \(code:\) T1 #include<bits/stdc++.h> using namespace std; #define int…
已经好长时间没有考试不挂分的良好体验了... T1 第零题 开场数据结构,真爽 对于这道题首先要理解对于一条链从上向下和从下向上走复活次数相等 (这可能需要晚上躺在被窝里面脑摸几种情况的样例) 然后就不难了,使用倍增,$bz[x][i]$表示节点$x$的第$2^i$级复活点位置 然后询问的话分别找到$s->lca$和$t->lca$的复活次数,是$2^i$ 然后判断一下$lca$两端最后的一对复活点间的距离是否大于$k$,是的话再加一次复活 1 #include<bits/stdc++.…
考试题目变成四道了,貌似确实根本改不完... 不过给了两个小时颓废时间确实很爽(芜湖--) 但是前几天三道题改着不是很费劲的时候为什么不给放松时间, 非要在改不完题的时候颓?? 算了算了不碎碎念了.. T1 玩游戏 好多大神在考场上使用乱搞做法$A$掉了这道题,但是我只水了$20$就跑去刚$T2$了 但是大神们的做法会被其他的恶心数据卡掉,样例是随的所以飞快.. 正解是比较$diao$的双指针.记录五个变量: $sum,sum1,sum2,max1,max2$分别表示$l-r$的和,$k-l$的…
T1 辣鸡 首先吐嘈一下,这题的测试点就离谱,不说了,附上我65分代码: 1 #include<bits/stdc++.h> 2 #define int long long 3 using namespace std; 4 inline int read(){ 5 int x=0,f=1; char ch=getchar(); 6 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } 7 while(ch>='0'&…
T1 电压机制 把题目转化为找那些边只被奇数环包含. 这样的话直接$dfs$生成一棵树,给每个点附上一个深度,根据其他的非树边都是返祖边 可以算出环内边的数量$dep[x]-dep[y]+1$,然后判断 如果在统计时使用差分的思想,可以复杂度降到$O(n)$,也可以用$set$多一个$log$都能过 1 #include<bits/stdc++.h> 2 using namespace std; 3 namespace AE86{ 4 inline int read(){ 5 int x=0,…
新机房首模拟变倒数 T1 柱状图 关于每一个点可以做出两条斜率分别为$1,-1$的直线, 然后题意转化为移动最少的步数使得所有点都在某一个点的两条直线上 二分出直线的高度,判断条件是尽量让这条直线上部的点和下部的点个数尽量相等 这一部分直接使用动态开点线段树维护即可, 具体实现是每个点左右两边分别维护一棵树,开始的时候吧所有点都放在右边树上 然后扫每一个点作为最高柱子的情况,同事把右树上的点移动到左树上 1 #include<bits/stdc++.h> 2 #define LL long l…
T1 茅山道术 考场上卡在了一个恶心的地方, 当时以为每次施法都会产生新的可以施法的区间,然后想都没细想, 认为不可做,甚至$dfs$也无法打,考后一问发现是自己想多了.. 新产生的区间对答案根本没有贡献,还是可以按照原来的相同的颜色搞, 于是无论是$dfs$也好,$dp$也罢,都不用考虑新产生区间的后效性问题 那么我们设$dp_i$表示处理到第$i$个宝石,然后判断一下他的前面有无与他同色的宝石 转移维护前缀和即可. 1 #include<bits/stdc++.h>//分治+dp? 2 #…
T1 reverse 又一道板子打假的挂分题,直接挂到倒二.. 考场上思路神奇,居然想到用$bfs$建边然后跑最短路, 其实当时也想到了直接$bfs$,但是不知道为啥觉得$dij$屌就没直接打$bfs$... 最可怕的是$dji$没打对,以后可能要早操背板子了... 然后其实这题能卡过,因为$k$都特别小. 1 #include<bits/stdc++.h> 2 using namespace std; 3 namespace AE86{ 4 inline int read(){ 5 int…
初次见面(firstmeet)[题目背景]雾之湖边,静得可怕.露米娅出神凝望.黑白连衣裙,像极了绽放的墨黑和洁白的莲.身边的雾之湖,倒映着血色天空.酒红的双眸,映照一切.低声浅笑,双臂伸直,她悄无声息地没入一抹黑暗中,纵身一跃,便穿梭在无尽的苍穹之下.漆黑,在她的身影上缠绕,蔓延......空中,红白的巫女灵梦正在低低的飞着,享受着清爽的微风.突然,灵梦的速度放缓,笑意渐渐凝固——灵梦与露米娅就此见面.灵梦瞳孔骤缩,那嗜血的笑容,无力的啜泣,血红染满的双手,欣慰却又毫无生机的微笑......一系…