csp-s模拟测试53u,v,w题解】的更多相关文章

题面:https://www.cnblogs.com/Juve/articles/11602450.html u: 用差分优化修改 二维差分:给(x1,y1),(x2,y2)加上s: $d[x1][y1]+=s,d[x1][y2+1]-=s,d[x2+1][y1]-=s,d[x2+1][y2+1]+=s$ 定义2个差分数组d1,d2,分别记录竖列和斜边的差分 $d1[r][c]+=s,d1[r+l-1][c]-=s,d2[r][c+1]-=s,d2[r+l-1][c+l-1]+=s$ 统计是求2…
状态极差的两场.感觉现在自己的思维方式很是有问题. (但愿今天考试开始的一刻我不会看到H I J) A 考场上打了最短路+贪心,水了60. 然而正解其实比那30分贪心好想多了. 进行n次乘法后的结果一定可以化成$S\times b^n + m\times a$的形式,并且$m$是b的若干次幂(带系数)之和. 也就是说,$m=\frac{T-S\times b^n}{a}$可以写成$b$进制数,当然前提是$T-S \times b^n \ mod\ a=0$. 那么这个b进制数的系数之和其实就是加…
题面(加密) 又考没学的姿势……不带这么玩的…… 考场上打了个模拟 骗到30分滚粗了 稍加思考(滑稽)可将题面转化为: 求一个最大的$d$,使得 $\sum \limits _{i=1}^n {(\left \lceil \frac{a_i}{d} \right \rceil *d-a_i)} \leq k$ 移项可得 $\sum \limits _{i=1}^n {\left \lceil \frac{a_i}{d} \right \rceil *d} \leq k+\sum \limits…
啊啊啊啊啊啊啊啊考场上差一点就A掉了5555 千里之堤溃于蚁穴……鬼知道最后一步那么显然的柿子我为什么没考虑用上…… 观察数据范围可知,出题人期望我们想出一个$O(n)$的做法 当然也有可能是$O(nlogn)$,但是这道题所求的数值与树上每个点的权值有关, 似乎用点分治并不能够解决. 那怎么办?树形dp啊.保证严格$O(n)$. 有了这样的思路,我们先来看第一问,并设计一个可以用一遍dfs计算出数组$b[]$的算法. 各位想必知道,树形dp的基本思想是$"Up\ and\ Down"…
达哥送分给我我都不要,感觉自己挺牛批. $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=\sum C_n^i \times C_i^{\frac{i}{2}} \times C_{n-i}^{\frac{n-i}{2}},i\% 2=0$ $type=1:$ 因为不能触碰负半轴,所以可以把右移看成+1,左移看成-1,转化为前缀和大于等于0的问题 于是直接Catalan数就好了.注意是第$\frac {n}{2}$项的Catalan. $Catalan_n=C_…
Orz 出题人石二队爷 我们可以先求出有n个点的联通欧拉图数量,然后使它删或增一条边得到我们要求的方案 也就是让它乘上$C_n^2$ (n个点里选2个点,要么删边要么连边,选择唯一) 那么接下来就是求有n个点的联通欧拉图数量$f[n]$ 首先来看欧拉图的定义: 一张无向图为欧拉图,当且仅当无向图连通,并且每个点的度数都是偶数. 那么设共有n个点且所有点度数皆为偶数的方案数为$g[n]$ 之后尝试计算出来它 先把一个点拿出来,剩$n-1$个点 从这$n-1$个点中选2个点,这两点之间可以连或不连边…
题面:https://www.cnblogs.com/Juve/articles/11631298.html permutation: 参考:https://www.cnblogs.com/clno1/p/10832579.html 因为原来的数组不好做于是我们想反过来数组,根据交换条件:值相邻且位置差大于等于k,那么在变换后的数组就变成了位置相邻且差值大于等于k.这样的话变换操作变成了,相邻的大于等于k的值临近交换,于是我们注意到因为现在只能临近交换的原因,两个差值小于k的数他们的相对位置不可…
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就是来教我们打暴力和高级一点的复杂度分析的?? 然而暴力拿走,复杂度分析并没有get到.调和级数是啥?? 度娘: 调和级数(英语:Harmonic series)是一个发散的无穷级数.调和级数是由调和数列各元素相加所得的和.中世纪后期的数学家Oresme证明了所有调和级数都是发散于无穷的.但是调和级数…
noi2019模拟测试赛(四十七) T1与运算(and) 题意: ​ 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所有排列的\(\Sigma_i f_i\)的最大值. 题解: ​ dp,记\(dp_i\)表示前面的数与和为\(i\)的最大值,转移要一个超集的东西,fwt搞一搞就行了. #include<bits/stdc++.h> #define fo(i,l,r) for(int i=l;i<=r;i+…
稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使用的话,切记计算内存,一点都不能开大. T1:Divisors 直接根号筛,拿map也能过. 遍历map直接begin和end啊... #include<cstdio> ]; struct hash_map{ ],l[],to[],w[]; ])];; for(int i=fir[r];i;i=l…