比赛&训练
里面是cf等一些日常比赛后的题解和心得
S atur
要变成萤火虫~
展开
-
1003.VC Is All You Need (思维 / 多维SVM问题)(2021“MINIEYE杯”中国大学生算法设计超级联赛5)
传送门题意:问是否始终能找到一个k-1维的空间能将k维空间中的n个点区分开,n个点只有两种颜色选择。思路:仔细分析,但凡n比k-1大2及以上都无法实现,即n-k>1都不满足。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define l.原创 2021-08-15 10:38:58 · 198 阅读 · 0 评论 -
1009.License Plate Recognition(思维 / 线性扫描 / 标记汉字边界)(2021“MINIEYE杯”中国大学生算法设计超级联赛4)
传送门题意: 每次给出一张30*100的矩阵,其中"#"表示车牌字迹部分,"."表示黑色背景。现需要你找到7个字的左右边界。思路:直接一列一列扫描判断边界即可,但是注意有一个坑——第一个汉字像"川"在这种方法下分别会有三个左右边界,于是在输出的时候对应找到汉字真正的左右边界即可。代码实现:#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#...原创 2021-07-29 23:39:38 · 191 阅读 · 0 评论 -
J. Stop Counting (最大平均前缀|后缀) (2021年度训练联盟热身训练赛第三场)
传送门思路:要求找到去除一个数列中间的一个连续片段后剩下数的平均值Max。显然这个Max的最小值为0,我们利用最大平均值前缀和最大平均值后缀处理更新一下即可。C++代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define lo原创 2021-03-29 00:49:16 · 317 阅读 · 0 评论 -
Codeforces G. Maximize the Remaining String (单调栈&字符串子序列) (Round #710 Div.3)
传送门题意:给你一个长度为n的全由小写字母组成的字符串,要求你保持原序列顺序的前提下去重得到字典序最大的子序列。思路:思路其实很清晰,就是在能让大的字符靠前且自身还能在后面出现的情况下先输出较大的字符。赛中代码基本框架没啥问题,但是万万忘了单调栈这个好东西呀!呜呜呜嗝~后面才知道这是个牛客原题,嗐,太垃圾了,人菜还不喜欢刷题,代码如下,具体思路见原题代码注释。C++代码实现:#include<bits/stdc++.h>#define endl '\n'#def原创 2021-03-26 12:50:59 · 229 阅读 · 2 评论 -
Codeforces A. Alexey and Train (Round #707 Div.2)(简单模拟)
传送门题意:有n个车站,每个车站都有个到达时间、出发时间和到该点前的延迟时间。现让你推算按顺序到达第n个车站所需的时间为多少。思路:挺简单一题,就是题意有点点绕。模拟注意一下每次出发的时间最小休息时间(b[i]-a[i])/2上取整的关系处理即可,就是别忘了两点之间本来就需要花费的时间(b[i]-a[i-1])和到达第i个点前还有个另外的延迟时间c[i]。代码实现:import java.util.Scanner;public class Main { public原创 2021-03-21 01:18:25 · 3290 阅读 · 1 评论 -
Codeforces A. Domino on Windowsill (Round 106 Rated for Div.2)(思维)
传送门题意:给你一个n*2的矩阵,第一行的前格是白色,第二行的前格是白色,其余格子都为黑色。现有w颗白棋和b颗黑棋,每颗棋子都是1*2的大小,要求不重叠的放置在相应颜色的空格上,试问能否将两种棋子都放完。思路:简单题,判断一下相应空格数是否比棋子面积小即可。代码实现:import java.util.Scanner;import java.util.*;public class Main { public static void main(String[] ar...原创 2021-03-21 00:51:05 · 225 阅读 · 0 评论 -
Codeforces C. Minimum Grid Path (Round 106 Rated for Div.2) (模拟枚举/前缀(和&最小值))
传送门题意:需要你从从原点(0,0)出发走到平面第一象限中的终点(n,n),你只能向右或向上行走整数步,且过程中最多变换n-1次方向。现在告诉你n段路程分别的平均成本,试找到走到终点的最小消耗。思路:既然最多变换n-1次方向,即我们可以利用完n段线段的成本。于是我们枚举最后一段时在第i次结束(走到终点),注意:这以为这之前 i-1 段路程都是交替变换方向的。对于奇数位置,走到总距离和必须刚好等于n,于是我们找到该奇数位置 i 以及之前的所有奇数位置的最小值,让其走最多的步数,其余的位原创 2021-03-19 12:49:18 · 266 阅读 · 0 评论 -
Codeforces B. Binary Removals (Round 106 Rated for Div.2) (思维/二进制串/模拟排序))
传送门题意:给你一个二进制串,试问是否能够通过删除一些不相邻的字符,以使得二进制串变成非降序串。思路:原理很简单,不用管前面的0,只要满足第一次出现相邻的“11”时,后面不会再出现相邻的“00”即可。代码实现C++:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int原创 2021-03-19 11:53:06 · 293 阅读 · 3 评论 -
Codeforces D. GCD of an Array (map&set&维护多个数的gcd) (Round #705 Div.2)
传送门题意:给你n个数和q次询问,每次询问给出i,x,让你在上乘以x并求出现在所有数的gcd。思路:都知道多数的gcd必定需要质因数分解,但是该题询问q次,如若每次都更改再循环的话必定超时。这个题和2021牛客寒假算法基础集训营4的J题基础有些相似,也想过利用二维数组维护每个数的每个质因子的出现次数(用动态map)和最小次方数(用动态set方便取最小数和增删操作)。但是考虑到时间空间的复杂度一直没有实现代码,赛后参考大佬博客才将代码实现,具体思路如下图和代码注释:代码实现:原创 2021-03-08 15:01:01 · 201 阅读 · 0 评论 -
Codeforces C. K-beautiful Strings (字符串反向贪心枚举) (Round #705 Div.2)
传送门题意: 给你一个长度为n的字符串s,要求你找到比s大的最小长度为n的字符串c,且必须满足c中每个字符出现的次数都能整除k,若找不到合法的字符串输出"-1"。思路:参考官方题解代码和大佬思路解析,细节见代码注释。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int原创 2021-03-07 15:40:05 · 305 阅读 · 0 评论 -
Codeforces A. Anti-knapsack (思维) (Round #705 Div.2)
传送门题意:让你在1~n中找到尽量多的数,使得其任意几个数的和不等于k。思路:最开始想得很复杂,以为还什么dp枚举下,后面仔细想想就觉得简单了。既然是任意数的和不等于k,那我们让任意两个数的和都大于k,便不会等于了,且得到的数也最多了。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii p原创 2021-03-07 10:45:22 · 402 阅读 · 0 评论 -
Codeforces B.Planet Lapituletti (模拟时间&镜像)(Round #705 Div.2)
传送门题意: 星球上的时间制度是每天h小时,每小时m分钟。告诉你现在的时间,需要你找到以后第一个镜像时间——指镜像翻转过后是正确的时间,例如05:11 -> 11:20是个正确时间。思路:n<=100组数据,每组的h,m都在100以内,可以直接暴力枚举。①:首先判断其能够镜像翻转,即只含有0,1,2,5,8这几个数字。②:判断其镜像翻转后的时间hh:mm是正确的(注意2和5的转换),即hh<h&&mm<m(其他的都不行,俺就是在这里错了呜呜)。原创 2021-03-07 10:33:09 · 462 阅读 · 0 评论 -
Codeforces B. Nezzar and Lucky Number (#698 Div.2) (思维 / 数学 / 构造)
传送门题意: 有 n 个数字,试判断每个数是否是美好的数字。美好的数字——正好由多个(或一个)含 k (某些位上的数为k)的数组成。思路: *经过推算,只要是大于等于 k*10 的数都是美好的数字。 * 而对于 k*10 以内的数,将其分成多个 k ,再看余数是否能和得到的几个 k 合成整十或整百之类的数即可。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#defin...原创 2021-02-03 13:00:24 · 135 阅读 · 0 评论 -
Codeforces D. Nezzar and Board (#698 Div.2) (数学 / 裴蜀定理&gcd)
传送门题意: 有 n 个不同的整数,每次操作选两个数 x 与 y ,新增一个数为 x*2-y; 试问是否能在经过多次操作后得到目标数字 k?思路:俺也不会!呜呜呜~ 俺好菜! 俺就是数学垃圾~观膜大佬博客! 避免后期大佬博客丢失,咱先截个图呗~代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define p原创 2021-02-03 11:58:19 · 141 阅读 · 0 评论 -
Codeforces A. K-divisible Sum (Round 103 Rated for Div.2) (构造 / 水题 / 数学)
传送门题意: 构造一个含有 n 个数的数组,使得该数组的和能够正好整除 n ,且其 max 最小。思路:当 n < k 的时候,max的最小值就是 k 均摊成 n 份的数 k/n + bool(k%n)(是否还有余数)。当 n > k 时,找到最小的大于 n 的 k 的倍数,能正常 k 的倍数就一定能整除 k ,后面的操作与 n<k 是一样。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null原创 2021-02-03 11:39:00 · 184 阅读 · 0 评论 -
Codeforces B. Inflation (Round 103 Rated for Div.2) (思维 / 数学)
传送门题意: 给出 n 个数排成一排,要求你对其中的数进行增加,使得每个数占其左侧所有数(前缀和,不包括它本身)的 k% 以下。求得最小的修改数量。思路:既然是前缀和的占比,并且第一个是 a[1] 没有前缀和,那么我们把所有增加量都放在 a[1] 即可。从左往右遍历,找到不符合条件的数,并用其增加量来更新答案取最大值就好。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll lon原创 2021-02-03 10:52:08 · 245 阅读 · 4 评论 -
Codeforces D. Journey (Round 103 Rated for Div.2) (思维 / 模拟 / 暴力扫)
传送门题意: 有一排 0 到 n 的n+1个城市,现给出期间的 n 条道路方向,s[i] 表示第 i 个城市与第 i-1 个城市之间的道路。游客从一个城市向相邻的城市移动后,所有道路都会翻转方向,且每天游客都必须选择一条道路移动。现让你求出以没个城市为起点,都能最多经过多少个不同的城市。思路:要连续通行的道路必须是 "…LRLRLRLRL…"这样交替出现的。往左再往右是毫无意义的,因为经过偶数次翻转后的道路又回到了最初的状态。若要能向左通行,那么当前道路必须是 ‘L’,若要能向右通行, 那么下原创 2021-02-03 10:35:03 · 242 阅读 · 0 评论 -
Codeforces E. Advertising Agency (#697 Div.3) (思维 / 数学<组合数>)
传送门题意: 给出 n 个数,求找出 k 个数的方法,满足这 k 个数的和最大。思路:先对数组进行降序排序。显然对答案有贡献的是出现多次但又有一部分不在k的数,比如样例中的1有两个,但是我们之选1个,因此答案才为2。 (组合数部分复习之前博客)代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii原创 2021-02-02 16:18:02 · 170 阅读 · 0 评论 -
Codeforces A. Odd Divisor (#697 Div.3) (思维 / 数学)
传送门题意: 如果数 n 能够正好被一个奇数整除就输出 “YES”,换句话说含有奇数因子(1除外)的数符合条件。思路: 搜先我们知道,奇数本身就是符合条件的;而对于偶数来说,必定是 奇数 * 偶数 == 它本身,所以我们枚举这个偶数看是否可以得到奇数即可(或者该数一直除以2)。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long lon原创 2021-02-02 15:17:22 · 217 阅读 · 0 评论 -
Codeforces B. New Year‘s Number (#697 Div.3) (思维 / 水题)
传送门题意: 给你一个数 n ,试问 n 是否可以由 2020 和2021 的任一比例组合而成?思路: 先看n最多可以由多少个 2020 组成,剩下的余数加在前面的 2020 上就形成 2021 了。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#def原创 2021-02-02 15:03:15 · 260 阅读 · 0 评论 -
Codeforces C. Ball in Berland (#697 Div.3) (思维 | 容斥原理)
传送门题意: 现有 k 组男女,总共包含 a 个男孩和 b 个女孩;从中任意选出两组男女,保证男女不会重复出现在该两组,试问有多少总取法?输入:先输入 a b k ,再输入一行男孩和一行女孩(一一对应为一组)。思路:方法1 (思维) : 当前男孩 a[i] 对答案ans的贡献为 k - 当前男孩 a[i] 匹配的女孩数 - 当前女孩 b[i] 匹配的男孩数 + 1 (当前的<a[i],b[i]>组合被剪了两次);又因为每次 第 i 组和第 j 组分别都对答案做出贡献,所有最后的答案要原创 2021-02-02 14:55:28 · 152 阅读 · 0 评论 -
Codeforces D. Cleaning (Round #696 Div.2) (思维 / 枚举)
传送门题意: 有n堆石子排成一排,每次你可同时在相邻两堆石子中都拿走一颗;试问是否可以通过在最初交换(或不用交换)相邻两堆石子而清扫干净所有石子?思路:首先考虑 a[1] 是要被消除的,且只能被 a[2] 消除,因此便构成如下的消除次序:a[1],a[2]-a[1], a[3]-a[1]+a[1] …考虑次序需满足的条件:任意一个数大于等于0,且最后一个数为0,若不满足则可能需要交换。而对于必须交换的情况来说,即便我们从后往前处理,也会出现一个负数情况;但我们不难发现无论对于正向处理(用p数组原创 2021-01-22 17:58:59 · 137 阅读 · 0 评论 -
Codeforces C. Array Destruction (Round #696 Div.2)(构造&思维&贪心)
传送门题意: 问是否能选定一个初始值x,使得能按一定要求消除掉大小为 n*2 的数组所有值。要求:第一次删除两个数的和为x,以后每次删除的两数之和都为上次删除数的max。问是否能正好删除数组的所有值,并输出构造的删除顺序。思路:由于本题数据范围不大,可以考虑暴力的思维。每次删除的数必定是当前数组的最大值和另一个特定的数(两数之和必定等于上一轮删除的最大数),所以只要 x 确定后,之后的删除顺序便都确定了。而 x 就由第一次删除的两个数来决定,其中一个为整个数组的max,另一个便可以暴力枚举了。原创 2021-01-22 15:01:03 · 147 阅读 · 0 评论 -
Codeforces B. Different Divisors (Round #696 Div.2) (贪心&数学&质数)
传送门题意:寻找一个最小正整数a,使得a至少有4个因子,且其任意两个因子之间的差至少为整数d。思路:刚开始会错了题意,其实最少4个因子且因子间差至少为d的情况下,其实往往因子都为质数。对于第一个因子为1毋庸置疑,那么只需要找到另外两个质数a和b,满足它俩以及1之间的差距大于等于d即可,而答案就是a和b的最小公倍数。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long lo原创 2021-01-22 13:02:50 · 310 阅读 · 0 评论 -
Codeforces A. Puzzle From the Future (Round #696 Div.2) (贪心)
传送门题意: 给你一个长度为n的二进制串b,试找到一个相同长度的二进制a,使得a与b的按位相加得到的数d(可含前导零)最大,且要求d中相邻两数不能相同。例如:a = ‘0110’,b = ‘1101’,则d = ‘1211’,即真正的 d 为 ‘121’。思路:为了使得 d 最大,则需要让其保留最大位数(n位),且无前导零首位最大;于是a[0]一定等于’1’。再依次向后贪心,使得当前位 d[i] 不等于 d[i-1] 的情况下最大即可。代码实现:#include<bits/stdc+原创 2021-01-22 12:47:26 · 199 阅读 · 0 评论 -
Codeforces B. Jumps (Round 99 Rated for Div.2) (思维 & 数学)
传送门题意: 初始值为0,第 i 次操作你可 +i 或 -1。试问要得到数x至少需要多少次操作。思路:对于第 i 次操作,若选择 +i 便可增加 i 个数,若选择 -1 便相当于减少了 i+1 个数。对于 i 是从1开始取值,那么能减少的数值情况就是从2开始的。于是先利用前缀和存在sum数组里面,找到以一个大于或等于x的前缀和sum[k]。若该sum[k]==x+1,那么答案就是k+1;若sum[k]==x,答案就刚好是k;其他情况都可通过中间减值得到。代码实现:#include <原创 2020-12-03 22:18:24 · 296 阅读 · 0 评论 -
Codeforces A. Add Candies (#683 Div.2 by Meet IT) (思维 / 水题)
传送门题意: 有n包糖果,第i包里有i颗,目标是要让所有糖包里的糖果一样多。可进行m次操作,第j次操作将j颗糖果添加在所选糖包外的糖包里。输出操作次数及每次操作的a[j]。思路: 直接输出1到n即可。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#def原创 2020-11-18 20:40:07 · 553 阅读 · 0 评论 -
Codeforces B. Numbers Box (#683 Div.2 by Meet IT) (思维)
传送门题意:有一个 n*m的矩阵,其中元素有负有正,每次可选任意相邻的俩元素将它们的符号取反,可进行任意次操作,求出可实现的整个矩阵最大矩阵和。思路:既然可以任意次操作,那么如果负数为偶数个,直接俩俩一起取反,最后整个矩阵都会是正数。若负数为奇数个,将负号留个绝对值最小的数即可。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int lon原创 2020-11-18 20:24:44 · 262 阅读 · 0 评论 -
Codeforces C. Knapsack (#683 Div.2 by Meet IT) (思维 / 数学)
传送门题意:在n个物品中选出部分放入承重量为W的背包,使得放入的重量C满足 W/2 ≤ C ≤ W (其中W/2上取整)。若无可行方案输出-1,否则输出所选物品个数及每个物品重量。思路:首先判断是否有个物品重量刚好在 W/2到W之间,若有直接选该物品即可(可二分也可暴力找)。反之,直接从最小开始连续选择重量在1到W/2之间的物品,若C能满足条件即可。(因为已经证明不存在刚好在W/2到W的物品,所以在1到W之间的物品间选择能实现的C除了能满足条件以外就只有小于W/2)。代码实现:#inclu原创 2020-11-18 20:14:25 · 262 阅读 · 0 评论 -
Codeforces C1. Binary Table (Easy Version) (#684 Div.2) (思维&模拟)
传送门题意: 有一个nm的01矩阵,每次操作可选其中22子矩阵的任意3个元素取反,要求将所有元素变成0,且操作次数在3nm以内(保证存在答案)。输出操作的总次数及每次操作对应的元素下标。思路: 分两个部分处理先暴力处理前(n-1)*m个位置,即每次把’1’放在正反L的’头’(即上一层单出来那个)。再单独处理最后一层,每次都看第j和j+1个位置。将是’11’型,'10’型和最后一个元素’01’型分类讨论。这样修改次数约为n*m+次(最后一行的操作次数较多)。代码实现:#include&原创 2020-11-18 19:46:25 · 280 阅读 · 0 评论 -
Codeforces C. Circle of Monsters (思维贪心 / 前缀和)
传送门题意: 有n个怪兽围成一圈,第i个怪兽都有一个a[i]的生命值和一个b[i]的危害值。你只能选一个起点开始按准时针挨个击杀它们,每次击打伤害值为1。当某个怪兽的生命值<=0时就会爆炸对下一个怪兽产生b[i]的伤害,依次发生连锁反应。试问将所有怪兽击毙至少需要多少次攻击。思路:根据题意可知,只有挨着挨着按顺序击杀怪兽,而击杀所有怪兽的基本差值和是一定的,攻击次数主要取决于起点的选择。所有我们对起点进行枚举就好,记得在枚举是要先减去之前该点的差值再加该点的怪兽生命值a[i]。代码实现原创 2020-11-04 22:14:35 · 402 阅读 · 0 评论 -
CCPC 2020威海站 H. Message Bomb (差分&前缀和)
PTA重现赛入口题意: 有 n个组(初始都为空组), m个学生, s个事件。每次事件输入t, x, y。t == 1: 将学生x加入y组,保证之前不存在。t == 2: 将学生x从y组中删除,保证之前存在。t == 3: 学生x向y组中其他成员宣布一则事件。试求每个学生接收到的事件数。思路:直接利用前缀和与差分的思维处理组员数的变化带来的改变。数组 vg[i]表示第i组总共接收过的事件数,数组vs[i]表示第i个学生总共接收到的事件数,再利用m个set集合存 每个学生加入的队伍情况原创 2020-10-29 01:32:05 · 299 阅读 · 0 评论 -
Codeforces C. Array Splitting (Round 69 Rated for Div.2) (思维 / 贪心 | 差分)
传送门题意: 试图将一个非递减数列分成k段,使得每段的max-min的和最小,并求得最小值。思路:个人觉得是个贪心,过题后去看博客大多数都是差分思维。将所求的式子整理下就会发现每次的消耗都是每段的段尾减段首,而换个思维就是求 |整个数列的段尾减段首| 再减去期间k-1个缝隙的差的绝对值。那么我们就需要减经量多才会使得最后消耗min。于是我们将所有n-1个可能缝隙的差值排序,取绝对值前k-1大的数进行计算即可啦。代码实现:#include<bits/stdc++.h>#de原创 2020-10-27 01:41:05 · 184 阅读 · 0 评论 -
Codeforces B. Prime Square (#678 Div.2) (思维构造 / 素数与和数)
传送门题意: 需要你构造一个n*n的矩阵,满足其下三个条件:每个数都在1e5以内每个数都不是素数每一行或列的和都是个素数思路:刚开始一直在想简便的特殊方法,结果一直wa1,最后才想到数据范围这么小应该可以暴力尝试过了(′д` )…彡…彡。我们只需要找n个数满足其和是素数且每个数不是素数即可。那么我们让其中n-1个都是1,只需要再找到一个和数 x 满足 x+n-1 是个素数即可。后期构造的时候让x后移轮换即可。代码实现:#include<bits/stdc++.h>原创 2020-10-27 01:11:59 · 386 阅读 · 2 评论 -
Codeforces A. Reorder (#678 Div.2) (数学思维 / 水题)
传送门题意: 给出数列长度n与正整数m,试问该数列是否满足正好等于m,且除法过程中不是整除(即 5/2 == 2.5)。思路: 仔细观察不难发现其实该题问的就是是否数列和正好等于m。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define low原创 2020-10-27 01:01:26 · 210 阅读 · 0 评论 -
Codeforces B. Barrels (Round 96 Rated for Div.2) (思维)
传送门题意: 现有n个无限大的杯子,第i个杯子中有a[i]升水。你有k次操作,每次能将一个杯子里的水倒入另一个杯子,试问k次操作结束后,含水量最大与最小之间的差值max为多少/思路: 水题嘛,意思搞那么复杂,不就是求前k大数的和咩。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<原创 2020-10-24 00:26:23 · 239 阅读 · 0 评论 -
Codeforces C. Numbers on Whiteboard (Round 96 Rated for Div.2) (思维 / 贪心)
传送门题意: 现有1到n的n个数字,需要进行N-1次操作,每次选出两个数a与b删除,并把 (a+b)/2新加入集合中。求最后只剩一个数时的最小值。思路: 用一个优先队列,每次取出最大的两个数,并把他们和的1/2上取整新加入集合。真没想到这样能行(#.#),神奇鸭。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#def原创 2020-10-23 17:25:14 · 204 阅读 · 0 评论 -
Codeforces E. Two Round Dances (#677 Div.3) (思维 / 暴力)
传送门题意: 求将偶数n (2 <= n <= 20) 个人排成两个圈的方法有多少种。思路: 排列组合问题,先组合数选出n/2个人,剩下的人也就确定了,再考虑两个圈的全排列。代码实现:#include<bits/stdc++.h>//#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define l原创 2020-10-23 16:43:17 · 231 阅读 · 0 评论 -
Codeforces A. Copy-paste (#673 Div.2) (思维)
传送门题意: 给你一个数列a,将a[i]的值加在a[j]上(i != j)且使得a[j] <= k。试问最多能操作多少次?思路: 找到一个最小的数一直作为加数,试其他n-1个数都不超过k即可。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#def原创 2020-09-29 00:05:13 · 217 阅读 · 0 评论 -
Codeforces C. k-Amazing Numbers (#673 Div.2) (思维 / 区间枚举 / 最小前缀)
传送门题意: 给出一个序列a,试问对于 1~n 的所有k,是否所有k长度的连续区间里的数都有共同的数交集,并输出这个数集中的min,否则输出 -1.思路:考虑相同数之间最少需要多长的k才能都包含到。枚举一个数和序列开头,中间数之间的差,最后一个数和序列结尾。用一个ans[k]记录最少需要长度的k中最小的数字是哪个。ans[k]=min(ans[k],i)。最后再维护下ans的最小前缀即可。代码实现:#include<bits/stdc++.h>#define endl '原创 2020-09-28 23:36:35 · 317 阅读 · 0 评论