摘要: 题目定义了一种操作:将一个数变为这个数二进制下的1的个数。询问有多少个不大于n的数,进行了恰好k次操作后等于1。 数据范围(1<n<21000),观察可知,任意一个大于1000的数进行一次操作后都会变成小于等于1000的数,因此可以枚举1000以内的数变为1的操作个数,当某个数x的操作数为m-1时, 阅读全文
posted @ 2021-07-23 13:31 lemonGJacky 阅读(54) 评论(0) 推荐(0)
摘要: n维球上的任意一点到球心距离相等,故设球心坐标为(x1,x2,...,xn) 则有公式∑(ai,j-xj)2=C 设法消去平方项x2,考虑相邻两项相减 可将公式化为Σ2(ai,j-ai+1,j)xj=Σ(ai,j2-ai+1.j2) 此时就可以构造线性方程组了 #include<iostream> 阅读全文
posted @ 2021-07-20 01:12 lemonGJacky 阅读(59) 评论(0) 推荐(0)
摘要: 高斯消元模板 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> using namespace std; double a[1010][1 阅读全文
posted @ 2021-07-18 18:00 lemonGJacky 阅读(38) 评论(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)