- 博客(49)
- 收藏
- 关注
原创 CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!) A~D 题解
CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!) A~D2 题解
2022-11-07 09:30:52
543
原创 Codeforces Round #830 (Div. 2) A~D2 题解
Codeforces Round #830 (Div. 2) A-D2 题解
2022-10-24 19:20:01
941
原创 2021-2022-2 ACM集训队每周程序设计竞赛(12) - 问题 A: ACM赛制 - 题解
题意:给你两个数,询问其是否相同思路:签到题,没什么好说的。时间复杂度:O(1)O(1)O(1)#include <bits/stdc++.h>using namespace std;int n, m;int main() { cin >> n >> m; if (n == m) puts("Yes"); else puts("No"); return 0;}感兴趣的同学可以自行了解下ACM、OI、IOI赛制的不同点。..
2022-05-20 17:02:30
261
原创 2021-2022-2 ACM集训队每周程序设计竞赛(12) - 问题 B: 比大小 - 题解
题意:给你两个正整数 a,b(1≤a,b≤9)a,b(1\leq a,b\leq 9)a,b(1≤a,b≤9),问长度为 aaa、由 bbb 组成的字符串和长度为 bbb、由 aaa 组成的字符串,哪一个的字典序较小。思路:这里只需要了解字典序比较方式即可,大小关系取决于两个字符串从左到右第一个不同字符的 ASCIIASCIIASCII 值的大小关系。时间复杂度:O(n)O(n)O(n)#include <bits/stdc++.h>using namespace std;int
2022-05-20 17:02:23
199
原创 2021-2022-2 ACM集训队每周程序设计竞赛(12) - 问题 C: 天上地下,唯我独尊 - 题解
题意:给你一个长度为 nnn 的正整数数组 SSS,按照下标从小到大开始遍历,判断第 iii 个元素是否为 S[1]S[1]S[1] ~ S[i]S[i ]S[i] 中最大的。计算符合条件的下标个数。思路:我们可以保存前 i−1i-1i−1 个元素的最大值,然后与当前第 iii 个元素进行比较,并更新当前最大值。时间复杂度:O(n)O(n)O(n)#include <bits/stdc++.h>using namespace std;int n;int main() { ci
2022-05-20 17:02:00
281
原创 2021-2022-2 ACM集训队每周程序设计竞赛(12) - 问题 D: 衔尾之蚯蚓 - 题解
题意:从不大于 NNN 的正整数中取出两个数 AAA 和 BBB。当 AAA 和 BBB以 101010 为基数,并且没有前导零时,如果 AAA 的最后一位数字等于 BBB 的第一位数字,AAA 的第一位数字等于 BBB 的最后一位数字。请计算合法数对的数量。思路:这道题我看了一些人的代码,可能是有些想复杂了。题意是所有符合条件的数对,而条件相当于中的两个数,其实只需要关注它们的第一位和最后一位,然后就有些人开始讨论中间应该怎样去填,是否会超 NNN 之类的……其实大可不易,因为一共只有 NN
2022-05-20 17:01:48
318
原创 2021-2022-2 ACM集训队每周程序设计竞赛(12) - 问题 E: 有一点大的最小公倍数 - 题解
题意:给你 nnn 个正整数 SSS,需要你求出这 nnn 个数的最小公倍数 resresres,然后再求 ∑i=1nresS[i]%(109+7)\sum\limits_{i=1}^{n}{\frac{res}{S[i]}}\%(10^{9}+7)i=1∑nS[i]res%(109+7) 的值即可。思路:整体题意还是比较清楚的,只需要求出 nnn 个数的最小公倍数,然后运用一些逆元的思想即可。涉及到模数的运算,就肯定不能直接上 gcdgcdgcd 了,需要将这 nnn 个数都分解质因数,然后再
2022-05-20 17:01:33
462
1
原创 2021-2022-2 ACM集训队每周程序设计竞赛(12) - 问题 F: 树上路径染色 - 题解
题意:一颗 nnn 个节点、n−1n-1n−1 条无向边的树,可以将树上的边任意染成黑色或者是白色。给出 mmm 对点 u、vu、vu、v,对于每一对点,都要求从 uuu 到 vvv 的通路上,至少有一条黑边。求符合 mmm 对点的树的个数。思路:首先,所有的染色方案为 a=2n−1a=2^{n-1}a=2n−1,但是所有合法的方案很难求,所以我们换个角度,求所有不合法的方案 bbb,最终答案就是 a−ba-ba−b。假设不符合第 iii 对点的情况为 SiS_iSi ,那么 b=⋃i=1mS
2022-05-20 17:01:15
292
2
原创 2021-2022-2 ACM集训队每周程序设计竞赛(9) - 问题 F: 乔斯达家族世世代代都是绅士 - 题解
题意:一个拥有 nnn 个点,n−1n-1n−1 条边的无向联通图。现在有两个特殊点 u,vu,vu,v,uuu 想尽可能的远离 vvv,而vvv 想尽可能的接近 uuu。现有如下流程:如果 u,vu,vu,v在一个节点上,那么结束。否则 uuu 可以移动到与当前节点相邻的任意一个其他节点。如果 u,vu,vu,v在一个节点上,那么结束。否则 vvv 可以移动到与当前节点相邻的任意一个其他节点。回到步骤1。两个点均按最优解进行,请计算出结束前 vvv 所进行的操作数。思路:这道题的结论…
2022-04-29 21:58:00
490
原创 2021-2022-2 ACM集训队每周程序设计竞赛(9) - 问题 E: 大聪明虹村亿泰 - 题解
题意:给出一个非负整数 nnn ,求:f(n)={n∗f(n−2)n≥210≤n≤2f(n)=\begin{cases}n*f(n-2)& {n\geq 2}\\1& {0\leq n\leq 2}\end{cases}f(n)={n∗f(n−2)1n≥20≤n≤2后缀零个数。思路:首先可以想到,如果 nnn 是一个奇数,由于 f(n)f(n)f(n) 的因数中没有 222 ,也就是说其后缀零的个数必定为零;当 nnn 是一个偶数时,因子 222 的个数远远多于 555
2022-04-29 21:11:54
463
原创 2021-2022-2 ACM集训队每周程序设计竞赛(9) - 问题 D: 时间要开始加速了 - 题解
题意:从原数组中提出一些数,使得剩余的 kkk 个数形成一个从 111 到 kkk 的升序排列。如果无论怎样都无法凑出长度 ≥1\geq 1≥1的序列的话,就输出 −1-1−1。思路:其实这道题不用想太多,只需要从左到右,直接贪心从 111 开始取即可。显而易见,只有之前已经取过 1……i−11……i-11……i−1 时,之后的 iii 才有用。如果原数列中没有出现过 111 的话,自然而然地,无法形成一个从 111 开始递增的序列,所以输出 −1-1−1 即可。时间复杂度:O(n)O(n)O
2022-04-29 21:03:16
450
1
原创 2021-2022-2 ACM集训队每周程序设计竞赛(9) - 问题 C: 添柴少年 - 题解
题意:给出两个数,求两个数的最小公倍数。思路:两个数的最小公倍数等于两者之积除以两者的最大公约数。而最大公约数,你可以用 KaTeX parse error: Expected group after '_' at position 1: _̲_gcd,也可以自己写一个辗转相除法,亦或者更像减损术,不过那个就有些……另外,可能有些人没有注意到这两个正整数的范围,直接将其相乘会爆 intintint,所以必须开 longlonglong longlonglong。时间复杂度:O(1)O(1)O(1
2022-04-29 20:42:01
461
原创 2021-2022-2 ACM集训队每周程序设计竞赛(9) - 问题B : 双刀流银色战车 - 题解
题意:给出两个字符串,用左-右-左-右……的顺序构成一个新的字符串。思路:你可以用 stringstringstring 真的构建一个字符串,也可以直接一左一右输出,也可以奇数输出左,偶数输出右。反正,快乐就好。时间复杂度:O(n)O(n)O(n)#include <bits/stdc++.h>using namespace std;#define int long longsigned main() { int n; cin>>n; string a,
2022-04-29 20:35:23
318
原创 2021-2022-2 ACM集训队每周程序设计竞赛(9) - 问题 A: 败者食尘 - 题解
题意:给出1,2,31,2,31,2,3中的两个,问第三个。思路:你可以用 if−elseif-elseif−else 嵌套,可以用桶标记,可以……反正水题一个。时间复杂度:O(1)O(1)O(1)#include <bits/stdc++.h>using namespace std;#define int long longbool st[4];signed main() { int a,b; cin>>a>>b; st[a]=true,st
2022-04-29 20:31:33
207
原创 Codeforces Global Round 20 A~F1题解
太困,实在撑不住,F2早上起来再补罢,抱歉了。A. Log Chopping题意:给了一堆长度不一的木头,问能够剁几刀。思路:直接计算即可。时间复杂度:O(1)O(1)O(1)int n;signed main() { cf{ sf(n); int res = 0; for (int i = 1, x; i <= n; i++) sf(x), res += x - 1; if (res & 1) puts("errorgorn"); el
2022-04-24 04:45:07
1153
原创 Educational Codeforces Round 127 (Rated for Div. 2) A~E 题解
A. String Building题意:问是否可以用 aa、aaa、bb、bbbaa、aaa、bb、bbbaa、aaa、bb、bbb 拼成所给字符串。思路:将原字符串分成连续的 a、ba、ba、b 构成的子串,看是否有长度为 111 的即可。时间复杂度:O(n)O(n)O(n)signed main() { cf{ string res; cin >> res; int a = 0, b = 0; bool st = true; for (auto i :
2022-04-23 01:44:51
1560
11
原创 2021-2022-2 ACM集训队每周程序设计竞赛(1) - 问题 F: 异或的和 - 题解
题意:将所给的 nnn 个数分为两个非空的集合 AAA 和 BBB,要求满足:AAA中所有元素的异或值 +++ BBB中所有元素的异或值,最后得到的和的值最大。思路:一堆数的异或值,不难想到线性基,难点是要怎么用。第一个比较难想的点是,我们需要先求出来所有数的异或和 sumsumsum,或者换句话说,我们需要知道这 nnn 个数转换到个二进制位之后,每一个二进制位 111 的个数。假设,在某一个二进制位,(sum>>i)&1(sum>>i )\&1(sum&
2022-03-04 17:05:58
734
原创 2021-2022-2 ACM集训队每周程序设计竞赛(1) - 问题 E: 祖玛的复仇 - 题解
题意:在长度为 nnn 的原字符串 SSS 找到中出现两次或两次以上的、相互之间没有重叠的连续子字符串的最大长度。思路:这道题的解法其实挺多的,大家可以之后多想下,我这里就只写一个最容易想到的吧。首先说下暴力做法,那就是先双指针寻找两个连续子串的开始位置,然后再逐个比较字符是否相同……这一套下来,差不多快 n3n^{3}n3 了,不 TLETLETLE 才怪。题面说要求 lenlenlen 的最大长度,有些眼熟,是不是可以考虑一下二分呢?确定了连续子串的长度之后,接下来就是双指针了,这里的时间也
2022-03-04 17:05:38
664
3
原创 2021-2022-2 ACM集训队每周程序设计竞赛(1) - 问题 D: 点外卖 - 题解
题意:有 nnn 道菜,mmm 张券,券的作用是将任意一道菜的价格变为原来的一半(下取整),且允许叠加使用,问最少花费多少钱。思路:每一张券最优的使用方法一定是对当前价格最高的菜使用,那么这道题的难点就在于动态查找数组最大值。那么优先队列(priority_queuepriority\_queuepriority_queue)可以完美解决这一问题,熟练运用各类 STLSTLSTL 容器是必须掌握的一项技能。如果你还没有了解过的话,点击这里。其实这道题还能再卡一部分人的,但是数据有些难造,罢了。
2022-03-04 17:05:19
690
2
原创 2021-2022-2 ACM集训队每周程序设计竞赛(1) - 问题 C: 自摸 - 题解
题意:一共有 nnn 个人,每个人的初始点数均为 kkk,之后一共进行 qqq 轮游戏,第 iii 轮时除 aia_{i}ai 之外的其余人点数均建一。请问到最后这 nnn 个人受伤点数是否还大于 000。思路:首先排除暴力,如果直接暴力的话,105∗10510^{5}*10^{5}105∗105 的时间复杂度必然会 TLETLETLE。换个思路想,将每一轮的 “n−1n-1n−1 个人均减一” 改为 “ai加一a_{i}加一ai加一” ,并将所有人的点数均减 qqq 的话,效果与其完全相同。
2022-03-04 17:04:19
621
原创 2021-2022-2 ACM集训队每周程序设计竞赛(1) - 问题 B: 蹩脚两轮车 - 题解
题意:给出一串由U,D,L,RU,D,L,RU,D,L,R构成的字符串,并且制定了一项规则:奇数位上的字符不能为LLL,偶数位上的字符不能为RRR,这里下标默认为从 111 开始。判断字符串是否合法。思路:暴力判断即可。时间复杂度:O(n)O(n)O(n)#include <bits/stdc++.h>using namespace std;int main() { char s[110]; cin >> s + 1; int n = strlen(s + 1
2022-03-04 17:03:46
200
原创 2021-2022-2 ACM集训队每周程序设计竞赛(1) - 问题 A: 排火车 - 题解
题意:SunnySunnySunny之后接CloudyCloudyCloudy,CloudyCloudyCloudy之后接RainyRainyRainy,RainyRainyRainy之后接SunnySunnySunny。思路:无。时间复杂度:O(1)O(1)O(1)#include <bits/stdc++.h>using namespace std;int main() { string res, s[3]; s[0] = "Sunny", s[1] = "Cloudy
2022-03-04 17:03:27
370
原创 Educational Codeforces Round 123 (Rated for Div. 2) A~E 题解
A. Doors and Keys题意:一扇门需要已经得到钥匙才能打开并通过,一共有三扇门与三把与之一一对应的钥匙随机排列,问是否能够顺利打开所有的门。思路:没什么好说的,最多只不过是做法不一样罢了。时间复杂度:O(n)O(n)O(n)signed main() { cf{ cin >> res; memset(s, 0, sizeof s); bool st = true; for (int i = 0; i < 6; i++) { if (res
2022-02-23 03:20:36
168
原创 Codeforces Round #770 (Div. 2) D. Finding Zero题解
D. Finding Zero题意:这是一道交互题。有一个由一个 000 和 n−1n-1n−1 个正整数构成的一个随机数组,按下标记为 a1……ana_{1}……a_{n}a1……an。现如今有一种询问方式,对于每次询问,可选择三个互不相同的下标 i、j、k(1≤i,j,k≤n)i、j、k(1\leq i,j,k\leq n)i、j、k(1≤i,j,k≤n),然后会返回 max(i,j,k)−min(i,j,k)max(i,j,k)-min(i,j,k)max(i,j,k)−min(i,j,k
2022-02-07 03:34:47
678
原创 Codeforces Round #763 (Div. 2) 【A、B、C、D、E】全题解
纪念第一次非严格意义AKDiv.2题这么少,这不得冲一手A. Robot Cleaner题意:一个 N∗MN*MN∗M 的矩阵,给出机器人的初始位置 (rb,cb)(rb,cb)(rb,cb) 以及目标点的位置 (rd,cd)(rd,cd)(rd,cd),初始机器人的运动方向 (dr,dc)(dr,dc)(dr,dc) 为 (1,1)(1,1)(1,1),如果碰到矩阵的边缘会自动掉头。每次机器人都会清理所在行和列的所有点,问几步之后机器人第一次清理目标点。思路:看这个数据范围,别想啥算法了.
2022-01-05 16:18:05
986
1
原创 Codeforces Round #762 (Div. 3) D. New Year‘s Problem题解(二分&贪心)
D. New Year’s Problem题意:有 nnn 个朋友和 mmm 个商店,每一个商店都有和所有朋友一一对应的 nnn 个礼物,每一个礼物都有一个对应的价值,因此构成了一个 m×nm\times nm×n 矩阵。你可以在任意一家商店中购买任意数量的礼物,但是每个朋友必须收到一份礼物,并且每个朋友只能收一份礼物。你的目标是让所有朋友收到的礼物中价值的最小值最大,即 ans=min{a1,a2……an−1,an}ans=min\{a_{1},a_{2}……a_{n-1},a_{n}\}ans
2021-12-21 11:59:11
778
原创 2021-2022-1 ACM集训队每周程序设计竞赛(8) - 问题F :教练两行泪 - 题解
题意:题面很清晰明了,构造 1∼n1\sim n1∼n 的排列 PPP,求∑i=1n∣Pi−i∣==K\sum_{i=1}^{n}|P_{i}-i|==K∑i=1n∣Pi−i∣==K的排列个数,结果对 19+71^{9}+719+7 取模思路:对,这还是一道dp……dp……dp……咋说呢,这道题就dpdpdp方程的状态表示比较的难想,首先我们先来看一张图:我们先构造两个1∼n1\sim n1∼n的序列,然后构造排列的过程就相当于在两个序列之间连边,左边序列的每个点都只能和右边任意一个点连一条
2021-11-19 17:42:12
658
原创 2021-2022-1 ACM集训队每周程序设计竞赛(8) - 问题E :训练法不对 - 题解
题意:给出一个长度为 nnn 的序列,找出其最长上升子序列的最小个数(能做到这道题的应该不用我补充概念吧,实在不行 面向优快云编程 )思路:开一个数组、vectorvectorvector 或 multisetmultisetmultiset 都可以,存放每一个已经确定下来的上升子序列的最后一个数的值然后对于遍历到的每一个数 xxx,从之前确定所有的上升子序列的最后一个数的值(即容器中所存放的元素)中找到小于它的最大值j=−−lower_bound(x)j=--lower\_bound(x)j=−
2021-11-19 17:28:42
1004
3
原创 2021-2022-1 ACM集训队每周程序设计竞赛(8) - 问题D :一月忘干净 - 题解
题意:给出一个由 {′0′∼′9′、′?′}\{'0'\sim'9'、'?'\}{′0′∼′9′、′?′}构成的字符串,将字符串中的每个 ??? 都用 ′0′∼′9′'0'\sim'9'′0′∼′9′ 代替,然后将得到的整数对 131313 取模,问有多少个构成的整数取余后值为 555思路:一道比较裸的线性dpdpdp,可能有人没有了解过同余定理,那先补充一下:和的取余等于取余的和的取余——(a+b)%mod=(a%mod+b%mod)%mod(a + b) \% mod = (a \% mod
2021-11-19 17:28:13
389
原创 2021-2022-1 ACM集训队每周程序设计竞赛(8) - 问题 C:补题抄题解 - 题解
题意:一共有 nnn 个队员,每个人都有一个内卷值 s[i]s[i]s[i],对于每一个队员,找到除去自己之外剩余 n−1n-1n−1 个人中最大的内卷值思路:做法应该会很多,这里只上一个思路比较简单的方法。第一遍遍历,找到第一个最大值并标记其下标为 jjj,除去 jjj,剩余 n−1n-1n−1 个队员对应的答案都应该是最大值;然后第二次遍历找到次大值,即第 jjj 个队员对应的答案是次大值时间复杂度:O(n)O(n)O(n)#include <bits/stdc++.h>usi
2021-11-19 17:27:59
764
原创 2021-2022-1 ACM集训队每周程序设计竞赛(8) - 问题 B:等于没有比 - 题解
题意:思路:见题意时间复杂度:O(1)O(1)O(1)#include <bits/stdc++.h>using namespace std;int main() { int n; cin >> n; cout << 3 * n *n; return 0;}
2021-11-19 17:27:44
284
原创 2021-2022-1 ACM集训队每周程序设计竞赛(8) - 问题 A:比赛不补题 - 题解
题意:给一个整数nnn,求3∗k23*k^{2}3∗k2的值思路:见题意时间复杂度:O(1)O(1)O(1)#include <bits/stdc++.h>using namespace std;int main() { int n; cin >> n; cout << 3 * n *n; return 0;}
2021-11-19 17:27:32
206
原创 2021-2022-1 ACM集训队每月程序设计竞赛(2)-问题 G: 轮换的复合 - 题解
题意:首先说一下什么是轮换吧,就给出一个P=(a,c,d,e)P=(a,c,d,e)P=(a,c,d,e),那么对应的置换就是(abcdecbdea)\begin{gathered}\begin{pmatrix} a & b & c & d& e \\ c & b & d & e & a \end{pmatrix}\end{gathered}(acbbcddeea)其中 aaa 的下面对应的是 PPP 中 aaa 的下一个
2021-10-30 11:29:31
242
原创 Dev-C++、VSCode、VS断点调试步骤
目录Dev-C++visual studioVSCode一些小技巧假设我们已经完成了一个程序,想要知道这个函数具体的逻辑结构是怎么运行的,或者说一个变量在程序的某个位置被赋予了何值,这时候就需要用到调试功能了——因为大家用的编辑器五花八门,我个人比较熟悉Dev-C++,所以剩下两个我会附上个人感觉还行的两篇讲解。不过调试的基本步骤是大同小异的……吧,使用其他编辑器的同学也可以试着看一下。Dev-C++首先,要对一个已经完成并且已经经过编译的代码进行调试,调试过程中如果修改了代码一定要重新编译再调试
2021-10-22 20:10:30
1731
1
原创 杜教筛学习心得
杜教筛 以及积性函数积性函数如果算术函数fff对任意两个互质(互素)的正整数 ppp 和 qqq ,均有 f(p,q)=f(p)∗f(q)f(p,q)=f(p)*f(q)f(p,q)=f(p)∗f(q),称为积性函数。如果算术函数fff对任意两个正整数 ppp 和 qqq ,均有 f(p,q)=f(p)∗f(q)f(p,q)=f(p)*f(q)f(p,q)=f(p)∗f(q),称为完全积性函数。欧拉函数设n是一个正整数,欧拉函数 ϕ(n)ϕ(n)ϕ(n) 定义为不超过 nnn 且与 nnn 互质
2021-10-20 22:36:22
251
原创 2021-2022-1 ACM集训队每周程序设计竞赛(4) - 问题 B:拔河 - 题解
题意:给你一个长度为 nnn 的整数数组 SSS ,将其按照下标分为两组,S1,S2……SjS_{1} , S_{2}……S_{j}S1,S2……Sj 以及Sj+1,Sj+2……Sn(1≤j<n)S_{j+1} , S_{j+2}……S_{n}(1≤j<n)Sj+1,Sj+2……Sn(1≤j<n)设l=S1+S2……Sj,r=Sj+1+Sj+2……Snl=S_{1} + S_{2}……S_{j},r=S_{j+1} + S_{j+2}……S_{n}l=S1+S2……Sj
2021-10-15 17:01:38
291
原创 2021-2022-1 ACM集训队每周程序设计竞赛(4) - 问题 C:罪恶沼泽 - 题解
题意:思路:时间复杂度:O(n)O(n)O(n)#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10, mod = 1e9 + 7;int n, m;bool st[N];int dp[N];int main() { scanf("%d %d", &n, &m); int x; for (int i = 1; i <= m; i++) { scanf("%d", &
2021-10-15 17:01:20
510
6
原创 2021-2022-1 ACM集训队每周程序设计竞赛(4) - 问题 E:转圈圈 - 题解
题意:三个点和分别链接三个点的三条边,求走过三个点的路程的最小值思路:直接输出三条边中较小的两条边之和即可时间复杂度:O(1)O(1)O(1)#include <bits/stdc++.h>using namespace std;int main() { int a, b, c; scanf("%d %d %d", &a, &b, &c); int res = a + b + c; printf("%d", res - max(a, max(b,
2021-10-15 17:00:42
252
2
原创 2021-2022-1 ACM集训队每周程序设计竞赛(4) - 问题 D:等差数列求和: - 题解
题意:思路:时间复杂度:O(O(O(不会算)))#include <bits/stdc++.h>using namespace std;#define int long long#define VV vector<vector<int> >#define init(x) vector<vector<int>> x(3, vector<int>(3, 0))int L, A, B, mod, ans;//inline
2021-10-15 17:00:25
506
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人