题意: 给出 \(n\) 个数 \(a_1,a_2,\dots,a_n\),你要进行 \(m\) 次操作,每次操作有两种类型: \(1\ p\ x\):将 \(a_p\) 改为 \(x\). \(2\ y\):求 \(\sum\limits_{i=1}^ny/a_i+y\%a_i\). \(1 \leq n,m \leq 10^5,1 \leq a_i \leq 2 \times 10^5\). 一道水水的 T2. 考虑整除分块,不同的 \(y/a_i\) 最多只有 \(2\sqrt{20000…
题目传送门 题意: 有一个 \(n \times m\) 的矩阵,里面已经填好了 \(k\) 个非负整数. 问是否能在其它 \(n \times m-k\) 个格子里各填上一个非负整数,使得得到的矩阵满足以下条件: 在任意一个 \(2 \times 2\) 的子矩阵中,左上角的数 \(+\) 右下角的数 \(=\) 右上角的数 \(+\) 左下角的数. 如果可以输出 Zibi 否则输出 Zikai. \(n,m,k \in [1,10^5]\) 考虑探究这个矩阵有什么性质.假设有一个 \(3 \…
题面传送门 原题题号:Codeforces 883D 题意: 有 \(n\) 个位置,每个位置上要么有一条狗,要么有一根骨头,要么啥都没有. 现在你要给每个狗指定一个方向(朝左或朝右). 朝左的狗可以到达它左边的所有位置,朝右的狗可以到达它右边的所有位置.它们的速度均为 \(1\) 格\(/s\) 如果一个格子上有骨头,那么最先到达这个格子上的狗可以吃掉这个骨头. 求最多能吃掉多少个骨头,以及最少需要多长时间才能达到这个局面. \(n \in [1,10^5]\) 显然,如果只有 \(1\) 只…
题面传送门 题意: 给出一张 \(n\) 个点 \(m\) 条边的无向图 \(G\),第 \(i\) 条边连接 \(u_i,v_i\) 两个点,权值为 \(w_i\). 你可以进行以下操作一次: 选择两条边 \(i,j(i<j)\),并令 \(w_i:=w_i+w_j\). 求你可以得到的最短路的最大值. \(n,m \in [1,3 \times 10^5]\) 很明显,你可以预处理出每条边的边权可以增加的最大值 \(add_i\). 显然答案满足单调性,考虑二分答案. 需检查使得存在一条边…
题面传送门 题意: 对于一个长度为 \(n\)(\(n\) 为偶数)的排列 \(p\),定义一次"变换"后得到的排列 \(p'\) 为: \(p'_i=\begin{cases}p_{(i+n+1)/2}&&i \nmid 2\\p_{i/2}&&i\mid2\end{cases}\) 设函数 \(f(i)\) (\(i\) 为偶数),如果长度为 \(i\) 的排列 \(p_j=j\) 经过 \(i\) 次变换恰好第一次回到原样,那么返回 \(i\),否…
题面传送门 原题题号:Codeforces Gym 101821B 题意: 给出一个排列 \(p\),要你找出一个最长上升子序列(LIS)和一个最长下降子序列(LDS),满足它们没有公共元素.或告知无解. \(1 \leq n \leq 5 \times 10^5\). wxh 太强辣!wxhtxdy! 首先可以发现一个小性质,那就是原序列任意一个 LIS 和 LDS 至多只有 \(1\) 个公共元素. 假设它们有 \(2\) 个公共元素 \(p_i,p_j(i<j)\),由于 \(p_i,p_…
题面传送门 题意: 数轴上有 \(n\) 个点,现在要在它们之间连 \(m\) 条边,第 \(i\) 条边连接 \(a_i,b_i\) 两个点. 现在你要钦定每条边连在数轴的上方还是下方,使得任意两条边要么不相交,要么只在线段顶点处相交:或者宣告无解. 注:两条边 \((l_1,r_1),(l_2,r_2)\) 的条件是 \(l_1<l_2<r_1,r_2>r_1\) 或 \(l_1<r_2<r_1,l_2<l_1\). \(n,m \in [1,10^5]\). 话说…
题意: 给出一个 \(k \times k\) 的网格和 \(n\) 次操作.其中 \(k\) 为奇数. 每次操作给出一个数 \(m\).每次你要找出一个三元组 \((x,l,r)\) 使得: \(r-l+1=m\) \((x,l),(x,l+1),(x,l+2),\dots,(x,r)\) 都未被访问过. \(\sum\limits_{i=l}^r|x-\frac{k+1}{2}|+|y-\frac{k+1}{2}|\) 最小.换句话说,\((x,l),(x,l+1),(x,l+2),\dot…
咕咕咕到现在~ 题面传送门 题意: 给出一个 \(n\times n\) 的矩阵 \(A\).要你求有多少个 \(n\times n\) 的矩阵 \(B\) 满足: 每一行都是 \(1\) 到 \(n\) 的排列. 对于任意 \(1\leq i\lt n\),\(1\leq j\leq n\),\(B_{i,j}\neq B_{i+1,j}\) 定义 \(f(A)\) 为矩阵 \(A\) 从上到下,从左到右拼接而成的序列,即 \(f(A)_{(i-1)\times n+j}=A_{i,j}\),…
[五校联考1day2]JZOJ2020年8月12日提高组T2 我想大声告诉你 题目 Description 因为小Y 是知名的白富美,所以自然也有很多的追求者,这一天这些追求者打算进行一次游戏来踢出一些人,小R 自然也参加了. 这个游戏有n 个人参加,每一轮随机选出一个还没有出局的人x,接着x 会出局.x 在出局之后剩下的人会受到一次攻击,每一个人在遭到攻击之后会有p 的概率出局.(注意遭到攻击出局的人是不能攻击剩下的人的) 在所有人都出局之后,遭受攻击次数等于特定值的人能够成为胜者.所以现在小…
[五校联考1day2]JZOJ2020年8月12日提高组T1 对你的爱深不见底 题目 Description 出乎意料的是,幸运E 的小R 居然赢了那个游戏.现在欣喜万分的小R 想要写一张明信片给小Y,但是因为小R 非常羞涩,所以他打算采用一些比较神奇的方式来表达. 他定义了一些字符串,s1 = a,s2 = b,si =s_i-1 + s_i-2 (i >=3).同时他定义了一个字符串s 的权值为一个最大的i <|s|满足s 长度为i 的前缀等于长度为i 的后缀.比如字符串aba 的权值就是…
题面 \(solution:\) 讲真吧,这道题真的出得,嗯,太恐怖了.考场上这道题真的把我看懵了,这道题以前是见过的,但欧拉函数?我学过吗?一道容斥都要超时的题目,我都要为我自己点根香了,拿着gcd一顿乱搞,果然搞出了个0分.不得不承认博主的数学真的太渣了,但这道题的解题思路真的太妙了(因为渣所以必须学习!). 首先,一个必须要知道的东西,操场是环形的(即 \((mod\) \(n)\) 意义下的).若第\(k\)个格子可以被第\(i\)个同学踩到,那么必定存在一个\(x\) 使\(x*a_i…
題意: 現有一平面直角坐標系,有n個點,每一個點必須向某一個方向發射射線,且任意一條射線必須與某一條坐標軸平行.定義一種發射射線的方案是合法的,則方案必須滿足: 1.沒有一條射線交叉 2.沒有一條射線經過n個點中,除發射點以外的任意一點 問有多少種發射方案 待填…
题目链接 我们可以把棱柱拆成有\(n\)条高的矩形,尝试递推. 在计算的过程中,第\(i\)列(\(i\neq n\))只与\(i-1\)列有关,称\(i-1\)列的上面/下面为左上/左下,第\(i\)列的上面/下面为右上/右下. 我们可以发现,右上可选的颜色数与左上和右下是否同色有关,右下同理,那就记\(f[i][0/1][0/1]\)表示左上与右下是否同色,左下与右上是否同色. 但是第\(n\)列和第\(1\)列不能同色,最后怎么算答案? 不知道第\(n\)列状态算不了,所以我们还要记第\(…
题目链接 容易想到容斥,但是很恶心,因为要对行和列都容斥,然后行+列又要容斥.. 于是得到\(O(nm\log)\)的做法. 就有70分了: #include <cstdio> #include <algorithm> #define mod (1000000007) #define Mod(x) (x>mod&&(x-=mod))//>= #define ID(x,y) ((x-1)*m+y) typedef long long LL; const i…
题意 $n * m$的网格,对其进行黑白染色,问每一行每一列至少有一个黑格子的方案数. Sol 考场上只会$n^3$的dp,还和指数级枚举一个分qwq 设$f[i][j]$表示到了第$i$行,已经有$j$列被染黑,然后暴力转移上一行有几个黑格子 正解是容斥 首先固定好列,也就是保证每一列都有一个黑格子 这样的方案是$(2^N - 1) ^M$ 然后容斥行 组合数暴力算即可 #include<cstdio> #include<cstring> #include<algorith…
坑爹的第一题,我居然想了足足3个小时,而且还不确定是否正确. 于是,我就在这种情况下心惊胆跳的打了,好在ac了,否则就爆零了. 第二题,树形dp,本来差点就想到了正解,结果时间不够,没打完. 第三题,比赛上直接弃疗. 感想 首先强烈谴责出题人,输入开了10^6,我打了读入优化还调了半天才过,什么坑爹的题啊! 本来第一题是个水题,但是我却想了那么久,可能是因为我的基础打得不够扎实,基础训练不够,光顾着学习更高深的算法却忽略的基础的知识.…
题目 分析 首先,设\(f_{i,j}\)表示最大的以(i,j)为左下角的正方形的边长. 转移显然,\(f_{i,j}=\max(f_{i-1,j},f_{i,j-1},f_{i-1,j-1})+1\) 接着,再设\(g_{i,j,k,l}\)表示在以\((k,l)\)为左上角,\((k+2^i-1,l+2^j-1)\)为右下角的矩阵中,最大的f. 二维rmq就不讲了. 假设询问矩阵(x,y,x1,y1), 二分答案ans(想想为什么?) 用rmq看红色区域中的最大f值是否合法. 注意:出题人将…
题目 题目 20%算法 设\(f_{i,j}\)表示第i个节点选了j这个权值的方案数. 显然转移方程为,\[f_{i,j}=\Pi_{v=son(i)}(\sum_{k=1}^{j-k}f_{v,k}+\sum_{k=j+k}^{m}f_{v,k})\] 40%算法 接着上面的想法, 观察转移方程,发现,求和部分其实是两段连续的,那么将\(f_{i}\)求一个前缀和. 100%算法 观察\(f\)数组,发现其实\(f\)是对称的,而且中间的一段是相同的,设深度为x,那么前面就有\((x-1)k\…
题目 分析 发现,当子段[l,r]被取了出来,那么[l-1,r].[l,r+1]一定也被取了出来. 那么,首先将[1,n]放入大顶堆,每次将堆顶的子段[l,r]取出来,因为它是堆顶,所以一定是最大的子段,输出它,并将[l+1,r]和[l,r-1]放进堆中. 一共就只用做k次就可以了. #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <c…
第一题,本来一开始就想到了数位dp,结果脑残地打了十几个转移方程,总是调试不出来,一气之下放弃了. 调第一题几乎调了整节比赛,第二第三都没它. 第二题连边找联通块. 第三题题解都打了三页,看都不想看. 总结 1.要坚持不懈,不能放弃.…
题目 给一棵n 个结点的有根树,结点由1 到n 标号,根结点的标号为1.每个结点上有一个物品,第i 个结点上的物品价值为vi. 你需要从所有结点中选出若干个结点,使得对于任意一个被选中的结点,其到根的路径上所有的点都被选中,并且选中结点的个数不能超过给定的上限lim.在此前提下,你需要最大化选中结点上物品的价值之和. 求这个最大的价值之和. 分析 设\(f_{i,j}\)表示在以i为根的子树中,选了j个节点(当j>0时,i节点必选). 转移就显然了,对于每个节点,与它的每个儿子分别做背包, 有个…
题目 小胡同学是个热爱运动的好孩子. 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n个格子排成的一个环形,格子按照顺时针顺序从0 到n- 1 标号. 小胡观察到有m 个同学在跑步,最开始每个同学都在起点(即0 号格子),每个同学都有个步长ai,每跑一步,每个同学都会往顺时针方向前进ai 个格子.由于跑道是环形的,如果一个同学站在n-1 这个格子上,如果他前进一个格子,他就会来到0. 他们就这样在跑道上上不知疲倦地跑呀跑呀.小胡同学惊奇地发现,似乎有些格子永远不会被同学跑到,他想知道这…
题目 给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位. 由于答案可能很大,模10^9 + 7 输出. 分析 我们从小到大枚举i, 假设1~i-1位都是等于T的1~i-1位,那么第i位就要小于T[i], 然后在保证不用的个数等于k的情况下,i+1~n位就可以随便选. 细节很多,小心处理. #include <cmath> #include <iostream> #incl…
第一题用组合数各种乱搞,其恶心程度不一般.搞了很久才调对,比赛上出了一点bug,只拿了30分. 第二题我乱搞得出个错误的结论,本来自信满满60分,结果爆零了. 第三题,树形dp,在一开始的时候想到了,不过为了调对第一题,没有打出来. 感想 大翻车!只拿了30分,被虐的好惨. 我要再接再厉,战胜自我!…
第一题二分,在比赛上明明想到的方法,结果考虑的时候似乎漏了什么,被否决掉了. 只打了个水法,10分. 第二题,最长不上升子序列,原题,类似的题目做过两道,直接搞定. 第三题,一开始想了一种通过在树上打标记,记录剩下空房间的个数来处理, 结果细节太多了,放弃了.打了个暴力,有神奇的错了. 正解是通过每个点的优先值来维护一个堆. 总结 1.考虑方法要考虑全面,发现错误不能直接否决掉这个想法,要考虑清楚.…
题目 分析 首先预处理出每个点的优先级,当有一个人进入时,一定会走到优先级最大的空房间中. 把所有空的房间扔到一个堆中,按优先级大小维护这个堆. 答案怎么求就不说了,很容易想到,就只讲操作吧. 对于第一种操作,我们就将一个一个扔进优先级最大的房间(即堆顶),因为堆顶的房间有人,所以将堆顶的房间踢出堆. 对于第二种操作,当一个房间空了,一定是从它的父亲房间补上来. 倍增将深度最大的空了的房间的祖宗取出来,因为它的祖宗们一定一个接一个往下走一个位置. 也就是说,深度最大的空了的房间的祖宗人的人会走掉…
题目 分析 我们考虑,当现在有一个合法的集合时,如何往里面增加一个点,使这个集合仍然合法. 假设现在有一个合法的集合, 那么当我们加入一个点,它的道路穿过来整个集合,那么 然后搞一遍最长下降子序列就可以了. #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> const int maxlongint=2147483…
题目 分析 我们二分答案 设\(sum_{i,j}\)表示的i列前个数的和, 假设当前出的二分答案为x,第i列挖了\(h_j\)层,则 \[\dfrac{\sum_{i=1}^{n}sum_{i,h_i}}{\sum_{i=1}^{n}h_i}>=x\] 转移得\(\sum_{i=1}^{n}sum_{i,h_i}-\sum_{i=1}^{n}h_ix>=0\). 那么对于每一列,把最大的\(sum_{i,h}-hx\)求出了,加在一起就可以了. #include <cmath>…
分析 如果打爆搜的话可以拿60分. 首先知道期望是可以累加的,即i通过j去到k的期望,等于i去到j的期望加j去到k的期望. 所以令d[i]表示i的出度,F[i]表示从i到i的父亲的期望,G[i]表示i的父亲到i的期望,j表示i其中任意一个儿子,k表示i的父亲,l表示k其中任意一个儿子,e表示k的父亲. 很容易推出: \[F[i]=\dfrac{1}{d[i]}+\dfrac{1}{d[i]}\sum(1+F[j]+F[i])\] \[G[i]=\dfrac{1}{d[k]}+\dfrac{1}{…