2021.10.11考试总结[NOIP模拟74]】的更多相关文章

T1 自然数 发现\(mex\)是单调不降的,很自然地想到用线段树维护区间端点的贡献. 枚举左端点,用线段树维护每个右端点形成区间的\(mex\)值.每次左端点右移相当于删去一个数. 记\(a_i\)在\(i\)下一次出现的位置为\(pos_i\),那么左端点\(i\)移到\(i+1\),实际上就是将左端点在\([i,pos_i)\)的区间中\(mex\)值大于\(a_i\)的改为\(a_i\).线段树上二分可以解决,中途要记区间最小值便于二分. \(code:\) T1 #include<bi…
T1 Dove玩扑克 考场并查集加树状数组加桶期望$65pts$实际$80pts$,考后多开个数组记哪些数出现过,只扫出现过的数就切了.用$set$维护可以把被删没的数去掉,更快. $code:$ 1 #include<bits/stdc++.h> 2 #define int long long 3 using namespace std; 4 const int NN=1e5+5; 5 int n,m,op,x,y,fa[NN],siz[NN],sum,cnt[NN],nums[NN]; 6…
信心赛,但炸了.T3SB错直接炸飞,T4可以硬算的组合数非要分段打表求阶乘..T2也因为一个细节浪费了大量时间.. 会做难题很好,但首先还是要先把能拿的分都拿到. T1 签到题 结论:总可以做到对每个点连的边平均分配颜色.感性理解貌似不难,据题解说可以网络流证明. 总之很玄. UPD:证明好像能用\(vizing\)定理? 放两个链接 oiwiki %赵sir \(code:\) T1 #include<bits/stdc++.h> using namespace std; namespace…
\(n=40\)考虑\(meet \;in \;the \;middle\) 某个元素有关的量只有一个时考虑转化为树上问题 对暴力有自信,相信数据有梯度 没了 UPD:写了个略说人话的. T1 最大或 选两个数,其中一个肯定选\(r\).另一个在不卡上界后二进制位全选\(1\). \(code:\) T1 #include<bits/stdc++.h> #define int long long using namespace std; namespace IO{ typedef long l…
T1 洛希极限 不难发现每个点肯定是被它上一行或上一列的点转移.可以预处理出每个点上一行,上一列最远的能转移到它的点,然后单调队列优化. 预处理稍显ex.可以用并查集维护一个链表,记录当前点之后第一个没有被预处理的点的位置,这样就保证了每个点只会被更新一次. 同时正因为只被更新一次,所以行列的预处理都应先排序. 单调队列可以手写结构体,维护方案数比较方便. \(code:\) T1 #include<bits/stdc++.h> using namespace std; #define int…
T1 如何优雅的送分 考虑式子的实际意义.\(2^{f_n}\)实际上就是枚举\(n\)质因子的子集.令\(k\)为这个子集中数的乘积,就可以将式子转化为枚举\(k\),计算\(k\)的贡献. 不难得出\(k\)一定没有平方因子,那么枚举\(k\)就可以写为枚举\(\left \{ \mu^2(d)|d\in N^* \right \}\),即: \[2^{f_i}=\sum_{k=1}^n\mu^2(k) \] 发现有\(\mu^2(d)=\sum_{k^2|d}\mu(k)\),证明时考虑\…
T1出了个大阴间题 状压\(DP\),记当前状态的代价和与方案数.状态\(\Theta(2^nn)\),转移\(\Theta(n)\). 发现每个状态的最大值只会是所选集合的\(max\)或加一.于是可以降维.(我太弱考场上没想到 \(code:\) T1 #include<bits/stdc++.h> #define int long long using namespace std; namespace IO{ auto read=[]()->int{ char ch=getchar…
有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a_i-\frac{(j-i)\times (j-i-1)}{2}]$ 设$j<k$,对$i$来说,$k$优于$j$,当且仅当$2\times i>\frac{2\times(f_j-f_k)+k^2+k-j^2-j}{k-j}$ 斜率优化,$CDQ$分治,先按$a$排序,分治中按$id$排序满足限…
T1 路径 考虑每一位的贡献,第$i$位每$2^i$个数会变一次,那么答案为$\sum_{i=1}^{log_2n} \frac{n}{2^i}$. $code:$ 1 #include<bits/stdc++.h> 2 #define int unsigned long long 3 using namespace std; 4 5 namespace IO{ 6 inline int read(){ 7 char ch=getchar(); int x=0,f=1; 8 while(ch&…
T1 ZYB和售货机 容易发现把每个物品都买成$1$是没有影响的. 然后考虑最后一个物品的方案,如果从$f_i$向$i$连边,发现每个点有一个出度多个入度,可以先默认每个物品都能买且最大获利,这样可以建出每个点出度入度都是$1$的图. 把所有边都连上是一个基环树,所以建出的若干个联通图中只有一个环.而我们要做的工作就是用最小代价把这个环断掉,形成的树上所有边都可以对答案贡献. 记每个物品的最大获利和次大获利,在图上$DFS$,每到一个点先加上最大获利,记录路径上最大获利与次大获利差的最小值,如果…