ACM相关题集
文章平均质量分 64
做到的一些有意思的题目
Story1419
知识不是信息,学习不是记忆
展开
-
一次TLE的教训
一次TLE的教训在CF上刷题的时候,遇到一道数据很大的题。https://codeforces.com/edu/course/2/lesson/2/3/practice/contest/269118/problem/Bn可以取到3e5,我用O(N*log(N))完全能过的,但是…我不理解,刚开始我以为是有个特例让我二分死循环了,然后我对拍了无数次,跑的都挺快的,我试着限制二分次数break掉,还是TLE,这说明是程序复杂了。尝试了很多种办法,比如记忆化,更快的快读,不开long long等…后来原创 2021-08-03 18:09:31 · 247 阅读 · 1 评论 -
双指针算法
双指针算法一开始我并不知道这是什么算法,只是在很多地方见到过,但这究竟是个什么东西并不清楚。其实,双指针就是指两个数组下标在动而已。双指针的本质就是优化。它可以将O(n*m)的复杂度优化成O(n+m).1.先写出朴素的暴力做法,一般是两个for,复杂度是n^2.2.然后看看求解的问题是否具有单调性。我理解的单调性是指,在符合答案要求的情况下,两个指针移动的方向是单调的,i和j不会先往右走再往左走。板子:for(int i=0;i<n;++i){ while(check(i,j))原创 2021-09-07 19:02:20 · 227 阅读 · 0 评论 -
L1-025 正整数A+B (15 分)
团体程序设计天梯赛-练习集L1-025 正整数A+B (15 分)题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。输入格式:输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。输出格式:如果输入的确是两个正整数,则按格式A +原创 2021-04-04 22:37:50 · 111 阅读 · 0 评论 -
L1-020 帅到没朋友 (20 分)
团体程序设计天梯赛-练习集https://pintia.cn/problem-sets/994805046380707840/problems/994805117167976448L1-020 帅到没朋友 (20 分)当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。输入格式:输入第一行给出一个正整数N(≤100),是已知朋友圈的个数;随后N行,每行首先给出一个正整数K(≤1000),为朋友圈中的人数,然后列出一个朋友圈内的所有人——为方便起见原创 2021-04-04 21:40:30 · 105 阅读 · 0 评论 -
第1节 枚举(尺取法、前缀和、差分等)、贪心
牛客算法竞赛入门班第1节 枚举(尺取法、前缀和、差分等)、贪心1.2 糖糖别胡说,我真的不是签到题目题目:示例1输入1 4 3 0 3 1 2 0 3 1 1 1 3 4输出3题目大意:(题面真的垃圾,连中文语法都不会)有n个人,每个人属于第0组或第1组,且有一个能力值b,他们站成一排,第i秒时,第i个人可以消灭所有排在他前面且能力值比他小且与它不同组的人。某人的爸爸会操作m次,比如操作c,则在第c秒结束后,b1,b2 … c都增加1,求最后有多少人存活。思路:原创 2021-09-03 15:01:58 · 390 阅读 · 0 评论 -
Distance
Distancehttps://ac.nowcoder.com/acm/problem/14268时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 131072K,其他语言262144K64bit IO Format: %lld题目描述FST作为小朋友,经常会遇到和距离有关的问题,但是他已经厌倦了曼哈顿距离和欧几里德距离,所以FST就定义了一种FST距离。这种距离并不用于空间或平面中,而运用于FST发明的一些神奇的算法中(唔… …)。设i号元素的特征值为Ai,则i和j的FST距离原创 2021-03-21 21:33:13 · 155 阅读 · 0 评论 -
Educational Codeforces Round 125 (Rated for Div. 2)
Educational Codeforces Round 125 (Rated for Div. 2)A. Integer MovesExampleinput38 60 09 15output102题目大意:问在坐标中,从原点走到一个点最少需要几步,其中,一步的长度必须是整数。思路:数学。该点是原点时,输出0,该点到原点的距离就是整数时,输出1.当该点到原点的距离不是整数时,最少只需要两步就可以走到。以各自两个点为圆心画一个圆,两圆相交的时候,肯定存在这么一个交点,原创 2022-03-23 21:28:31 · 166 阅读 · 0 评论 -
A. Weird Sum
Codeforces Round #775 (Div. 1, based on Moscow Open Olympiad in Informatics) A原创 2022-03-21 12:49:38 · 410 阅读 · 0 评论 -
C. Three displays
C. Three displaysExamplesinput52 4 5 4 1040 30 20 10 40output90input3100 101 1002 4 5output-1input101 2 3 4 5 6 7 8 9 1010 13 11 14 15 12 13 13 18 13output33动态规划:定义状态:f [ i ] [ j ] ,表示以i结尾,长度为j的串中花费的最小费用。状态转移:f [ i ] [2 ]=min(原创 2021-06-17 12:51:47 · 80 阅读 · 0 评论 -
Codeforces Round #725 (Div. 3)
Codeforces Round #725 (Div. 3)A. Stone GameExampleinput551 5 4 3 282 1 3 4 5 6 8 784 2 3 1 8 6 7 543 4 2 142 3 1 4output24532题目大意:给你一个数组(1-n每个数出现一次),你每次只能从最左或最右边删掉一个元素,求最少步数删除最大值和最小值。思路:贪心,先找出最大值和最小值的位置,答案就是:只从左边删,只从右边删,从左右两边删 里的原创 2021-06-12 22:28:34 · 397 阅读 · 0 评论 -
C. Unstable String
C. Unstable StringExampleinput30?10????10??1100output8625这题题意有点难理解,看了好几遍,后面官方补充了说明之后才看懂。。题目大意:给一个只包含0,1,?的字符串,求它的所有满足要求的子串数量。要求:字符串01010…交替,问号可看作0也可看作1。思路:动态规划。定义状态:f[a] [b]表示当第a个位置取b时,a做出的贡献。状态转移:当位置a是0时,它的贡献数是前一个字符是1时的贡献数+1,即f[a] [0原创 2021-06-05 20:26:12 · 397 阅读 · 0 评论 -
B. One Bomb
B. One BombExamplesinput3 4.*.......*..outputYES1 2input3 3..*.*.*..outputNOinput6 5..*....*..*****..*....*....*..outputYES3 3题目大意:在坐标上放一个炸弹,使这一行和这一列的墙都炸掉,判断是否有这么一个炸弹可以刚好炸完地图上全部的墙。如果有则输出YES和坐标,否则输出NO。思路:刚开始看到感觉可以用dfs,实原创 2021-06-04 11:37:33 · 84 阅读 · 0 评论 -
Codeforces Round #723 (Div. 2)
Codeforces Round #723 (Div. 2)A. Mean InequalityExampleinput331 2 3 4 5 62123 456 789 1016 9output3 1 4 2 5 6123 10 456 7899 6题目大意:给一个2 n长的元素不重复的数组,任意交换位置,使得任一元素的左右两元素之和不等于本身的两倍,求这个新的数组。思路:先从简单的看起,假设a<b<c 或c<b<a, a+c=2 b,那原创 2021-05-29 16:22:24 · 233 阅读 · 0 评论 -
B. Equalize Prices
B. Equalize PricesExampleinput45 11 1 2 3 14 26 4 8 52 21 63 55 2 5output26-17题目大意:给一个数组,可以把每个元素的值改成[a-k,a+k]以内,使得每个元素相等,求最大值。思路:这题虽然只有900的难度,但很有意思,它可以用不止一种方法做(感觉cf上的题大多都有这种特性)。我首先想到的是二分…第二种是思维+数学,因为要让所有数最后都变成一样,所以只需要考虑最大和最小的值之差,是原创 2021-05-28 11:16:50 · 126 阅读 · 0 评论 -
D. Maximum Sum of Products
D. Maximum Sum of ProductsExamplesinput52 3 2 1 31 3 2 4 2output29input213 372 4output174input61 8 7 6 3 65 9 6 8 8 6output235题目大意:给两个数组a,b,可以翻转一次a中的一个子数组,求两数组对应数的积之和最大值。思路:看n最大才5000,所以可以暴力一点O(n*n)。枚举每一种交换的情况,取最大就行了。代码:#inc原创 2021-05-26 23:14:40 · 106 阅读 · 0 评论 -
Codeforces Round #722 (Div. 2)
Codeforces Round #722 (Div. 2)A. Eshag Loves Big ArraysExampleinput361 1 1 2 2 369 9 9 9 9 966 4 1 1 4 1output303题目大意:给一个数组,让你选几个元素,然后删掉比这几个元素平均值大的元素。求最多你能删掉的元素个数。思路:贪心,直接选择最小的数,然后不等于这个的数全部删掉。代码:#include<algorithm>#include<原创 2021-05-25 16:37:44 · 131 阅读 · 0 评论 -
Codeforces Round #721 (Div. 2)
Codeforces Round #721 (Div. 2)A. And Then There Were KExampleinput32517output1315题目大意:给一个正整数n,求最大的k,使得 n & (n−1) & (n−2) & (n−3) & … (k) = 0思路:就假设n为17,二进制为10001,我们来模拟一下求解过程。17 1000116 1000015 01111因为按位与的特点就是,一位上只要有一个0,原创 2021-05-21 12:37:24 · 225 阅读 · 0 评论 -
B. Nastia and a Good Array
B. Nastia and a Good ArrayExampleinput259 6 3 11 1537 5 13output21 5 11 92 5 7 60题目大意:给一个数组,每次选择两个下标i,j和两个正整数x,y,下标对应的两个数的最小值和两个正整数x,y的最小值相等,最终使得数组相邻两个数的gcd都为1,求操作次数 和 操作过程(输出i,j,x,y).思路:题目不是要求最小操作次数,所以可以暴力一点。gcd(x,x+1)一定等于1,所以找到数组中最小值,原创 2021-05-19 15:45:49 · 167 阅读 · 1 评论 -
E. Restoring the Permutation
E. Restoring the PermutationExampleinput473 3 4 4 7 7 741 2 3 473 4 5 5 5 7 711output3 1 4 2 7 5 6 3 2 4 1 7 6 5 1 2 3 4 1 2 3 4 3 4 5 1 2 7 6 3 4 5 2 1 7 6 1 1 题目大意:给一个非严格升序的数组,替换第一次出现后后面再出现的重复数字,使得1-n的每个数字只出现一次,分别求字典序最大和最小的序列。思原创 2021-05-18 15:07:01 · 91 阅读 · 0 评论 -
D. Epic Transformation
D. Epic TransformationExampleinput561 6 1 1 4 421 221 154 5 4 5 462 3 2 1 3 1output00210题目大意:一个数组里,可以同时删去两个不同位置的数,求数组最小长度思路:统计每个数字出现的次数,只要最多的次数小于或等于后面的次数之和,最后要么剩下一个,要么不剩。如果大于,最后一定会剩下次数最多的那个数。难点:用map统计每个数字出现的次数,再根据值排序,因为map不能这样做,所以先原创 2021-05-17 23:24:13 · 213 阅读 · 2 评论 -
B. Morning Jogging
B. Morning JoggingExampleinput22 32 3 41 3 53 22 34 13 5output2 3 45 3 12 34 13 5题目大意:一个n行m列的数组,在每一行中任意交换数字,使得最终每一列的最小值之和最小。思路:贪心,把全部数升序排序,用前m个数填到每一列的某个数组里,剩下的位置按照数组里有的数字随便填。实现有点麻烦。代码:#include<algorithm>#include<iostre.原创 2021-05-13 18:58:22 · 249 阅读 · 0 评论 -
B. TMT Document
B. TMT DocumentExampleinput53TMT3MTT6TMTMTT6TMTTTT6TTMMTToutputYESNOYESNOYES题目大意:一个只有T和M的字符串中,判断能否将它在 相对位置不变的情况,拆成几个TMT子串。思路:最后T的数量肯定是M的两倍,所以不是两倍的可以排除掉。每一个M的左右都需要一个T与之配对,因此先从左边遍历,累计T和M的数量,一旦M的数量大于T,肯定不能满足条件,然后再从右边遍历一次就好了。代码:#inc原创 2021-05-09 22:42:17 · 128 阅读 · 0 评论 -
A. Phoenix and Gold
A. Phoenix and GoldExampleinput33 23 2 15 31 2 3 4 81 55outputYES3 2 1YES8 1 2 3 4NO题目大意:一个n个元素的数组,从前往后加每一个元素,任意时刻都不能让和等于x。思路:1.sum==x时只要数组总和等于x,无论怎么排序,一定不能满足要求,此时输出NO。其他情况总可以排序成满足。2.sum<x时怎么排序都可以。3.sum>x时降序排序,把元素相加,如果中间加的原创 2021-05-09 15:55:27 · 74 阅读 · 0 评论 -
E. Arranging The Sheep
E. Arranging The SheepExampleinput56**.*..5*****3.*.3...10*.*...*.**output10009题目大意:每一个*都可以向左或向右移动一格,求最少步数使得 * 成一条线。我看tag上标注了 dp,但其实这题可以做成思维题。方法:找到最中间的 *,假设为A,它两边的 * 向它靠拢,这样的步数是最少的。与A最接近的左右两边的两个 * (假设为B)走的距离等于B到A的距离+1,次最接近的两个 *(假设原创 2021-05-06 18:55:39 · 157 阅读 · 0 评论 -
G. Short Task
G. Short TaskExampleinput121234567891039691output1-123-1547-1-118-1看了别人的题解,挺复杂的,我在cf上找了大佬的代码,做了小小的简化。不得不说这代码太强了,别人都是用数论做的,这个代码用很简单的东西就做出来了。#include<algorithm>#include<iostream>#include<cstring>#define原创 2021-05-05 14:48:02 · 186 阅读 · 0 评论 -
B. AND 0, Sum Big
B. AND 0, Sum BigBaby Badawy’s first words were “AND 0 SUM BIG”, so he decided to solve the following problem. Given two integers n and k, count the number of arrays of length n such that:all its elements are integers between 0 and 2^k−1 (inclusive);th原创 2021-05-04 09:43:46 · 180 阅读 · 0 评论 -
增减序列
增减序列https://www.acwing.com/problem/content/102/给定一个长度为 n 的数列 a1,a2,…,an,每次可以选择一个区间 [l,r][l,r],使下标在这个区间内的数都加一或者都减一。求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。输入格式第一行输入正整数 n。接下来 n行,每行输入一个整数,第 i+1行的整数代表 ai。输出格式第一行输出最少操作次数。第二行输出最终能得到多少种结果。数原创 2021-04-30 23:15:35 · 618 阅读 · 1 评论 -
加法和乘法
加法和乘法 题目链接:https://ac.nowcoder.com/acm/contest/9983/J 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld题目描述有一天牛牛和牛妹在做游戏,规则如下:桌面上摆着n张纸牌,每张纸牌上写着一个正整数,由牛牛先手轮流执行以下操作:1.如果桌面上只剩一张纸牌,游戏结束,这张纸牌上的数字如果是奇数则牛牛胜利,反之牛妹胜原创 2021-02-05 16:34:51 · 2571 阅读 · 1 评论 -
D. Riverside Curio
D. Riverside Curio https://codeforces.com/problemset/problem/957/DArkady decides to observe a river for n consecutive days. The river’s water level on each day is equal to some real value.Arkady goes to the riverside each day and makes a mark原创 2021-02-02 22:29:39 · 179 阅读 · 0 评论 -
数羊
H题数羊第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛题目描述憨憨小杨晚上睡不着觉,就开始数羊,她觉得一只一只数太慢了,突发奇想出了一种新的数羊方式,羊羊数量A(n,m)由两个整形变量n和m决定,计算方式如下:现在给出n和m的值,请你帮小杨数数一共有多少只羊。输入描述:多组输入。第一行包含一个整数T(1≤T≤1000),表示有T组测试数据。每组测试数据包含一行,包含两个整数n(1≤n≤10^9)和m(0≤m≤2).输出描述:对每一组输入,在一行中输出A(n,m)的值,由于输出的结果可原创 2021-01-30 16:31:05 · 878 阅读 · 0 评论