随笔分类 - 题解
摘要:前言 这为啥能想到来着。 思路分析 首先你发现答案只和初态和末态有关。 于是可以考虑定义势能,答案为势能的减少量。 经过仔细读题后发现,每次我们选择在一行或者一列操作,那么每一行和每一列的势能都是相对独立的。 于是我们只需要考虑在一行进行操作的势能变化,一行的势能是本行所有元素的势能之和,原图的势能
阅读全文
摘要:前言 好题,很可做也很有意思。 思路分析 首先发现如果一个点被操作了多次,那么只有最后一次会影响它的位置。 我们称影响位置的操作为有效操作,不影响位置的为无效操作。 不难发现,序列可以分为三部分,前面部分是往前放的有效操作,中间部分是没有移动过的,后面部分是往后放的有效操作。 于是可以考虑一个 DP
阅读全文
摘要:here. 挺有意思的一场,但是我真不会 F2。 D 考虑把这个过程反过来,从后往前做,题意转化为每次进行两次操作中的一个: \(r \to r+1\); \(r \to r-k,ans\to ans+d_i\) 你发现这是一个经典的反悔贪心模型。 考虑用小根堆维护目前选择的 \(d_i\),然后每
阅读全文
摘要:前言 挺有意思的题。 从某些特殊角度来理解的话,也不算不可做题。 思路分析 首先要点权转边权,我们对于一个点 \(x\),拆点 \(x,x'\),连边 \(x\to x'\),边权为 \(a_x\),对于原图上的边 \((x,y)\),连边 \(x'\to y\),边权为 \(0\)。 然后我们要考
阅读全文
摘要:前言 好题。 思路分析 这个题分为很多部分,各个部分之间比较独立。 我们一点一点来。 首先考虑 \(f(p)\) 怎么算。 把贡献拆到每一个点上,发现: \[f(p)=\sum_{i=1}^{n}i(\sum_{j=1}^{i-1} [p_i<p_j]-\sum_{i=j+1}^{n}[p_j<p_
阅读全文
摘要:前言 来自山西队爷的分享题。 思路分析 首先有一个朴素的想法,能否枚举两个集合的边权,判断是否合法。 发现是可以的。 具体地,我们设 \(D(A)=w_1,D(B)=w_2\),不失一般性,假设 \(w_1 \ge w_2\)。 这样,我们可以把图上的边 \((x,y,w)\) 分成三类: \(w
阅读全文
摘要:前言 直面恐惧! 思路分析 首先考虑这个形式就很像区间划分,所以考虑设 \(f_i\) 表示考虑前 \(i\) 个元素的最大价值。 考虑怎么转移,一个 naive 的想法是这样: \[f_i=\max_{j=1}^{i-1} f_j+w(j,i) a_i=a_j \]\[f_i=\max(f_i,f
阅读全文
摘要:打了一下午,但是好像没做出来啥有水平题? here. B 考虑每次能猜中,当且仅当拿出的卡片颜色,是多数颜色。 经过手玩发现,无论怎么取卡片,猜中的总次数都是 \(\max(a,b)\)。 所以答案就为 \(\max(a,b)\)。 #include<bits/stdc++.h> using nam
阅读全文
摘要:A 考虑从大到小考虑每一个取值的数,如果能换就换,如果换了没用就不换。 实现上使用 vector 存下标,复杂度 \(O(n)\)。 #include<bits/stdc++.h> using namespace std; int t,n,m,a[1000005],flag,tim; vector<
阅读全文
摘要:here. C 考虑最终合法的字符串,形如: \[1,2,2,2,\cdots,2,2,2,3 \]然后考虑对于每对 \(1,3\) 对答案的贡献是,它们中间 \(2\) 的个数,记为 \(cnt\),\(2^{cnt}-1\)。 然后考虑从左往右扫,每次遇到 \(1\) 往 ds 里加入一个 \(
阅读全文
摘要:here. E 考虑对 F 先删边再加边。 删边时,用并查集维护出 G 的联通性,如果 F 中的边 \((x,y)\) 在 G 中不联通,就把它删去。 加边时,用并查集维护出 F 的联通性,如果 G 中的边 \((x,y)\) 在 F 中不连通,就在 F 中加边 \((x,y)\)。 不难发现这样贪
阅读全文
摘要:here. 感觉出的都很不错,做起来很舒服。 C 考虑直接 DP。 设 \(f_i,0/1\) 表示考虑前 \(i\) 个人,第 \(i\) 个人是否说谎的方案数。 枚举第 \(i\) 个人是否说谎,得到转移: \[f_{i,0}=f_{i-1,1} \]\[f_{i,1}=f_{i-1,0}[a_
阅读全文
摘要:here. C 考虑这样一种构造: \[1,2,3,\cdots,n-1,n,1,2,3,\cdots,n-1,n \]或者是: \[1,2,3,\cdots,n-2,n-1,n,1,2,3,\cdots,n-2,n-1 \]这里的 \(n\) 不是题面中的 \(n\)。 但是经检查,这种构造会在
阅读全文
摘要:here. 困难场。 C 考虑贪心,我们在一个前缀只取正数,后缀只取负数,这样取一定可以取到最大值。 扫一遍记录前缀正数和和后缀负数和,枚举分割点即可。 复杂度 \(O(n)\)。 #include<bits/stdc++.h> #define int long long using namespa
阅读全文
摘要:here. \(perf:2017\) 啥啊。 越来越过分了是吧。 我现在不仅怀疑参赛者有人机,还怀疑出题者是人机。 D 以最中间的 \(1\) 作为基准点,两边向这个 \(1\) 靠拢即可。 复杂度 \(O(n)\)。 #include<bits/stdc++.h> #define int lon
阅读全文
摘要:here 困难场。 C 重要观察:只有每行的后缀 \(1\) 有用。 考虑归纳证明,设 \(n\) 为一行后缀 \(1\) 的个数。 对于 \(n=1\) 的情况,想要让 \(mex\) 值为 \(2\),必须选择这个后缀,否则其他后缀的和 一定 \(>1\); 对于 \(n>1\) 的情况,在之前
阅读全文
摘要:here. here. 感觉是 good round。 2C 唯一没做明白的题。 经过若干手玩,发现在最优次数内达到目标,加的值是固定的。 也就是说,如果我加了 \(9\),想要达到目标,以后不可能再加 \(99\)。 又因为感觉答案上界很小,所以直接暴搜即可。 复杂度 \(O(能过)\)。 #in
阅读全文

浙公网安备 33010602011771号