传送门 考场上并不会写二分的check函数,下来看了看题解发现真是妙极. 不难想到每次直接从四个角各按阶梯状拓展出合法区域A,再检验B是否合法就行了.(然而考场上写的弃疗了) 于是题解用了一些小技巧优化了一波. 我们在读入矩阵的时候可以存它在旋转0度,90度,180度,270度0度,90度,180度,270度0度,90度,180度,270度时的状态. 然后这四次拓展可以封装成为同一个函数. 突然好些了许多 代码…
传送门 二分答案好题. 这已经是当年普及组模拟时挖的坑了233. 这道题还是很不错的. 考虑把坐标系转个45度再操作. 为了不爆精度可以直接转切比雪夫距离. 然后就直接二分答案. 其中竖线就按二分的答案来分割. 而横着的线怎么确定是否合法呢? 我们用ststst表来确定是否合法. 然后就能解决普及组模拟题啦QAQ. 代码…
传送门 一道比较好的线段树. 考试时线性筛打错了于是弃疗. 60分暴力中有20分的快速幂乘爆了于是最后40分滚粗. 正解并不难想. 每次区间加打懒标记就行了. 区间查询要用到广义欧拉定理. 我们会发现每次递归都会将mod变成ϕ(mod)\phi(mod)ϕ(mod),这样递归log次就完了. 代码…
传送门 今天的签到题. 直接前缀和处理一下就秒了. 然而考试的时候智障用线段树维护被卡成了30分,交到OJ一测竟然有100? 搞得我都快生无可恋了. 如果用线段树来做可以类比这道题的写法,直接维护区间内所有点都搬到最左/右端点的花费. 代码…
Dp 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 一块土地有 n 个连续的部分,用 H[1],H[2],-,H[n] 表示每个部分的最初高度.有 n 种泥土可用,他们都能覆盖连续的 k 个部分,第 i 种泥土的价格为 C[i],可以使 i,i+1,-,i+k-1 部分的高度增加 E[i](如果 i+k>n,那就覆盖 i,-,n ),我们必须满足以下条件: 1.每种泥土只能使用一次. 2.成本必须小于等于 m . 要求在上述条件下,使得最低的部分的高度尽量高,请求出这个高度.…
传送门 发现题目要求的就是从下到上的瓶颈路. 画个图出来发现跟去年noipnoipnoip提高组的奶酪差不多. 于是可以二分宽度+并查集检验,或者直接求瓶颈. 代码…
传送门 考试自己yyyyyy的乱搞的没过大样例二分+dp二分+dp二分+dp过了606060把我自己都吓到了! 这么说来乱搞跟被卡常的正解比只少101010分? 那我考场不打其他暴力想正解血亏啊. 正解同样是二分+dp. f[i]f[i]f[i]表示i不变且前面全部满足当前要求时最少需要改几个数. 然后用f[i+1]f[i+1]f[i+1]~f[n]f[n]f[n]转移一下就行了. 代码…
传送门 不得不说神仙出题人DZYODZYODZYO出的题是真的妙. f[i][j][k]f[i][j][k]f[i][j][k]表示选的硬币最大面值为iii最小面值不小于jjj,总面值为kkk时的选法总数. 然后有f[i][l][k1+k2]=∑f[i][j][k1]∗f[j][l][k2]f[i][l][k1+k2]=\sum f[i][j][k1]*f[j][l][k2]f[i][l][k1+k2]=∑f[i][j][k1]∗f[j][l][k2] 这不就是矩阵乘法吗? 上快速幂优化就行了.…
传送门 签到题.(考试的时候写挂爆0) 令AiA_iAi​表示邻接矩阵的iii次幂. 于是就是求Al+Al+1+...+ArA_l+A_{l+1}+...+A_rAl​+Al+1​+...+Ar​. 然而快速幂200次会挂掉. 因此我们把其变成Al∗(A0+...+Ar−l)A_l*(A_0+...+A_{r-l})Al​∗(A0​+...+Ar−l​) 后面的直接预处理,这样一次快速幂+一次矩阵乘法就行了. 代码…
传送门 如果观察到性质其实也不是很难想. 然而考试的时候慌得一批只有心思写暴力233. 下面是几个很有用的性质: c0,1+1≥c1,0≥c0,1c_{0,1 }+1 ≥ c_{1,0} ≥ c_{0,1}c0,1​+1≥c1,0​≥c0,1​,因为$ 10, 01 $是交替出现的. c1,0+c0,0c_{1,0 }+c_{0,0}c1,0​+c0,0​是000出现的次数. c0,1+c1,1+1c_{0,1}+ c_{1,1}+1c0,1​+c1,1​+1 是111 出现的次数. 由于满足条…
传送门 听说是最长反链衍生出的对偶定理就能秒了. 本蒟蒻直接用线段树模拟维护的. 对于第一维排序. 维护第二维的偏序关系可以借助线段树/树状数组维护逆序对的思想建立权值线段树贪心求解. 代码…
传送门 按照题意模拟维护最小的环套树森林就行了. 然而考试的时候naivenaivenaive瞎写了一个错误的贪心. 代码…
传送门 sb模拟,考试跟着sb了90分. 代码…
传送门 今天的送分题. 首先考虑每次给要围上栅栏的矩阵里的整体加上1,如果栅栏被撤销就整体减1,最后比较两个点的值是否相同来进行判断. 然而这样的效果并不理想,很容易卡掉. 进一步思考,我们第iii次操作整体加上iii? 不行. 整体加上i2i^2i2? 还是不行. 等等. 貌似可以整体加上randrandrand. 于是欣喜地过了. 然而考完之后神仙出题人告诉我说整体加法可以被卡,而如果整体异或则被卡掉的几率很小. 于是重新写了一遍异或的版本. 代码…
传送门 签到题. 显然是可以贪心分组的,也就是尽量跟当前的分成一组. 这时我们需要判断a[l]+a[r],a[l+1]+a[r]...a[r−1]+a[r]a[l]+a[r],a[l+1]+a[r]...a[r-1]+a[r]a[l]+a[r],a[l+1]+a[r]...a[r−1]+a[r]是否在fibfibfib数列中出现过 . 由于2e92e92e9范围内兔子数列只有40+个数,因此我们反向思考,枚举fibfibfib数列,判断当前组内是否存在fib[i]−a[r]fib[i]-a[r]…
传送门 签到题. 直接把所有数先质因数分解. 同时统计每一个在阶乘中会出现的质数出现的最少次数. 然后对于每一个这样的质数,我们求出满足其出现质数的m的最小值,然后求出所有m的最大值. 求m的时候可以用二分求. 代码…
传送门 签到题,直接瞎模拟就行了. 代码…
心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. 开场发现T1只要用堆维护一下就行,20min切掉,时间有点长因为花了好长时间在找pbds的头文件.. T2很裸的拆位+期望dp,就是分情况讨论有点恶心. T3我想了1h结果正解是压位优化暴力qnmd... 咦?好像连题解一块写完了....那就只贴一下代码吧.. 算了代码也懒得发了数据包戳着儿…
得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\(t=1\)的情况,似乎与一道题目很像:[洛谷3396]哈希冲突,可以用分块来做. 对于\(t>1\)的情况,似乎与暴力类似,但是要加一个玄学的优化. 如果有多种颜色,它们的数目分别为\(c_1\sim c_t\),不难想到,给\(k\)染上数目最少的颜色肯定是最优的. 我们用\(Min\)表示\(…
[题目描述] 小 H 是个善于思考的学生,现在她又在思考一个有关序列的问题.        她的面前浮现出一个长度为 n 的序列{ai},她想找出一段区间[L, R](1 <= L <= R <= n).        这个特殊区间满足,存在一个 k(L <= k <= R),并且对于任意的 i(L <= i <= R),ai 都能被 ak 整除.这样的一个特殊区间 [L, R]价值为 R - L.        小 H 想知道序列中所有特殊区间的最大价值是多少,…
[题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他又和他人讨论起了二叉搜索树.      什么是二叉搜索树呢?二叉搜索树首先是一棵二叉树.设key[p]表示结点p上的数值.对于其中的每个结点p,若其存在左孩子lch,则key[p]>key[lch]:若其存在右孩子rch,则key[p]<key[rch]:注意,本题中的二叉搜索树应满足对于所有结点,其左子树中…
传送门 分四个方向分别讨论. 每次枚举当前行iii,然后对于第二维jjj用斜率优化dpdpdp. f[i][j]=(j−k)2+mindisk2f[i][j]=(j-k)^2+mindis_k^2f[i][j]=(j−k)2+mindisk2​其中mindismindismindis表示离第iii行的最短距离. 这个显然可以斜率优化 代码…
传送门 考虑如果一个区间满足最小值等于最大公约数那么这个区间是合法的. 因此我们对于每一个点维护可以延展到的最左/右端点保证这一段区间的gcdgcdgcd等于这个点的值. 这个可以用之前同类的链表或者用单调栈维护. 代码…
传送门 题目并不难(想) 其实就是用倍增维护几个树上信息. 也就这么几个: 子树内最长链及其后继点. 子树内次长链及其后继点. 子树内第三场链(也就是dzyodzyodzyo口中鬼畜的次次长链) 点iii的第2j2^j2j个父亲不计算iii这棵子树的最优值−dep-dep−dep 点iii的第2j2^j2j个父亲不计算iii这棵子树的最优值+dep+dep+dep 点iii的第2j2^j2j个祖先 然后注意细节狂码一波就能过了 代码…
传送门 把每一个数aaa质因数分解. 假设a=p1a1∗p2a2∗...∗pkaka=p_1^{a_1}*p_2^{a_2}*...*p_k^{a_k}a=p1a1​​∗p2a2​​∗...∗pkak​​ 然后可以转化成a′=p1a1mod3∗p2a2mod3∗...∗pkakmod3a'=p_1^{a_1mod3}*p_2^{a_2mod3}*...*p_k^{a_kmod3}a′=p1a1​mod3​∗p2a2​mod3​∗...∗pkak​mod3​ 然后可以找到另外一个不含立方因子的bb…
传送门 建图巧妙啊. 对于每个点的出边,我们将它们排序之后依次连边. 这样可以把O(m2)O(m^2)O(m2)的边数变成O(m)O(m)O(m)的了. 连的权值就是max(edgemax(edgemax(edge_delta,0)delta,0)delta,0) 然后用边代替点跑dijkstradijkstradijkstra就行了. 代码…
传送门 对于每个点,用单调栈求出它左右第一个比他大的位置. 然后对每个点O(logai)O(log_{a_i})O(logai​​)求出第一个拥有跟它不同二进制位的位置. 然后容斥一下就行了. 代码…
传送门 考试的时候乱搞过了. 其实题目就是让你求拓扑排序方案数. 直接树形dpdpdp然后组合数转移一下就行了. 乱搞代码…
传送门 首先最开始说的那个一条路径的权值就是想告诉你两个点之间的贡献就是瓶颈边的权值. 那么肯定要用最小生成树算法. 于是我考场上想了30min+30min+30min+的树形dpdpdp 发现转移是优秀的nlognnlog_nnlogn​,总时间复杂度O(n2logn)O(n^2log_n)O(n2logn​)妙啊 然后有了弃疗的想法. 突然想到没有利用kruskalkruskalkruskal算法的性质. 其实就是一个kruskalkruskalkruskal重构树用到的思想,对于两个连通块…
传送门 正解是dp并不想去想了. 自己yy了一个贪心拿了95pts95pts95pts,唯一没过的点还只有一个地方错了,面向数据变成之后过啦! 所以我讲讲如何贪心. 考虑到最后都只会合并成一种颜色,所以我们直接枚举变成哪种,然后让其它的全部强制直接变成那一种就行了. 欢乐95pts95pts95pts 代码(加了特判)…