Noip模拟51 2021.9.12】的更多相关文章

T1 茅山道术 考场上卡在了一个恶心的地方, 当时以为每次施法都会产生新的可以施法的区间,然后想都没细想, 认为不可做,甚至$dfs$也无法打,考后一问发现是自己想多了.. 新产生的区间对答案根本没有贡献,还是可以按照原来的相同的颜色搞, 于是无论是$dfs$也好,$dp$也罢,都不用考虑新产生区间的后效性问题 那么我们设$dp_i$表示处理到第$i$个宝石,然后判断一下他的前面有无与他同色的宝石 转移维护前缀和即可. 1 #include<bits/stdc++.h>//分治+dp? 2 #…
T1 如何优雅的送分 他说是送分题,我就刚,没刚出来,想到莫比乌斯容斥后就都没推出来 好吧还是不能被恶心的题目,挑衅的语言打乱做题节奏 于是这一场也就没了.... $F(i)$表示$i$的不同质因子集合大小 $2$的这么多次方显然是在枚举子集 那么改变一下枚举顺序,问题答案可以理解为: 几个不同的质数连乘组成的数在$n$的范围内有多少倍数 考虑枚举这个乘积,可以得到式子 $ans=\sum\limits_{k=1}^{n} \mu ^2(k) \left \lfloor \frac{n}{k}…
T1 数列 真是考场上不是数学的乱推柿子,想定理,是数学的没想出来.. 比较悲伤... 列柿子不用动脑子,就是没有想出来$EXgcd$解不定方程,淦.. 解处一组解后利用比较显然的性质: $x+\frac{b}{gcd},y-\frac{a}{gcd}$ $x-\frac{b}{gcd},y+\frac{a}{gcd}$ 利用此调整$abs(x)+abs(y)$的最优值,为了快速的搞,使用倍增记录调整的偏移量 %%%大佬$zxs$考场$A$此题!!!$Orz$ 1 #include<bits/s…
T1 茅山道术 仔细观察发现对于每个点只考虑它前面第一个与它颜色相同的点即可. 又仔细观察发现对一段区间染色后以这个区间内点为端点的区间不能染色. 于是对区间右端点而言,区间染色的贡献为遍历到区间左端点时的方案数.线性$DP$. $code:$ 1 #include<bits/stdc++.h> 2 #define int long long 3 using namespace std; 4 5 namespace IO{ 6 inline int read(){ 7 char ch=getc…
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…
T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 然后维护一个冰茶姬,处理出$le,dw$数组就可以单调队列优化$dp$了 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #define in…
考场拼命$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 电压机制 把题目转化为找那些边只被奇数环包含. 这样的话直接$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 交通 考场上想了一个$NPC$.应该吧,是要求出图里面的所有可行的不重复欧拉路 无数种做法都无法解出,时间也都耗在这个上面的,于是就考的挺惨的 以后要是觉得当前思路不可做,就试着换一换思路,千万不能在一道题上花费太多时间 正解是一个关系的判断 每一条边选还是不选都会跟另一条边产生连锁关系,那么给他们编上号建边,用并查集判断环就行 然后每个环上选择$n$个不相邻的点,总共$2^{环数}$种方案 1 #include<bits/stdc++.h> 2 #define ll long long…
新机房首模拟变倒数 T1 柱状图 关于每一个点可以做出两条斜率分别为$1,-1$的直线, 然后题意转化为移动最少的步数使得所有点都在某一个点的两条直线上 二分出直线的高度,判断条件是尽量让这条直线上部的点和下部的点个数尽量相等 这一部分直接使用动态开点线段树维护即可, 具体实现是每个点左右两边分别维护一棵树,开始的时候吧所有点都放在右边树上 然后扫每一个点作为最高柱子的情况,同事把右树上的点移动到左树上 1 #include<bits/stdc++.h> 2 #define LL long l…