随笔分类 -  codeforce

摘要:因为要求成功的游戏都放在后面,所以从后往前数1的个数,b[i]表示位置i前有几个1,从前往后数0的个数,c[i]表示位置i后有几个0 一旦选择了一个1,后面的所有游戏都只能选1,不能留一个0,基于这样的规定,前面只能留0,因此依次比较b[i]+c[i]的值,取最大值即可(特别地,c[n+1]为0的总 阅读全文
posted @ 2021-07-23 18:07 lemonGJacky 阅读(52) 评论(0) 推荐(0)
摘要:思路:如果一个数减去它的位数和小于等于x,那么所有小于这个数的数减去它本身的位数和都将小于等于x。可以证明当一个数满足了减去它的位数和小于等于x时,在个位数0~9的范围内,每减小1,位数和和它本身都减少1,所以0~9的范围内等价,当个位数从0减1变为9时,显然位数和增大了8,而此时数的本身仍然在减小 阅读全文
posted @ 2021-07-23 13:49 lemonGJacky 阅读(45) 评论(0) 推荐(0)
摘要:题目定义了一种操作:将一个数变为这个数二进制下的1的个数。询问有多少个不大于n的数,进行了恰好k次操作后等于1。 数据范围(1<n<21000),观察可知,任意一个大于1000的数进行一次操作后都会变成小于等于1000的数,因此可以枚举1000以内的数变为1的操作个数,当某个数x的操作数为m-1时, 阅读全文
posted @ 2021-07-23 13:31 lemonGJacky 阅读(54) 评论(0) 推荐(0)
摘要:传送门:Problem - 1180B - Codeforces 我们知道负负得正,而对于若干个数的乘积,不考虑正负号的话,将某个正数改变为负数的结果是增大了它的绝对值,使得乘积更大。 因此贪心思路是使得负数尽量多的情况下乘积最大 考虑两种情形: 1.n为偶数,则将所有数变为负数即可使得乘积最大化。 阅读全文
posted @ 2021-07-18 02:01 lemonGJacky 阅读(37) 评论(0) 推荐(0)
摘要:传送门:Problem - 1186D - Codeforces 输入的数要么向上取整,要么向下取整,那么设ans为负数的绝对值的和,sum为正数的和,对单一的负数向下取整于负数而言相当于ans++,同理正数向上取整sum++。 这里我们设ans1为ans的最小值即负数全部向上取整,ans2为ans 阅读全文
posted @ 2021-07-18 01:48 lemonGJacky 阅读(40) 评论(0) 推荐(0)
摘要:传送门:Problem - 1168A - Codeforces 定义操作使得ai变成(ai+1) mod m ,求对每个数进行的操作中最大操作数的最小值,使得序列不下降 因为m<=300000,枚举必炸,考虑对单个数操作数的最大值x进行二分 check函数: 思路:我们要使得序列前面的数尽量小,这 阅读全文
posted @ 2021-07-17 21:19 lemonGJacky 阅读(82) 评论(0) 推荐(0)
摘要:传送门:Problem - 349B - Codeforces 优先考虑位数最多,在位数最大的情况下考虑尽量使位数较高的数字更大。 取ai最小值minn,则易知最大的位数为cnt=v/minn,令全部填最小值i时的总和sum=cnt*minn 接下来按位循环,从9到1分别尝试填入,填入时判断sum+ 阅读全文
posted @ 2021-07-17 20:51 lemonGJacky 阅读(21) 评论(0) 推荐(0)
摘要:传送门: Problem - 1189B - Codeforces 考虑一段有序的序列 6 5 4 3 2 1,除了为首的元素以外,它们总是满足a[i]<=a[i-1]+a[i+1] 因此,序列是否能够构造的判断条件便是:序列中最大的元素需要小于等于第二大的元素和第三大的元素之和 构造思路:将最大的 阅读全文
posted @ 2021-07-17 20:27 lemonGJacky 阅读(29) 评论(0) 推荐(0)
摘要:传送门:Problem - 1149A - Codeforces 考虑到除了2以外所有的质数都由奇数组成,因此贪心思路为构造一个数列,使得数列中前缀和为奇数的情况尽量多。 因此可以先输出2和1,再将所有的2输出,最后再输出所有的1,此时得到的前缀和为质数的数量最多。 #include<iostrea 阅读全文
posted @ 2021-07-17 20:14 lemonGJacky 阅读(32) 评论(0) 推荐(0)