
数学
sunnyorrainy
这个作者很懒,什么都没留下…
展开
-
中位数的和,cf1440B
题意:有n*k个数,它们是从小到大排列的,把它们分成k组,每组n个,然后找出每组的中位数,这题的中位数是的定义是,,问所有的中位数加起来,最大值是多少?题目链接思路:这题我想了好久,其实就是找最大的数,每次都找最大的数,合法的最大的数。每一组的中位数,比它大的数的个数:,我们不需要去关心比中位数小的数,反正总能找到。于是就从后往前一直加上和法的最大值就行了。#pragma warning(disable:4996)#include<iostream>#include原创 2020-11-18 20:25:34 · 285 阅读 · 0 评论 -
求对应的数,所有绝对值之差的和
题意:题目链接有2n个数,需要把他们分解成两堆,每一堆选取n个数, 总共有种方式。对于每一种方式第一堆从小到大排序,第二堆从大到小排序。 求sum=问所有的方式的sum之和是多少。思路:首先,有一个规律,无论怎么分组,sum值都是固定的。这个需要仔细观察。如果不知道这个规律,这个题就不知道怎么做了。把sum值求出来,然后乘上方式的总数就行了。求组合数需要逆元,不能直接除。#pragma warning(disable:4996)#include<iostream>原创 2020-11-14 16:58:21 · 663 阅读 · 0 评论 -
分解质因数cf1445
题意:给出两个数p和q。求最大的x, 使得p%x==0 && q %x !=0思路:如果p%q!=0, x就是p。如果p % q ==0。那么q是p的因子,q的因子都是p的因子。q可以表示为, ci是质因数,p也一样。x只需要有一个质因子和q不同就行了。求最大的x,就先让x等于p, 然后一直去除以q的质因子,直到x不能整除q,取最大值。#pragma warning(disable:4996)#include<iostream>#includ原创 2020-11-14 15:04:18 · 800 阅读 · 0 评论 -
数学知识,数论
1不能用费马小定理求逆元有公式 a / b % mod = a %(mod * b)/b2 递归求逆元mod必须为素数LL inv(LL i)//mod必须是素数{ if(i==1)return 1; return (mod-mod/i)*inv(mod%i)%mod;}原创 2020-10-16 21:32:34 · 195 阅读 · 2 评论 -
求Miu函数, 找规律
题意:题目链接思路:找出规律, 当k较大的时候, 是循环的。只需要求出前几个数就可以了。首先打表,求出1e7的miu函数, 必须要用线性筛,不然超时。#pragma warning(disable:4996)#include<iostream>#include<algorithm>#include<cstdio>#include<map>#include<cmath>#include<vector>原创 2020-09-27 09:57:38 · 797 阅读 · 0 评论 -
模的顺序,计数
题意:题目链接给两个数a, b然后询问q次。每次询问给出一个区间l, r。区间内的数x, 如果x%a%b!=x%b%a, 也就是先模a还是先模b的结果不同,那么x就是符合条件的数,计算区间内的符合条件的数的个数。思路:这个题的l,r区间范围是1e18,不可能遍历。只能用去找公式或者是找规律。a和b的最小公倍数就是一个周期。因为a和b的范围小,所以可以暴力找出最小公倍数或者a*b内的所有符合条件的数。然后再算出l,r区间内的数。还有一个规律:取mx为a,b中的较大数,lcm是...原创 2020-07-10 10:00:56 · 197 阅读 · 0 评论 -
连乘积&模
题意: n个数,把第i个数和第j个数之差的绝对值相乘, 1<= i<j <=n, 取模m。n在1e5的范围内,m在1000的范围内。题目链接思路: 当n大于m的时候,肯定会有两个数与m同余,也就是说这两个数相减后%m肯定是0当n小于等于m的时候,直接暴力。#pragma warning(disable:4996)#include<iostream>#include<cstring>#include<cstdio&...原创 2020-06-01 16:22:11 · 715 阅读 · 0 评论 -
组合不重复数字
题意: 有两个数组,数组中的元素都是不同的。分别从两个数组中挑一个数字, 然后相加,组合成新的数字,所有新组成数字也不能有相同的。题目链接思路: 组成不同数字的题。 先分别排序,然后依次对应相加。就肯定不会有一样的数字。#pragma warning(disable:4996)#include<iostream>#include<cstring>#include<cstdio>#include<set>#i...原创 2020-06-01 16:03:56 · 808 阅读 · 0 评论 -
构造最长上升子序列
题意: 需要构造一个由从1到n的数字组成的序列,并且给出一个字符串,由'>',和 ‘<’组成,第i个字符表示第i个数字和第i+1个数字的大小关系,字符串长度是n-1, 所构成的序列需要满足大小关系。输出两个序列,第一个序列要使最长上升子序列的长度最短,第二个序列要让长度最长。题目链接思路: 让最长上升子序列长度最长,就是让序列整体呈现出上升的趋势,所以把序列初始化为从1到n的序列,然后再根据大小关系用reverse函数进行调整。#pragma warnin...原创 2020-05-31 22:08:50 · 378 阅读 · 0 评论 -
0和1的个数之差
题意: 一个由0和1组成的字符串s,长度小于等于1e5,它可以构成字符串t, t=sssss....,t是无限长的。在t的前缀中(空串也是前缀)找出0的个数和1的个数之差(个数差记为d)为x的前缀,输出个数。x是在-1e9~1e9范围内。如果有无穷个则输出-1。思路: 首先考虑特殊情况。前缀个数为0的时候,是在s中不存在个数差d等于x的前缀,并且s中0和1的个数相同。无穷个是s中存在个数差d等于x的前缀,且s中0和1的个数相同。对于一般的情况,用map记录下所有前缀的个数差d的...原创 2020-05-29 11:10:44 · 701 阅读 · 0 评论 -
好子串的个数(计数)
题意: 一个由01组成的字符串,如果它的子串的长度等于这个子串转换成10进制的值,那么这个子串就是好子串。输出好子串的个数。所有子串的长度小于2e5题目链接思路: 2e5的数据,小于2的30次方。从左到右遍历,遇到1的时候,往后遍历30个字符,记录数值,判断数值是否小于可能的最大长度。只要小于等于就可以,因为前导零不会增加数值。 #pragma warning(disable:4996)#include<iostream>#include&...原创 2020-05-28 17:32:08 · 987 阅读 · 0 评论 -
得到至少k个相同的数
题意: 给一个长度为n(<=2e5)的序列,可以进行操作,每次可以对一个元素除以二向下取整。需要得到至少k(<=n)个相同的数,可以把这些数全部变成零,所以肯定有解。问至少需要多少次操作。思路: 因为是除以二向下取整,所以不会出现超过2e5的数,对原数组的每一个数进行操作,把这个数可能得到的所有数(包括它自己)和与之对应的操作次数记录下来。然后从0到2e5,进行枚举。并且更新答案,找出最小值。#pragma warning(disable:4996)#in...原创 2020-05-27 21:44:54 · 405 阅读 · 0 评论