CF1932D Card Games 题解
思路
赛时没想出来贪心,于是写了爆搜但一直 WA,赛后发现是 dfs 函数忘记回溯了。
时间复杂度看起来是假的,但是跑得很快,推测是一堆卡牌里面能够进行匹配的数量实际上并没有那么多,实测最慢的点才 15ms,提交记录:link
爆搜的方法就是先用 (2n)2(2n)^2(2n)2 的时间预处理每两张牌是否能够匹配(匹配条件即两张牌中有且只有一张能赢过对方),然后再从第一张牌开始搜:对于每一张牌枚举和它匹配的另一张牌,标记之后接着搜下一张,搜不到就回溯继续搜,终止条件就是搜到第 2n2n2n 张牌时 return 1 以及无解时 return 0。
代码
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667constexpr int N = 40;char trump;int n;struct card{ char suit;int rank; inline void ...
AtCoder Beginner Contest 340 E - Mancala 2 题解
题意
有编号为 000 到 N−1N-1N−1 的 NNN 个盒子。最初,盒子 iii 里有 AiA_iAi 个球。
高桥君将按顺序对 i=1,2,…,Mi=1,2,\ldots,Mi=1,2,…,M 执行以下操作:
将一个变量 CCC 设置为 000。
从盒子 BiB_iBi 中取出所有球并拿在手里。
当手里至少还有一个球时,重复以下过程:
将 CCC 的值增加 111。
将手里的一个球放入盒子 (Bi+C) mod N(B_i+C) \bmod N(Bi+C)modN 中。
在完成所有操作后,确定每个盒子中的球数。
思路
题面中的操作可以被转化为以下步骤:
把位置 iii 的值归零;
将整个序列的值增加 ⌊AiN⌋\lfloor\frac{A_i}{N}\rfloor⌊NAi⌋;
将 (i,min(i+Aimod N,N)](i,\min(i+A_i\mod N,N)](i,min(i+AimodN,N)] 的值增加 111;
如果 i+Aimod N>Ni+A_i\mod N>Ni+AimodN>N,再将 [1,i+Aimod N− ...
AtCoder Beginner Contest 340 D - Super Takahashi Bros. 题解
题意
有一个包含 NNN 个关卡的游戏。起初,只有第 111 个关卡可以游玩。
在每个可以被游玩的关卡 iii 中,你可以进行以下两种操作:
花费 AiA_iAi 的时间通关,并解锁关卡 i+1i+1i+1。
花费 BiB_iBi 的时间通关,并解锁关卡 XiX_iXi。
输出解锁关卡 NNN 所需的最短时间。
思路
看到这种题首先想到的当然是 dp,但对于这道题来说 dp 的转移顺序并不好确定,于是交了一发记忆化搜索却 WA 了。
这种情况下我们可以考虑建图,把关卡编号看成点,解锁关卡花费的时间看成边,然后我们就只需要对每个点 iii 到点 i+1i+1i+1 连一条长度为 AiA_iAi 的边,到点 XiX_iXi 连一条长度为 BiB_iBi 的边,直接以点 111 为起点跑最短路即可,最终到点 NNN 的距离就是答案。
代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263co ...
USACO 2024 January Contest Bronze 铜组题解
前言
感觉这次难度完全没有去年 12 月的铜组高,那个时候刚学三个月看到那几个题直接爆零,这次直接在研学路上用手机 ak 了。。
T1 - Majority Opinion
题意
给定一个长度为 NNN 的序列 hhh,每次操作可以选择一个 hhh 的连续子串,并且将其中的元素全部修改成子串中出现次数最多且超过其长度一半的元素,输出在经过若干次操作后,可以让哪些元素 hih_ihi 成为序列中唯一一种元素。
思路
看到 NNN 的数据范围是 2×1052\times 10^52×105,我们首先思考 O(N)\mathcal O(N)O(N) 的算法。
很容易想到,序列 hhh 中存在三个元素,其中有两个相同的 hih_ihi(即序列中存在两个距离相隔不超过一个元素的 hih_ihi) 是 hih_ihi 满足题面要求的充分条件,因为我们可以先把这三个元素全部修改为 hih_ihi,然后就可以一点点将 hih_ihi 扩展到整个 hhh 序列里。
以下是充要条件的证明:
做法证明
假设 hhh 中距离相隔最短的两个 hih_ihi 之间间隔为两个元素或以上。
那么一个包 ...
AtCoder Beginner Contest 339 - E Smooth Subsequence 题解
题意
给定一个长度为 NNN 的序列 AAA 和整数 DDD,求出序列 AAA 中满足任意两个相邻元素之差的绝对值都不小于 DDD 的子串的最大长度。
数据范围
1≤N≤5×1051\leq N \leq 5\times10^51≤N≤5×105
0≤D≤5×1050\leq D \leq 5\times10^50≤D≤5×105
1≤Ai≤5×1051\leq A_i \leq 5\times10^51≤Ai≤5×105
所有输入数据都是整数。
思路
显然是一道 dp 题。
状态设计&转移
用 fif_ifi 代表以 aia_iai 为结尾的 AAA 的满足要求的子串中的最大长度,则我们只要找一个符合要求的 jjj 并把以 aja_jaj 为结尾的最长子串接在 aia_iai 之前即可,于是可以得到以下状态转移方程:
fi=max{fj}+1 (j<i,∣ai−aj∣≤D)f_i=\max\{f_j\}+1 \ (j<i,|a_i-a_j|\leq D)fi=max{fj}+1 (j<i,∣ai−aj∣≤D)
但从 111 到 ...
AtCoder Beginner Contest 338 C Leftover Recipes 题解
前言
场上刚开始还天真的以为是个爆搜或者奇怪的背包,浪费了好久。。
思路
看到这个题我们首先想到的一定是暴力 dfs 枚举做菜品 a 还是菜品 b,但复杂度为 O(2ans)\mathcal O(2^{ans})O(2ans),显然无法通过本题。于是我们来思考一下贪心做法。
实际上,这道题的题意可以简化成 nnn 个不等式,设我们最后做了 xxx 道菜品 a,yyy 道菜品 b,就可以表示成如下形式:
a1x+b1y≤q2,a2x+b2y≤q2,⋯ ,anx+bny≤qna_1x+b_1y\leq q_2,a_2x+b_2y\leq q_2,\cdots,a_nx+b_ny\leq q_na1x+b1y≤q2,a2x+b2y≤q2,⋯,anx+bny≤qn
并且注意到题意里 a,b,qa,b,qa,b,q 的取值范围都不超过 10610^6106,于是我们可以考虑枚举当前的 xxx 或 yyy(这里选择枚举 yyy),对不等式做变形,得到如下式子:
x≤⌊qi−biyiai⌋(1≤i≤n,biyi≤qi)x\leq \lfloor \frac{q_i-b_iy ...
期末游寄
生活就像流汗黄豆。成绩就像流汗黄豆。OI就像流汗黄豆。全世界都是流汗黄豆。流汗黄豆。
生活就像流汗黄豆。成绩就像流汗黄豆。OI就像流汗黄豆。全世界都是流汗黄豆。流汗黄豆。
生活就像流汗黄豆。成绩就像流汗黄豆。OI就像流汗黄豆。全世界都是流汗黄豆。流汗黄豆。
生活就像流汗黄豆。成绩就像流汗黄豆。OI就像流汗黄豆。全世界都是流汗黄豆。流汗黄豆。
生活就像流汗黄豆。成绩就像流汗黄豆。OI就像流汗黄豆。全世界都是流汗黄豆。流汗黄豆。
Codeforces / AtCoder 刷题记录 since 2023.12
日常训练模式已经改为 Misaka’s Daily,因此本页面已经弃用。原内容如下。
从 2024/1/26 开始记录每一道题的罚时。
评分标准:1-10:
1表示代码照着题解打的
5以下代表思路主要由题解启发
7以下代表思路细节参考了题解
8代表参考了讨论区或者下载了数据
9代表看了算法标签
10表示完全独立完成
距离 NOIp 2024 还有\text{距离\ NOIp\ 2024\ 还有}
距离 NOIp 2024 还有
Codeforces
*难度未定:
*[1300,1500]:
CF1914E *1400 9\color{green}99
CF1850F *1300 10\color{green}1010
CF1913C *1300 10\color{green}1010
CF1907D *1400 9\color{green}99
CF1915F *1500 10\color{green}1010
CF1916C *1200 5\color{orange}55
CF1922C *1300 10\color{green}1010 (−2\color{red ...
AtCoder Beginner Contest 335 C - Loong Tracking 题解
前言
一眼题没场切,我是普及 3= 小飞屋,罚自己写篇题解。
题意
平面直角坐标系上有 NNN 个点,每个点 iii 的初始坐标为 (i,0)(i,0)(i,0)。
现在进行 QQQ 次操作:
1 C 代表把编号为 111 的点向方向 CCC 移动一个单位长度(R 代表 xxx 轴正方向,L 代表 xxx 轴负方向,U 代表 yyy 轴正方向,D 代表 yyy 轴负方向),同时对于每个编号大于 111 的点 iii,将点 iii 移动到点 i−1i-1i−1原先的位置;
2 x 代表查询编号为 xxx 的点当前的坐标。
思路
方法 111:O(NQ)\mathcal{O}(NQ)O(NQ),暴力更新坐标
对于每次操作 1 从点 111 开始暴力更新每个点 iii 的坐标即可。
方法 222:O(Nk)\mathcal{O}(Nk)O(Nk)(kkk 代表操作 1 的次数),暴力递推
我们可以用一个二维数组 f1[N][2]f1[N][2]f1[N][2] 记录点 111 在每一次操作 1 后的坐标,初始值 f1[0]={1,0}f1[0] = \{1,0\}f1[0] ...










