摘要:
思路 思路还是很显然的,简单总结一下思路: 首先,将圆环从点 \(1\) 到 \(2N\) 切开,并将其拉直成一条直线。 在切开状态下,原来的弦变成了直线上的曲线。我们需要判断这些曲线之间是否存在交点。 在切开状态下,曲线之间的交点等价于满足 \(A_i < A_j < B_i < B_j\) 的不 阅读全文
posted @ 2024-07-16 21:12
merlinkkk
阅读(49)
评论(0)
推荐(0)
摘要:
思路 容易发现,如果 \(a_i>b_i\) 则将 \(a_i\) 和 \(b_i\) 交换。 在数轴上标出要交换的四个数的位置若线段 \(a_ib_i\) 和 线段 \(a_jb_j\) 互不相交,此时交换比两条线段处于其他位置时更优。 具体证明这里就不再赘述,其他题解讲的已经很清楚了。 所以只需 阅读全文
posted @ 2024-07-16 21:11
merlinkkk
阅读(48)
评论(0)
推荐(0)
摘要:
思路 通过读题发现,每个数变化当且仅当这个数在集合内。所以不妨设它被添加进来的时间点为 \(L_i\),它被删除的时间点为 \(R_i\),所以它被增加的数量就是这段时间内集合数量之和。所以用一个变量 \(cnt\) 模拟当前集合内有多少个数,前缀和维护即可。具体实现参见代码。 代码 #includ 阅读全文
posted @ 2024-07-16 21:10
merlinkkk
阅读(37)
评论(0)
推荐(0)
摘要:
思路 容易想到是个动态规划。首先设 \(f_i\) 表示字符串前 \(i\) 个字符所组成的字符串的答案。状态定义好了,接下来就是考虑如何转移了。因为由 \(f_i\) 可以得到所有 \(f_j\),其中 \(i+j\le len\),转移方程为 \(f_i=f_j+x\),其中 \(x\) 为 字 阅读全文
posted @ 2024-07-16 21:09
merlinkkk
阅读(34)
评论(0)
推荐(0)
摘要:
思路 我们把关系想成一张图,每次输入就给两个人连一条边。 因为一个人只有两种选择,所以我们在一个联通块内随便找一个点,跑一遍搜索,找出这个联通块内的答案。代码如下。 void dfs(int u,int color) { cnt2++;// cnt2是这个连通块内的总点数 cnt1+=color;/ 阅读全文
posted @ 2024-07-16 21:08
merlinkkk
阅读(120)
评论(0)
推荐(0)
摘要:
思路 这里提供一种暴力做法。方法就是当边数到达一个值过后就不加边了。我取的值是 \(500000\),实际上可以开大一些,只要 \(x \log x\) 不超时就行了。 代码 赛时提交记录 #include <bits/stdc++.h> using namespace std; #define i 阅读全文
posted @ 2024-07-16 21:06
merlinkkk
阅读(15)
评论(0)
推荐(0)
摘要:
题意 在长为 \(n\) 的序列 \(a\) 中 找出 \(k\) 个数,设它们的下表为 $p_1 \(,\)p_2$ 到 \(p_k\),满足这 \(k\) 个数从小到大排列过后是一个公差为 \(1\) 的等差数列。求满足条件的 \(k\) 个数的最大的 \(p\) 减去 最小的 \(p\) 最小 阅读全文
posted @ 2024-07-16 21:05
merlinkkk
阅读(23)
评论(0)
推荐(0)
摘要:
CF1859A题解 思路 考虑一种极端情况,\(b\) 数组内的数全部比 \(a\) 大,这样也无法整除,所以这就是这道题的突破口。我们让 \(b\) 数组内的数全部比 \(a\) 里的大,最方便的实现方法就是把原数组内的最大的数放进 \(b\) 数组,剩下的放进 \(a\) 数组。注意特判无解情况 阅读全文
posted @ 2024-07-16 21:03
merlinkkk
阅读(29)
评论(0)
推荐(0)
摘要:
思路 拿到这道题,第一时间肯定想到是 \(dp\) 题目。 朴素 DP 用 \(dp_i\) 表示序列和为 \(i\) 的序列个数。因为原数组由奇数组成,所以 \(dp\) 只可能由 \(dp_{i-1}\),\(dp_{i-3}\) 等等转移过来,若 \(i\in A\),\(dp_i=0\)。即 阅读全文
posted @ 2024-07-16 21:01
merlinkkk
阅读(25)
评论(0)
推荐(0)

浙公网安备 33010602011771号