![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CodeForces
邵光亮
要为自己喜欢的事情不留余力
展开
-
Codeforces Round #681 (Div. 1, based on VK Cup 2019-2020 - Final)
A. Extreme Subtraction题意:给你一个长度为 nnn 序列,你可以进行无数次操作,让前 kkk个数减一或让后 kkk 个数减一,1<=k<=n1<=k<=n1<=k<=n ,问是否能把这整个序列变为 000 序列,其实最多的操作次数就是第一个数加上最后一个数。可以这样考虑,把这个序列从从后往前处理,若后一个数大于前一个数,则让后面的所有数减少到等于前一个数字,若能实现操作就是 YESYESYES.例如:4 5 6 4 5 6 4 8 94原创 2020-11-03 20:51:44 · 141742 阅读 · 0 评论 -
Educational Codeforces Round 97 (Rated for Div. 2)
A. Marketing Scheme题意;这道题难在读题,有顾客想要购买数量为 xxx 的猫粮,xxx 属于区间[l,r][l,r][l,r],而你会制定一个折扣,相当于购买 aaa 个就会享受折扣,其余的 xmod ax \mod axmoda 则按原价购买。如果xmod a≥a2x\mod \ a≥\frac{a}{2}xmod a≥2a,那么顾客会购买多购买使得满折扣,你希望顾客多购买,故请你能否找到一个折扣 aaa,使得顾客总想这样做。aaa 的值不介于 [l,r原创 2020-10-28 21:19:47 · 141428 阅读 · 0 评论 -
Codeforces Round #673 (Div. 2)
A. Copy-paste题意:给你一个数组和一个限定值 kkk,你可以进行法术使得:当1≤i,j≤n1≤i,j≤n1≤i,j≤n andandand i≠ji ≠ ji=j 让 aj:=aj+aia_j := a_j + a_iaj:=aj+ai 。当进行法术操作使得其中有一个元素超过限定值 kkk 时,你都将失去该法术能力,即法术无效。问你最多能使用多少次法术。直接看最小的可以加几次。AC代码:const int N = 2e5 + 10;const int mod = 1e9原创 2020-09-29 21:29:55 · 140214 阅读 · 0 评论 -
Codeforces Round #672 (Div. 2)
A. Cubes Sorting题意:能否通过 n∗(n−1)2−1\frac{n*(n-1)}{2}-12n∗(n−1)−1 次操作使得序列不降。看到 n∗(n−1)2−1\frac{n*(n-1)}{2}-12n∗(n−1)−1 就明白了,只要不是递减序列都可以变成的。AC代码:const int N = 2e5 + 10;const int mod = 1e9 + 7;int t;int n, m, k;int a[N], b[N], ans[N];bool vis[N];原创 2020-09-26 17:57:59 · 138716 阅读 · 0 评论 -
Educational Codeforces Round 95 (Rated for Div. 2)
题意:AC代码:题意:AC代码:题意:AC代码:D. Trash Problem题意:有 nnn 堆垃圾,每一堆的坐标为 xxx,合并两堆垃圾的花费为这两堆垃圾的坐标之差的绝对值。你可以进行 qqq 次操作。 111 xxx表示在 xxx 位置上增加一堆垃圾,000 xxx 表示删除 xxx 位置上的垃圾。输出将这 nnn 堆垃圾合并成两堆垃圾所需的花费,以及每次操作之后改变的答案。AC代码:const int N = 2e5 + 50;int n, Q;struct .原创 2020-09-17 20:35:31 · 138286 阅读 · 0 评论 -
Codeforces Round #670 (Div. 2)
A. Subset Mex题意:给你一个长度为 nnn 的数组 aaa,你需要将其分成两个数组,使得其中未出现的最小非负整数的和最大。mexAmexAmexA 和 mexBmexBmexB 由区间内未出现的最小的决定,从最小的 000 开始枚举,看看有没有出现,有出现就打个标记,累加答案。没有出现就直接返回当前最小值。AC代码:const int N = 2e5 + 50; int n, m, p;int a[N];int cnt[N];int main(){ int t;原创 2020-09-16 21:48:58 · 138062 阅读 · 0 评论 -
Codeforces Round #664 (Div. 2)
A. Boboniu Likes to Color Balls题意:总共四个颜色,可以进行的操作是,前三个一人拿一个放到第四个,就相当于前三个都减一,第四个 +3+3+3。然后得到的四个数,每个数对应一种字符的个数,问这些字符是否能构成回文串。构成回文串的情况可以是个数为偶数的有四个,或者个数为偶数的有三个为奇数的有一个。还有就是全部都为奇数,然后经过一次操作前三个颜色都变成了偶数,最后一个颜色也变成了偶数,然后就是三个奇数的情况,假设前三个里面俩奇数一个偶数,最后那个是奇数,通过一次操作可原创 2020-08-13 11:43:34 · 137890 阅读 · 0 评论 -
Codeforces Round #663 (Div. 2)
A. Suborrays题意:输入一个长度 nnn,用 1n1 n1n 的数字进行随机排列。定义对于一个正整数 nnn,如果对于每一对 iii 和 j(1≤i≤j≤n)j(1≤i≤j≤n)j(1≤i≤j≤n) 都满足,对于 ppp 的每个子数组,其中所有元素的 OROROR 不小于该子数列中元素的个数。我们称长度为 nnn 的排列 ppp 是好的。两个数进行位运算了,且范围是 1 n1~n1 n,那么进行位运算后的结果不会小于元素的个数。简而言之就是:无论怎么输出这个置换序列都是原创 2020-08-11 11:58:50 · 138572 阅读 · 0 评论 -
Codeforces Round #662 (Div. 2)
A. Rainbow Dash, Fluttershy and Chess Coloring题意:AC代码:题意:AC代码:题意:AC代码:题意:AC代码:原创 2020-08-09 15:47:10 · 137331 阅读 · 0 评论 -
Codeforces Round #661 (Div. 3)
A. Remove Smallest题意:给定一个序列,每次操作可以任选两个差的绝对值小于等于 111 的元素并删掉其中的较小数,问你能否通过有限次操作把序列删到只剩一个数。排序后计算相邻数的差,只要有大于 111 的就不可能达到目标。AC代码:const int N = 2e5 + 50;int n, m;int a[N]; int main(){ int t; sd(t); while (t--) { sd(n); rep(i, 1, n) sd(a[i]);原创 2020-08-07 22:02:49 · 137539 阅读 · 0 评论 -
Codeforces Round #658 (Div. 2)
A Common Subsequence只要找到有一个相同的元素输出即可。AC代码:const int N = 1010;int a[N], b[N];int ans;int cnt[N];int main(){ int t; sd(t); while (t--) { int n, m, k; bool flag = 0; sdd(n, m); mem(cnt, 0); rep(i, 1, n) { sd(a[i]); cnt[a[i]]++;原创 2020-07-22 11:11:11 · 136943 阅读 · 0 评论 -
Codeforces Round #657 (Div. 2)
A. Acacius and String题意:给你一个串,你可以把 ??? 换成任意字符,使得这个串最后只出现一次 abacabaabacabaabacaba 。暴力枚举 abacabaabacabaabacaba 出现的位置。然后判断是否只出现一次。AC代码:string s;int n;string T = "abacaba";bool check(string &a){ int cnt = 0; rep(i, 0, n - 7) { if (a.substr(i,原创 2020-07-20 11:19:05 · 136529 阅读 · 0 评论 -
Codeforces Round #656 (Div. 3)
A. Three Pairwise Maximums题意:给你三个正整数 x、yx、yx、y 和 zzz,请你找到正整数 a,ba,ba,b 和 ccc ,使得 x=max(a,b),y=max(a,c),z=max(b,c)x=max(a,b),y=max(a,c),z=max(b,c)x=max(a,b),y=max(a,c),z=max(b,c),或者确定不可能找到这样的 a,ba,ba,b 和 ccc 。AC代码:int main(){ int t; sd(t); while (t-原创 2020-07-18 11:09:34 · 145697 阅读 · 0 评论 -
Codeforces Round #655 (Div. 2)
A Omkar and Completion只要找两个相加不等的数交叉构造即可。AC代码:int main(){ int t; sd(t); while (t--) { sd(n); rep(i, 1, n) { if (i & 1) printf("500 "); else printf("501 "); } printf("\n"); } return 0;}B. Omkar and Last Class of Math原创 2020-07-12 10:40:34 · 142466 阅读 · 0 评论 -
Educational Codeforces Round 90 (Rated for Div. 2)
A. Donut ShopsAC代码:int n, m, k;int ans1, ans2;int main(){ int t; sd(t); while (t--) { ll a, b, c; slddd(a, b, c); if (a >= c) ans1 = -1; else ans1 = 1; if (a * b <= c) ans2 = -1; else ans2 = b; pdd(ans1, ans2); }原创 2020-06-28 21:50:09 · 141996 阅读 · 0 评论 -
Codeforces Round #652 (Div. 2)
A. FashionabLee两边同时平行,是 444 的倍数即可。AC代码:int n, k, m; int main(){ int t; sd(t); while (t--) { sd(n); if (n % 4 == 0) puts("YES"); else puts("NO"); } return 0;}B. AccurateLee对于每个 000 先存起来,对于每个 111 如果后面有 000 就可以找到最远的那个 000 然后把中间的都消原创 2020-06-24 08:42:44 · 141902 阅读 · 0 评论 -
Codeforces Round #651 (Div. 2)
A. Maximum GCD最小因子是 222 ,所以答案就是 n2\frac{n}{2}2n 。AC代码:int n, m, k; int main(){ int T; sd(T); while (T--) { sd(n); pd(n / 2); } return 0;}B. GCD Compression没有要求最后得到的 GCDGCDGCD 是最大的,那么就让奇数+奇数,偶数+偶数,这样得到的 GCDGCDGCD 最小也是 222 。AC代码:const原创 2020-06-21 16:50:56 · 141476 阅读 · 0 评论 -
Codeforces Global Round 8
A. C+=两个数交替相加判断次数。AC代码:int n, m; int main(){ int T; sd(T); while (T--) { int a, b; sddd(a, b, n); if (a < b) swap(a, b); int ans = 0; bool flag = 0; while (a <= n && b <= n) { if (flag) a += b; else原创 2020-06-19 17:05:44 · 141344 阅读 · 0 评论 -
Codeforces Round #650 (Div. 3)
A. Short Substrings先输出首尾,然后中间的隔一个输出一个。AC代码:int main(){ int T; sd(T); while (T--) { string a, b; cin >> b; int len = b.size(); printf("%c", b[0]); for (int i = 1; i < len - 1; i += 2) { printf("%c", b[i]); } printf("%c\n"原创 2020-06-17 14:48:52 · 141153 阅读 · 0 评论 -
Codeforces Round #649 (Div. 2)
A. XXXXXxxx 倍数-非 xxx倍数 = 非 xxx 倍数,知道这个就很好做了,先求全部的和,然后找到首尾最近的那个不是 xxx 倍数 的位置减去就行。AC代码:const int N = 2e5 + 50;int n, m, x;int a[N];ll sum; int main(){ int t; sd(t); while (t--) { sdd(n, x); sum = 0; rep(i, 1, n) { sd(a[i]); sum +=原创 2020-06-14 09:08:24 · 141130 阅读 · 4 评论 -
Educational Codeforces Round 89 (Div. 2)
A. Shovels and Swords讨论一下大小。AC代码:int n, m, k; int main(){ int t; sd(t); while (t--) { sdd(n, m); int ans = 0; if (n > m) swap(n, m); if (2 * n <= m) ans = n; else { k = m - n; ans += k; m -= 2 * k; n -= k; a原创 2020-06-12 10:29:09 · 140526 阅读 · 0 评论 -
Codeforces Round #648 (Div. 2)
A. Matrix Game先统计可以填的行数和列数,每次填行数和列数都会减小 111 所以只需要判断行数和列数最小值的奇偶性即可。AC代码:int n, m, k;bool r[110], c[110];int main(){ int T; sd(T); while (T--) { sdd(n, m); mem(r, 0); mem(c, 0); rep(i, 1, n) { rep(j, 1, m) { int x; sd(x);原创 2020-06-08 10:33:44 · 140569 阅读 · 0 评论 -
Codeforces Round #647 (Div. 2)
A. Johnny and Ancient Computer模拟判断。AC代码:int main(){ int t; sd(t); while (t--) { ll n, m; sldd(n, m); if (n == m) { puts("0"); continue; } ll ans = 0; if (n < m) swap(n, m); ll res = n / m; if (n % m != 0 || res & 1原创 2020-06-05 11:02:00 · 140204 阅读 · 0 评论 -
Codeforces Round 646 (Div. 2)
A Odd Selection这个 aaa 一开始想的分类讨论然后没有考虑 xxx 的奇偶,其实 nnn 不大,直接枚举奇数的个数就行。AC代码:const int N = 5e5 + 50;int n, m, k;int a[N]; int main(){ int T; sd(T); while (T--) { sdd(n, m); rep(i, 1, n) sd(a[i]); int e = 0, o = 0; rep(i, 1, n) { if原创 2020-06-01 12:57:53 · 138733 阅读 · 0 评论 -
Codeforces 1359 E. Modular Stability
题意:给出 nnn 和 kkk ,要求在 [1,n][1, n][1,n] 中找出不同的 kkk 个数,使得有规律,所有 aia_iai 必须能被最小值 a1a_1a1 整除。只要枚举 a1a_1a1 的值,然后计算组合数就行了。AC代码:const int N = 5e5 + 50;int n, k;const int mod = 998244353;int F[N], Finv[N], inv[N]; //F是阶乘,Finv是逆元的阶乘void init(){ inv[1.原创 2020-05-29 17:00:53 · 138611 阅读 · 0 评论 -
Codeforces 1359 D. Yet Another Yet Another Task
题意:给一个的数组,,求连续的一段区间内,求数组元素总和减去区间内数组的最大值的最大值。确定区间最值为 kkk ,然后找到最大连续子段和求最值即可。AC代码:const int N = 1e6 + 50;int n, m;int a[N];int main(){ int T; sd(n); rep(i, 1, n) sd(a[i]); int ans = 0; rep(k, 1, 30) { int sum = 0; rep(i, 1, n) { if .原创 2020-05-29 16:36:36 · 138305 阅读 · 0 评论 -
Codeforces 1359 C. Mixing Water(二分)
题意:有一个无限大的容器。你轮流进行如下操作:倒一杯热水进去、倒一杯冷水进去。以此类推。(热水温度是 hhh ,冷水温度是 ccc),容器中的水的温度等于倒进去的水的温度总和/倒水的次数。问你需要进行多少次操作,水的温度才能最接近温度t。设倒进冷水的杯数为 xxx ,热水的杯数为 x+1x+1x+1 。然后二分杯数,如果 (h∗(mid+1)+c∗mid)/(2.0∗mid+1)>t(h * (mid + 1) + c * mid) / (2.0 * mid + 1) > t(h∗(mi.原创 2020-05-29 16:08:09 · 138364 阅读 · 0 评论 -
Codeforces 1358 D. The Best Vacation(二分)
题意:一种新的纪年方式,一年有 nnn 个月,每个月有 did_idi 天,没有闰年。计算某一天的值的方式为该天在该月中是第几天。连续选择 xxx 天,要求这 xxx 天得到的值最大。最优解的区间的右端点一定一定是某个月的月末,枚举每个月的月末,二分查找区间左端点即可。AC代码:const int N = 1e6 + 50;ll n, m, x;ll a[N], s[N], sum[N];int main(){ int t; sldd(n, x); s[0] = 0; sum[..原创 2020-05-27 22:03:03 · 138245 阅读 · 0 评论 -
Codeforces 1358 C. Celex Update
题意:一个矩形内有多个方格,每个方格都按照顺序填写了一些数。给两个坐标,求这两个坐标间路径经过的数字和不同的路线总数。可以看出比如要从 111 走到 181818 ,这两种走法 1,2,4,7,12,181,2,4,7,12,181,2,4,7,12,18 和 1,2,4,8,12,181,2,4,8,12,181,2,4,8,12,18 第二个比第一个多了 111 ,说明一旦出现类似 4,7,124,7,124,7,12 这样的上三角形拐角,我们可以让它拐下来变成 4,8,124,8,124,8,..原创 2020-05-27 21:35:19 · 138080 阅读 · 0 评论 -
Codeforces 1360 G. A/B Matrix
题意;找出一个 n∗mn*mn∗m 的矩阵,要求每一行严格存在 aaa 个 111,每一列严格存在 bbb 个 111,其余部分均为 000 。就是要填充 n∗an*an∗a 或 b∗mb*mb∗m 个 111 ,所以只要 n∗a==b∗mn*a == b*mn∗a==b∗m 成立,则一定存在答案。看几组就能发现规律。3∗63*63∗6 的矩阵中a=2,b=1a=2,b=1a=2,b=1则构造出了矩阵1100001100001100000011000011000011000000110..原创 2020-05-26 16:42:41 · 137901 阅读 · 0 评论 -
Codeforces 1360 F. Spy-string
题意;给出 nnn 个字符串,找到一个字符串,使得该字符串和其他字符串最多相差一个字符。记录每个字符串的衍生字符串,被衍生了 nnn 次的就是答案。AC代码;int n, m, k;int main(){ int t; sd(t); while (t--) { sdd(n, m); map<string, int> mp; string s; bool flag = 0; rep(i, 1, n) { cin >> s; s.原创 2020-05-25 18:51:06 · 137709 阅读 · 0 评论 -
Codeforces 1360 E. Polygon
题意:在一个 n∗nn*nn∗n 的网格上方和左边都有一排大炮,每次可以发射一个 111 ,遇到边界和 111 都会停下来,有没有一种发射频率可以组成给出的 010101 方阵。大炮的位置在左和上,所以每个非右边界或者下边界的 111 的右方或者下方都会有一个 111。AC代码:int n, m, k;char a[100][100];int main(){ int t; sd(t); while (t--) { sd(n); rep(i, 1, n) { rep..原创 2020-05-25 18:33:34 · 137742 阅读 · 0 评论 -
Codeforces 1360 D. Buying Shovels
题意:要买 nnn 个铲子,商店中有 kkk中不同的卖法,依次每一次卖 111 到 kkk 个铲子,现在只能选择其中的一种买法,问最少买几次同一种的买法,使得刚好买到 nnn 个铁锹。直接选择小于 kkk 的 nnn 的最大因子即可。AC代码:int n, m, k;int main(){ int t; sd(t); while (t--) { sdd(n, k); int ans = inf; for (int i = 1; i * i <= n; i++) {.原创 2020-05-25 18:20:04 · 137391 阅读 · 0 评论 -
AtCoder Beginner Contest 168 C - : (Colon)
题意:时针转过的角度:2π×(h+m60)122\pi\times\dfrac{(h+\dfrac{m}{60})}{12}2π×12(h+60m) 分针转过的角度: 2π×m602\pi\times \dfrac{m}{60}2π×60m。AC代码:const int N = 1e6 + 50;const double pi = acos(-1.0);int main(){ double a, b, h, m; cin >> a >> b >&g..原创 2020-05-22 17:07:48 · 137056 阅读 · 0 评论 -
Codeforces 1354 C2. Not So Simple Polygon Embedding
nnn 是奇数的情况其实本质上就是把 nnn 是偶数的情况造出的边与多边形的边平行的正方形转个角度。由对称性可得,当转过的角度等于 14\frac{1}{4}41 内部小三角形的顶角时边长最小。AC代码:const double PI = 3.1415926535898;int n, m;int main(){ int t; sd(t); while (t--) { sd(n); double ang = 360.0 / (2 * n); ang /= 2.0; d.原创 2020-05-18 17:29:41 · 137029 阅读 · 1 评论 -
Codeforces 1354 C1. Simple Polygon Embedding
题意:给定 nnn,求能包围正 2∗n2*n2∗n 边形的正方形的最小面积。nnn 为偶数时,正多边形必有四条边分别和正方形的四条边重合,可以推出公式:ans=2∗(12∗1tan(360。/n∗2/2))ans=2*(\frac{\frac{1}{2}*1}{tan(360^。/n∗2/2)})ans=2∗(tan(360。/n∗2/2)21∗1)AC代码;const double PI = 3.1415926535898;int n, m;int main(){ int t; .原创 2020-05-18 16:46:00 · 136963 阅读 · 0 评论 -
Codeforces 1354 B. Ternary String
题意:给定一段只包含“1”“2”“3”的字符串,求其中包含三个数字的连续子串的最小长度。AC代码:int a, b, c;int main(){ int t; sd(t); while (t--) { string s; cin >> s; int len = s.size(); int ans = inf; a = inf, b = inf, c = inf; rep(i, 0, len - 1) { if (s[i] == '1') .原创 2020-05-18 16:20:22 · 136733 阅读 · 0 评论 -
Codeforces 1355 E. Restorer Distance
分段枚举。AC代码:const int N = 2e5 + 50;ll n, m, a, r;ll h[N], sum[N], suf[N];int main(){ cin >> n >> a >> r >> m; rep(i, 1, n) sld(h[i]); sort(h + 1, h + 1 + n); sum[0] = 0; rep(i, 1, n) sum[i] = sum[i - 1] + h[i];//前缀和 .原创 2020-05-17 09:25:10 · 136589 阅读 · 0 评论 -
Codeforces 1355 D. Game With Array
题意:让你构造一个长度为 nnn 的序列,并且 nnn 个数的和为 SSS,问能不能找到一个 1−n1-n1−n 的数 kkk,使得数组里找不出一个子序列的和为 kkk 或者 n−kn-kn−k;让 k=1k=1k=1,然后数组只要不出现 111 和 n−1n-1n−1 就好了,只要 s>=2∗ns >= 2*ns>=2∗n,也就是由 n−1n-1n−1 个 222 和一个 s−(n−1)∗2!=1s-(n-1)*2 != 1s−(n−1)∗2!=1 构成就可以。AC代码:in.原创 2020-05-17 08:29:30 · 145597 阅读 · 1 评论 -
Codeforces 1355 C. Count Triangles
题意:给你四个数 A,B,C,DA,B,C,DA,B,C,D,求有多少个三边为 x,y,z(A≤x≤B≤y≤C≤z≤D)x,y,z (A ≤ x ≤ B ≤ y ≤ C ≤ z ≤ D)x,y,z(A≤x≤B≤y≤C≤z≤D) 的三角形。枚举 xxx ,然后判断有多少步满足的,最后减去就是吗,满足的。具体看代码吧,就是细节需要注意。AC代码:int a, b, c, d;ll ans;int main(){ int t; sdd(a, b); sdd(c, d); ans = 0.原创 2020-05-17 08:17:24 · 146908 阅读 · 0 评论