Codeforces题解
文章平均质量分 93
朝阳学长
)希望成为快乐的朝阳学长
展开
-
Codeforces Global Round 12 2/6
比赛链接 A. Avoid Trygub 输入长度为n的字符串s,你可以对字符串进行顺序的调换,保证"trygub"不是新串的子串。 n≤200n\leq200n≤200 输出字典序最小的那个即可。 B. Balls of Steel 给出n个小球的坐标xi,yix_i,y_ixi,yi,以及静电的影响范围k。你可以选择任意小球带点,如果一个球带电他就会吸引坐标相减绝对值小于等于k的其余小球。问你要使得全部小球都聚拢在一个坐标,你需要最少让几个球带电,如果无法聚拢输出-1。 2≤n≤100,k≤106,原创 2021-02-16 15:15:15 · 146 阅读 · 0 评论 -
Codeforces Round #701 (Div. 2) 2/12
比赛连接 T1 给出a,b两个数字。你有两种可以选择的操作。 操作a=⌊ab⌋a=\lfloor\frac{a}{b}\rfloora=⌊ba⌋ b=b+1b=b+1b=b+1 数据范围在10910^9109中,问你最少需要操作几次可以把aaa变成0。 通过思考,我们知道如果我们最终把b变成了某一个数,使得a变为0,那么我们在一开始就把b一直累加到需要的结果一定是最优解。因为这样就可以先除一个比较大的数。那么我们知道当b!=1b!=1b!=1时,如果b是2只需要大概30次除法就可以把a变成0。所以我们原创 2021-02-14 22:07:53 · 151 阅读 · 0 评论 -
Codeforces Round #688 (Div. 2) 12/4
比赛链接 T1 给出两个有序的数组,判断里面有几个相同的数,可用O(n+m)O(n+m)O(n+m)解决。 #include <bits/stdc++.h> using namespace std; #define js ios::sync_with_stdio(false);cin.tie(0); cout.tie(0) #define all(__vv__) (__vv__).begin(), (__vv__).end() #define endl "\n" #define pai pair原创 2021-02-12 15:07:24 · 103 阅读 · 0 评论 -
Educational Codeforces Round 99 (Rated for Div. 2) 11/30
比赛链接 T1 给出f(x)=int(reverse(x))f(x)=int(reverse(x))f(x)=int(reverse(x)),例如f(123)=321,f(100)=001=1f(123)=321,f(100)=001=1f(123)=321,f(100)=001=1。 再给出g(x)=xf(f(x))g(x)=\frac{x}{f(f(x))}g(x)=f(f(x))x,输入一个整数n。求1≤x≤n1\leq x\leq n1≤x≤n,构成的g(x)g(x)g(x)集合中有几个元素。 1原创 2021-02-11 10:46:27 · 123 阅读 · 0 评论 -
Codeforces Round #687 (Div. 2) 11/29
比赛链接 T1 T组输入,每组输入地图的大小n∗mn*mn∗m,并且地图上每一个点都存在一个犯人,每个犯人可以花费一个晚上走到相邻的四个格子,现在(x,y)处有一个逃生通道,询问最后一个走的犯人需要花费几个夜晚到达。 判断地图的四个端点寻找距离最大者即可。 #include <bits/stdc++.h> using namespace std; #define js ios::sync_with_stdio(false);cin.tie(0); cout.tie(0) #define all(原创 2021-02-10 17:29:24 · 114 阅读 · 0 评论 -
Codeforces Round #686 (Div. 3) 11/24
T1 构造题,T组,输出一个长度为n的全排列,并且保证全排列中没有pi=ip_i=ipi=i的点。 n≤100n\leq 100n≤100 输出2 3 4 5… n 1,即可。 T2 T组输入,每次输入长度为n的数组,现在需要你找到出现一次的数里面最小的是对应下标在什么位置,如果没有数出现一次那么就输出-1。 n≤2∗105n\leq2*10^5n≤2∗105 开个计数器模拟一下就行了。 T3 给你长度为n的序列,以及其中的元素值,你可以选定一个x把原数组根据ai=xa_i=xai=x,切割成一些小块。原创 2021-02-09 00:22:38 · 118 阅读 · 0 评论 -
Codeforces Round #700 (Div. 2) 2/7
T1 题目有2个人互相操作一个字符串s,第一个人希望把字符串s变得字典序最小,第二个人希望把字符串s变得字典序最大。必须保证每个位置都和之前起始的字符不同,第一个人操作s0s_0s0,第二个人操作s1s_1s1,第一个人操作s2s_2s2依次下去,输出他们会把字符串变成什么样子。 ∣s∣≤50|s|\leq50∣s∣≤50 从头遍历字符串,分奇偶判断是谁操作,再判断一下是不是起始就是a或者z。 #include <bits/stdc++.h> using namespace std; #d原创 2021-02-08 16:51:07 · 138 阅读 · 0 评论 -
Codeforces Round #685 (Div. 2) 11/21
T1 中文题意: T组输入,每次输入一个整数n,你每次可以把n除以一个它的因子,或者减1,问把n变成1的最小步骤是几次。 n≤109n\leq10^9n≤109 分类讨论,先特判1,2,3三个特殊的数,再看后面的数发现我们可以分奇偶讨论了。偶数我们可以把它变成2,再减去1就是1。奇数我们一定要先减去1变成偶数在变成2再变成1。因为任何一个大于3的奇数都不可能一步变成2或者1。 #include <bits/stdc++.h> using namespace std; #define js ios原创 2021-02-07 16:02:01 · 81 阅读 · 0 评论 -
Codeforces Round #699 (Div. 2) 2/6
T1 中文题意: 你现在在(0,0)点,有四种操作对应上下左右四个方向,现在给出终点坐标(x,y),以及指令集S是一个只包含四个字母的字符串,对应的动作你可以选择执行也可以选择不执行,询问你最终能不能到达(x,y)点。T组输入。 T≤1000,∣s∣≤105T\leq1000, |s|\leq10^5T≤1000,∣s∣≤105。 因为原点出发,指令可以执行也可以不执行,那么就认准2个方向就行了,判断这两个方向是不是满足长度大于等于(x,y) #include <bits/stdc++.h> u原创 2021-02-06 21:46:15 · 147 阅读 · 0 评论 -
Codeforces Round #697 (Div. 3) 1/25
比赛链接 T1 给你一个n,判断n是不是可以被除了1以外的奇数整除。可以输出YES,否则输出NO。 2≤n≤10142\leq n\leq10^{14}2≤n≤1014 依次除2,判断是否存在奇因子即可。 void solve() { n = read(); do { if (n & 1) { puts("YES"); return; } n = n >> 1; } while (n != 1); puts("NO"); } T2 给出整数n,判断n是不原创 2021-01-31 11:29:35 · 66 阅读 · 0 评论 -
Educational Codeforces Round 103 (Rated for Div. 2) 1/29
比赛链接 T1 中文题意: T组输入,给你n个盘子,你要向里面放苹果,使得盘子中苹果总数是m的倍数。并且盘子内最多的苹果最小值是多少。并且一定要保证每个盘子都有苹果。 n,m≤109n,m\leq10^9n,m≤109。 如果n≤mn\leq mn≤m,那么直接平铺盘子,直到满足倍数关系,答案就是m/n+(m%n==0)m/n+(m\%n==0)m/n+(m%n==0),后面加法就看要不要额外补充。 如果n>mn>mn>m,我们调整m是第一个大于n的倍数即可。m=m∗celi(1.0∗n/原创 2021-01-30 17:59:02 · 72 阅读 · 0 评论 -
Codeforces Round #696 (Div. 2) 1/19
比赛链接 T1 中文题意: T组输入,每次输入一个字符串A,现在需要你找到一个字符串B,使得A+B(二进制加法)之后值最大。并且还有一个特殊的点在于,如果结果中存在连续的字符那么连续的字符会被浓缩成一个字符。 类似于A=111,B=111,得到结果会是A+B=222=2。现在要你输出字典序最大的结果是由哪个B得来的。∣A∣≤105|A|\leq10^5∣A∣≤105 一个思路,高位能加1就加1,高位加了1之后要么是1要么是2,根据高位调整低位即可。 const int N = 1e6 + 7; ll n原创 2021-01-28 16:29:24 · 65 阅读 · 0 评论 -
Educational Codeforces Round 98 (Rated for Div. 2) 11/19
比赛链接 T1 中文题意: T组输入,每组输入一个坐标点(x,y)(x,y)(x,y),做为你需要到达的终点,你的起点位置在(0,0)(0,0)(0,0),现在你每次移动只能上下左右或者不动,并且不能执行两次相同的移动方向,问去到终点的最少移动次数是多少? T≤100,0≤x,y≤104T\leq100, 0\leq x,y\leq10^4T≤100,0≤x,y≤104。 规律题,发现走到主对角线上是最简单并且不会有相同移动方向的。那么通过移动到主对角线某个点,再去走一步停一步直接走向终点就是最快的。 vo原创 2021-01-27 14:54:19 · 62 阅读 · 0 评论 -
Codeforces Round #684 (Div. 2) 11/17
比赛链接 T1 中文题意: T组输入,每次第一行输入4个整数n,c0,c1,hn,c_0,c_1,hn,c0,c1,h,第二行给出一个长度为n的二进制串。你可以花费h把它某一位取反。最终你要花c0c_0c0买下全部的0,c1c_1c1买下全部的1,问最小的花费是多少。 T≤10,n,c0,c1,h≤103T\leq10,n,c_0,c_1,h\leq10^3T≤10,n,c0,c1,h≤103 简单思维,换掉一位一定是花费更少才会换,那么这个换了花费更少,那就把全部0都要换掉或者1换掉。所以总结原创 2021-01-26 23:10:52 · 68 阅读 · 0 评论 -
Codeforces Round #683 (Div. 2) 11/15
比赛链接 T1 中文题意: T组输入,每组输入一行n,代表你有长度为n的数组,并且数组元素是[1,2,3,4…]这样下去的。现在你第一次可以选择一个下标位置,保持这个位置的元素不变,其他元素全部加1,第二次你也可以重新选择一个下标位置,保持这个位置元素不变,其他元素全部加2,以此类推。需要你找出一个操作方案,使得最终序列中全部的数变成相同的。 T≤100,n≤100T\leq100, n\leq100T≤100,n≤100。 简单思维,我们选择的加法是先加1后加2再加3,那么每次加的位置就会比前一次加少加1原创 2021-01-26 21:38:23 · 81 阅读 · 0 评论 -
Codeforces Round #682 (Div. 2) 11/13
比赛跳转链接 T1 中文题意: T组输入,每次输入一个n,构造长度为n的序列,保证序列中的每一个子序列都是好的。关于好数组的定义是,数组内元素和可以被长度整除。 T≤100,n≤100T\leq100,n\leq100T≤100,n≤100。 比较基础的构造题,打印nnn个111或者nnn个nnn都可以。 int main() { int T = 1; T = read(); while (T--) { int n = read(); for (int i = 1; i <= n; ++原创 2021-01-24 21:59:46 · 114 阅读 · 0 评论