BUCTOJ
从入门到夺门而出33
这个作者很懒,什么都没留下…
展开
-
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 · 188 阅读 · 0 评论 -
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 · 239 阅读 · 0 评论 -
2021-2022-2 ACM集训队每周程序设计竞赛(12) - 问题 D: 衔尾之蚯蚓 - 题解
题意:从不大于 NNN 的正整数中取出两个数 AAA 和 BBB。当 AAA 和 BBB以 101010 为基数,并且没有前导零时,如果 AAA 的最后一位数字等于 BBB 的第一位数字,AAA 的第一位数字等于 BBB 的最后一位数字。请计算合法数对的数量。思路:这道题我看了一些人的代码,可能是有些想复杂了。题意是所有符合条件的数对,而条件相当于中的两个数,其实只需要关注它们的第一位和最后一位,然后就有些人开始讨论中间应该怎样去填,是否会超 NNN 之类的……其实大可不易,因为一共只有 NN原创 2022-05-20 17:01:48 · 291 阅读 · 0 评论 -
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 · 427 阅读 · 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 · 274 阅读 · 2 评论 -
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 · 238 阅读 · 0 评论 -
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 · 466 阅读 · 0 评论 -
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 · 449 阅读 · 0 评论 -
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 · 425 阅读 · 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 · 435 阅读 · 0 评论 -
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 · 273 阅读 · 0 评论 -
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 · 189 阅读 · 0 评论 -
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 · 700 阅读 · 0 评论 -
2021-2022-2 ACM集训队每周程序设计竞赛(1) - 问题 E: 祖玛的复仇 - 题解
题意:在长度为 nnn 的原字符串 SSS 找到中出现两次或两次以上的、相互之间没有重叠的连续子字符串的最大长度。思路:这道题的解法其实挺多的,大家可以之后多想下,我这里就只写一个最容易想到的吧。首先说下暴力做法,那就是先双指针寻找两个连续子串的开始位置,然后再逐个比较字符是否相同……这一套下来,差不多快 n3n^{3}n3 了,不 TLETLETLE 才怪。题面说要求 lenlenlen 的最大长度,有些眼熟,是不是可以考虑一下二分呢?确定了连续子串的长度之后,接下来就是双指针了,这里的时间也原创 2022-03-04 17:05:38 · 599 阅读 · 3 评论 -
2021-2022-2 ACM集训队每周程序设计竞赛(1) - 问题 D: 点外卖 - 题解
题意:有 nnn 道菜,mmm 张券,券的作用是将任意一道菜的价格变为原来的一半(下取整),且允许叠加使用,问最少花费多少钱。思路:每一张券最优的使用方法一定是对当前价格最高的菜使用,那么这道题的难点就在于动态查找数组最大值。那么优先队列(priority_queuepriority\_queuepriority_queue)可以完美解决这一问题,熟练运用各类 STLSTLSTL 容器是必须掌握的一项技能。如果你还没有了解过的话,点击这里。其实这道题还能再卡一部分人的,但是数据有些难造,罢了。原创 2022-03-04 17:05:19 · 671 阅读 · 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 · 605 阅读 · 0 评论 -
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 · 188 阅读 · 0 评论 -
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 · 356 阅读 · 0 评论 -
BUCT2021年ACM竞赛班训练(四)全题解(0x3f3f3f3f)
本人负责的是c题和d题,如果还有什么问题可以私聊,望指正A双端队列B-平方斐波那契题意:给你个数n,回答第n个斐波那契数是不是平方数斐波那契数定义为f1=1,f2=1,f3=f1+f2…fn=fn-1+fn-2思路:有一个很明显的性质是只有1和144是平方数,其余都不是平方数#include<bits/stdc++.h>using namespace std;int main(){ long long n ; cin >> n ; if(转载 2021-04-17 12:38:23 · 335 阅读 · 0 评论 -
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 · 642 阅读 · 0 评论 -
2021-2022-1 ACM集训队每周程序设计竞赛(8) - 问题E :训练法不对 - 题解
题意:给出一个长度为 nnn 的序列,找出其最长上升子序列的最小个数(能做到这道题的应该不用我补充概念吧,实在不行 面向CSDN编程 )思路:开一个数组、vectorvectorvector 或 multisetmultisetmultiset 都可以,存放每一个已经确定下来的上升子序列的最后一个数的值然后对于遍历到的每一个数 xxx,从之前确定所有的上升子序列的最后一个数的值(即容器中所存放的元素)中找到小于它的最大值j=−−lower_bound(x)j=--lower\_bound(x)j=−原创 2021-11-19 17:28:42 · 970 阅读 · 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 · 364 阅读 · 0 评论 -
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 · 731 阅读 · 0 评论 -
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 · 273 阅读 · 0 评论 -
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 · 191 阅读 · 0 评论 -
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 · 219 阅读 · 0 评论 -
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 · 278 阅读 · 0 评论 -
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 · 490 阅读 · 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 · 236 阅读 · 2 评论 -
2021-2022-1 ACM集训队每周程序设计竞赛(4) - 问题 F:摆字方阵: - 题解
呃呃呃原创 2021-10-15 17:00:17 · 333 阅读 · 0 评论 -
2021-2022-1 ACM集训队每周程序设计竞赛(4) - 问题 A:异或&加法: - 题解
题意:思路:时间复杂度:O(n)O(n)O(n)#include <bits/stdc++.h>using namespace std;const int mod = 1e9 + 7;int main() { string n; cin >> n; long long res = 1, cnt = 0; for (long long i = 0; i < n.size(); i++) { cnt = (cnt * 3) % mod; if (.原创 2021-10-15 16:59:57 · 665 阅读 · 0 评论 -
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 · 451 阅读 · 0 评论