![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数学
文章平均质量分 55
【杰杰】
这个作者很懒,什么都没留下…
展开
-
D. Strange Definition
传送门题意:给你一个数列,数列中互相之间满足lcm(x,y)/gcd(x,y)lcm(x,y)/gcd(x,y)lcm(x,y)/gcd(x,y)开方后是整数的可以构成一个多重集合,每过一秒数列中的所有数都会变为他们的乘积,问第w秒的时候,数列中最大的多重集合中的元素个数。思路:通过观察式子lcm(x,y)/gcd(x,y)lcm(x,y)/gcd(x,y)lcm(x,y)/gcd(x,y)可以知道同属一个集合内的元素需要满足何种性质。对每个数分解质因数,则x=p1k1∗p2k2∗∗∗pmKmx=原创 2022-04-04 13:31:30 · 292 阅读 · 0 评论 -
P1360 [USACO07MAR]Gold Balanced Lineup G
传送门题意:有n天,m种能力,每天给你一个数x,每天提升的能力用该数的二进制表示,1为提升,反之则不,问你最长的连续几天提升的每种能力相同的天数。思路:对于每一种能力值,可以通过前缀和来计数,而如果第l天到第r天满足要求,设bit[i][j]表示第i天第j种能力值的前缀和,那么显然可以得到:bit[r][1]−bit[l−1][1]=bit[r][2]−bit[l−1][2]=......bit[r][m]−bit[l−1][m]bit[r][1]-bit[l-1][1]=bit[r][2]-bi原创 2022-03-24 22:47:25 · 552 阅读 · 0 评论 -
P1286 两数之和
传送门题意:给你n的数的两两之间的和,求这n个数。思路:设这n个数从小到大分别为x1,x2…xn,n个数的两两之和为a1,a2......an∗(n−1)a_1,a_2......a_{n*(n-1)}a1,a2......an∗(n−1),枚举x1,在每次枚举中,将a遍历,并标记,对于每个ai,若当前的ai未标记,则说明该ai可以写为x1+xkx_1+x_kx1+xk的形式,然后求出xkx_kxk,并将已推出的x和xkx_kxk相加的和标记。#include<bits/st原创 2022-03-23 17:56:53 · 294 阅读 · 0 评论 -
序列。。。
传送门题意:见题面。思路:设f(n)为gcd(x,y)为n的序对的对数,g(n)为gcd(x,y)为n的倍设f(n)为gcd(x,y)为n的序对的对数,g(n)为gcd(x,y)为n的倍设f(n)为gcd(x,y)为n的序对的对数,g(n)为gcd(x,y)为n的倍数的序对的个数,数的序对的个数,数的序对的个数,那么显而易见的:g(n) = ∑n∣if(i)\sum_{n|i}f(i)∑n∣if(i),这个式子反演后得:f(n)=∑n∣imu(i)∗g(i/n)f(n) = \sum_{原创 2022-02-11 20:15:28 · 346 阅读 · 0 评论 -
华华给月月出题
传送门题意:求题中所给式子的答案。思路:题目唯一的难点在于想到f(x)=xnf(x) = x^nf(x)=xn是一个完全积性函数,下面简单证明一下:设有f(x)=xn,f(y)=yn且x≤n并且y≤n,则:f(x∗y)=(x∗y)n=xn∗yn=f(x)∗f(y)。设有f(x) = x^n,f(y) = y^n且x\leq n 并且 y\leq n,则:f(x*y) = (x*y)^n = x^n*y^n = f(x)*f(y)。设有f(x)=xn,f(y)=yn且x≤n并且y≤n,则:f(x∗原创 2022-02-11 17:09:09 · 518 阅读 · 0 评论 -
CF D. GCD Table
传送门题意:给你一个n*m的矩阵,第i行j列元素的值为gcd(i,j),现给你一个长度为k的序列,问这个序列是否能和矩阵中某一行连续子串匹配。思路:对于a1a_1a1来说,我们可以列出如下式子:gcd(i,j)=a1gcd(i,j)=a_1gcd(i,j)=a1,由于选取的序列是连续的,又可以列出所有关于a1到aka_1到a_ka1到ak的式子:gcd(i,j)=a1gcd(i,j)=a_1gcd(i,j)=a1gcd(i,j+1)=a2gcd(i,j+1)=a_2gcd(i,j+1原创 2022-01-24 11:19:50 · 1299 阅读 · 0 评论 -
D. Martial Arts Tournament
传送门题意:给你n个数,构造一组x,y,将这n个数划分为小于等于x,大于等于y以及大于x小于y的数三个区间,我们可以往每个区间添加数,使得每个区间的数为2的幂次,输出添加数的最小个数。思路:设num[x]为1-x中数的个数,我们枚举小于等于x的区间需要添加的2的幂次和大于x且小于y的2的幂次,那么剩下的部分自然就是大于等于y的数字个数,枚举求最小添加数。#include<bits/stdc++.h>using namespace std;#define ll long long原创 2022-01-17 18:48:22 · 679 阅读 · 0 评论 -
Alternating Sum
传送门思路:首先可以得出这是一个公比为b/a的等比数列,它的周期为k,因而每两个相邻周期的和的关系为sumi=sumi−1∗(b/a)ksum_i=sum_{i-1}*(b/a)^{k}sumi=sumi−1∗(b/a)k,所以我们可以先求出第一个周期的和,剩下的就是一个等比数列求和即可。#include<bits/stdc++.h>using namespace std;#define ll long long#define endl '\n'const ll mod =原创 2022-01-03 18:49:52 · 484 阅读 · 0 评论 -
Sum of Consecutive Prime Numbers
传送门题意:给你一个数n,将这个数表示成一段连续素数的和,问你有多少种表示形式。思路:欧拉筛筛出4e7之前的素数,再用双指针维护区间和。#include<bits/stdc++.h>using namespace std;#define ll long longint cnt;int vis[40000010];int pri[10000010];ll sum[10000010];void oula(){ for(int i = 2; i <= 400000原创 2021-12-30 12:07:46 · 471 阅读 · 0 评论 -
Prime Distance
传送门题意:求区间l到r内差最小和差最大的质数对。思路:根据“若x为合数,则它在区间[2,x][2,\sqrt{x}][2,x]内一定有最小质因数”(也就是欧拉筛的思想),我们可以先筛出[2,2147483647][2,\sqrt{2147483647}][2,2147483647]内的所有质数,再用这些质数去筛出[l,r][l,r][l,r]内的所有合数,这样就可以找到区间内的所有质数。#include<bits/stdc++.h>using namespace std;#原创 2021-12-28 20:08:44 · 147 阅读 · 0 评论 -
P1495 【模板】中国剩余定理(CRT)/曹冲养猪+中国剩余定理讲解
传送门借此题复习一下中国剩余定理。题意:此题可简化成求同余方程的解(a1...an互质a_1...a_n互质a1...an互质):x mod a1=b1x\ mod\ a_1=b_1x mod a1=b1x mod a2=b2x\ mod\ a_2=b_2x mod a2=b2x mod a3=b3x\ mod\ a_3=b_3x mod a3=b3…x&原创 2021-12-26 21:22:24 · 1369 阅读 · 0 评论 -
J. Xingqiu‘s Joke
传送门题意:给你两个数a,b,每次可对两个数同时进行三种操作:加1,减1或者同时除以他们的公共质因数,问使得其中任意一个数到达1的最小操作 次数。思路:不妨设a>b,f(a,d)表示a,b-a这组数转化为1的最小次数,d为b-a的值,设k为b-a的质因数,那么f(a,b)是可以由状态f(a/k,b/k)和f(a/k+1,b/k)转化而来,于是,通过dfs的方式求解。#include<bits/stdc++.h>using namespace std;#define ll l原创 2021-12-25 22:32:26 · 832 阅读 · 0 评论 -
D. Fox And Jumping
传送门题意:给你n张卡片和初始坐标0,每张卡片都有一个lil_ili,每一张卡片可以跳到当前坐标加减lil_ili的位置同时每张卡片有对应的花费,每张卡片选取后可以任意次使用,问你想要跳到任意一个格子的最小花费。思路:首先解决一个问题:选取的卡片要满足何种条件才能够走到所有格子。这个问题不难解决,假设选取的卡片能跳的距离为a1,a2...aka_1,a_2...a_ka1,a2...ak,当前位置为pospospos那么选取的这k个卡片必须要能跳到pos+1或pos-1的位置,这样才能使原创 2021-12-18 14:01:21 · 242 阅读 · 0 评论 -
stein求gcd
于欧几里得算法的对比与欧几里得求gcd相比,stein算法的优势在于稳定,欧几里得算法中存在取模运算,而当模数过大时,取模运算的耗时会增加,而stein算法中只涉及移位,速度超快!原理gcd(ka,kb)=k*gcd(a,b)实现int stein(int a,int b){ if(a<b)a^=b,b^=a,a^=b;//交换 if(!b)return a; if((!(a&1)) && (!(b&1)))return stein(a>>原创 2021-12-17 23:46:31 · 173 阅读 · 0 评论 -
A New Function(除法分块)
传送门题意:设f(i)为i除了1和i之外的约数的和,求∑1if(i)\sum_1^if(i)∑1if(i)。思路:对于n来说,1~n中是i的倍数的个数有n/i个,利用这个可以很轻松的计算出约数i的贡献,但枚举每一个约数在时间复杂度上肯定过不去,于是想到除法分块,对于数n的每一个除法分块[li,ri][l_i,r_i][li,ri],n/li−1n/l_i-1n/li−1就为这一段区间中的每一个数的贡献次数(不计算1和本身),用这一段区间的和乘上贡献次数即可得出这段区间的总贡献。#incl原创 2021-12-14 13:55:13 · 1161 阅读 · 0 评论 -
数论刷题计划
约数之和因式分解然后用乘法原理表示出答案,再用等比求和公式求解。原创 2021-12-14 00:31:40 · 822 阅读 · 0 评论 -
约数之和。
约数之和题意:求出aba^bab的约数之和。思路:将a分解质因数得a=p1num1∗p2num2∗......pnnumna=p_1^{num1}*p_2^{num2}*......p_n^{numn}a=p1num1∗p2num2∗......pnnumn,那么aba^bab分解质因数就是a=p1num1+b∗p2num2+b∗......pnnumn+ba=p_1^{num1+b}*p_2^{num2+b}*......p_n^{numn+b}a=p1num1+b∗p2num2+b∗原创 2021-12-14 00:28:22 · 956 阅读 · 0 评论 -
Codeforces Global Round 17 D. Not Quite Lee(gcd)
传送门题意:给你一个序列a,对于数aia_iai,将其写成任意aia_iai个连续的数,记第aia_iai组数的和为sumisum_isumi,现要你找出所有的sumisum_isumi的组合,使每个组合中的sum的和为0。思路:经过推理,不难发现:对于aia_iai为偶数的情况,它的贡献为ai/2+ai∗ka_i/2+a_i*kai/2+ai∗k,k为任意整数,下同;对于aia_iai为奇数的情况,它的贡献为ai∗ka_i*kai∗k。同时,我们也可以得出第一个重要结论原创 2021-11-25 20:39:15 · 347 阅读 · 0 评论 -
P1214 [USACO1.4]等差数列 Arithmetic Progressions
传送门题意:给你一个由m限制下的集合,在这个集合中找出所有长度为n的等差数列。思路:暴力+优化。首先可以枚举公差d,d的最大值取m∗m∗2/(n−1)+1m*m*2/(n-1)+1m∗m∗2/(n−1)+1即可,然后以公差d枚举数列的最后一位,判断该位是不是该数列的第n个数。#include<iostream>#include<string>#include<map>#include<iomanip>#include<bits/st原创 2021-10-21 11:50:57 · 99 阅读 · 0 评论 -
高斯消元。
传送门高斯消元:用模拟的方式来实现对多个方程组的求解。高斯消元可分为两个步骤:化简和回代化简:将方程组组成一个增广矩阵,并将其化为行阶梯矩阵。int Gauss(){ for(int c = 1; c <= n; c++) { int f = c; for(int r = c; r <= n; r++) { if(fabs(a[f][c]) < fabs(a[r][c])) { f = r; } } for(int i = 1;原创 2021-10-20 12:22:01 · 116 阅读 · 0 评论 -
P1297 [国家集训队]单选错位
传送门题意:有n个题目,每个题目有aia_iai个选项,由题目所给的代码生成序列a,在保证原先答案全部正确的情况下,将第i题的答案抄在了第i+1题上,问你现在做对题目的期望。思路:太离谱了,还以为会卡精度啥的,结果一发就过了,让我对数据产生了怀疑。看第i题的选项数aia_iai,因为目前aia_iai处的答案来自于ai−1a_{i-1}ai−1,如果ai−1≤aia_i{-1}\leq a_iai−1≤ai,即现在在小于aia_iai的数中随机选一个数,而这个数成为正确答案的概率为原创 2021-10-15 23:17:43 · 61 阅读 · 0 评论 -
Educational Codeforces Round 115 (Rated for Div. 2) D. Training Session
传送门题意:给你n个题,每个题都有一个主题和一个难度,输入保证同一个主题下不会有相同难度的题出现,现选择三个题组成一个题集,问你满足以下至少一个条件的选择有多少种:1.所选择的三个题目主题互不相同。2.所选择的三个题难度互不相同。思路:直接算出所有方案数的难度过大,于是走反面,用总的选择数-非法的选择数。对于此题的输入,我们可以建立邻接矩阵,并将每一种难度的题的数目装入桶中。遍历所有的问题,对于问题a(i,j)a(i,j)a(i,j),i表示主题,j表示难度,一定包含问题a的非法组合的数目为:原创 2021-10-12 22:30:58 · 112 阅读 · 0 评论 -
P1072 [NOIP2009 提高组] Hankson 的趣味题
传送门题意:给你a0,a1,b0,b1,问你gcd(x,a0)=a1,lcm(x,b0)=b1,有多少个x满足条件gcd(x,a0)=a1,lcm(x,b0)=b1,有多少个x满足条件gcd(x,a0)=a1,lcm(x,b0)=b1,有多少个x满足条件。思路:先看gcd(x,a0)=a1gcd(x,a0)=a1gcd(x,a0)=a1这个式子,x可以被拆分为数个质数,a0同理,那么它俩的gcd就应该为公共质因数的乘积,也就是说x/a1x/a1x/a1和a0/a1a0/a1a0/a1没有公共质因数原创 2021-09-28 15:27:27 · 108 阅读 · 0 评论 -
P1069 [NOIP2009 普及组] 细胞分裂
传送门题意:给你m1,m2,现在有M=m1m2M = m1^{m2}M=m1m2个试管,n种细胞,每种细胞经过1s可以分裂成aia^iai个细胞,问你可以将细胞平均分配到M个试管的最短时间。思路:先得出m1的质因数集合s1以及这些m1中这些质因数的个数,可以想到:如果i细胞可以在有限的时间内得到合适的数量使其可以分配到M个试管中去,那么i细胞每次分裂的个数ai,它的质因数集合设为s2,则s1一定包含于s2。于是,s2集合里的质因数每秒加1,而s1里的每种质因数的个数应该还需要乘上m2,最后我们只原创 2021-09-26 11:50:04 · 421 阅读 · 0 评论 -
P1621 集合
传送门思路:先将质数筛出来,再用筛出的质数去筛a到b的数,并将其加入到并查集中。#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>#include<map>#include<queue>#include<math.h>#include<vector>using namespace std;#de原创 2021-09-17 21:56:59 · 68 阅读 · 0 评论 -
Codeforces Round #730 (Div. 2) D1. RPD and Rap Sheet (Easy Version)
传送门思路:假设0到n-1之间的数为密码,则可以想到一个可行的解法:第一次输出0,之后的每一次都输出(i−1)⊕(i−2)(i-1)⊕(i-2)(i−1)⊕(i−2)。假设答案为x,那么第一次输出0,答案变为0⊕x;第二次输出0⊕1,那么答案就变为0⊕x⊕0⊕1,即x⊕1;第三次变为x⊕2…以上利用异或的性质,可以在n次询问中获得答案。#include<bits/stdc++.h>#include<ctime>using namespace std;#def原创 2021-09-11 20:03:29 · 88 阅读 · 0 评论 -
Educational Codeforces Round 113 (Rated for Div. 2) C. Jury Meeting
传送门题意:给你一个序列,每次从头到尾每一次让不为0的值减1,执行数次直到序列中所有数为0,问你满足序列中不会出现同一个数连续减两次的排列的种数。思路:易得:当序列中至少有一个最大数在所有比它小1的数的右边,那么该序列不满足条件,为了方便,考虑反面,用整个序列全排列的个数减去反面的个数。考虑反面:当一个最大数在第n位时,这种情况的个数为:An−1n−1∗A最大数个数最大数个数∗A比最大数小一的数的个数比最大数个数小一的数的个数A_{n-1}^{n-1}*A_{最大数个数}^{最大数个数}*A_{原创 2021-09-10 00:17:59 · 61 阅读 · 0 评论 -
Codeforces Round #742 (Div. 2) C. Carrying Conundrum
传送门题意:给你一个数n,并规定了一种特殊的运算规则,问你有多少种选择使得a,b在该运算规则下相加等于n。思路:因为进位不再是向左1位进,而是向左2位进位,因而可以把奇偶位分开来看,将奇数位的数组成一个数字,并得出组成该数字的方法数,偶数位同理,两者相乘-2即为答案(a,b不全为0).#include<bits/stdc++.h>#include<ctime>using namespace std;#define ll long long ll a[100];l原创 2021-09-07 13:49:20 · 121 阅读 · 0 评论 -
Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2) D. Take a Guess
传送门题意:有一个长度为n的隐藏数列,你可以询问最多2*n次数列中某两个位置的数的与或者并,问你这个数列中倒数第k大的数是多少。思路:结论:a+b = a&b+a|b,所以,我们可以求得a1a_1a1与其它数的和,再次询问获得a2+a3a_2+a_3a2+a3的和,通过a1+a2与a2+a3与a1+a3a_1+a_2与a_2+a_3与a_1+a_3a1+a2与a2+a3与a1+a3可以求得a1a_1a1的值,从而求出所有数的值。#include<stdio.h&原创 2021-09-03 18:15:24 · 120 阅读 · 0 评论 -
百度之星2021复赛 1002-Add or Multiply 1
传送门思路:因为对于*和+来说,两者作用对等,于是,为了方便后续结算,当n大于m的时候,使其值交换。考虑对+进行划分,可以划分为(1,2,3…n)个集合,对于每一种划分,我们可以将乘号以“填空”的方式填入每个集合的左边或者右边,需要注意的是,两个相邻的集合之间一定要有一个乘号,否则这两个集合就可以合并为一个集合,用这种方式,加号可以将乘号划分为最多n-1,n,n+1个集合,至此,还没完,对于加号的每个集合来说,集合内部的元素的顺序不会影响最终的结果,但集合与集合的顺序会,因而,我们还需要知道每种划分原创 2021-08-22 19:09:01 · 187 阅读 · 0 评论 -
Codeforces Round #728 (Div. 2)-B. Pleasant Pairs
传送门题意:给你一串数字,求满足ai+aj=i+ja_i+a_j=i+jai+aj=i+j且i<j的序列对数。思路:对于第i个数,仅当下标j满足(j+i)=ai+aj(j+i)=a_i+a_j(j+i)=ai+aj时合法,也就是说,每次应选择j+i为aia_iai的倍数的下标。#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>#in原创 2021-08-12 23:02:10 · 82 阅读 · 0 评论 -
牛客8-K.Yet Another Problem About Pi
传送门题意:给你每个格子的长和宽,问你长度为圆周率的线最多能经过几个格子。思路:对于经过某点的格子来说,它可以花费无限小的长度来经过该点相接的4个格子,然后又因为给的是pi,所以该长度可以不计。于此,我们有两种走法,一种是沿着格子走较短路,但每次经过点时只会额外经过2个格子,而如果走较长的对角线,则可以经过额外的3个格子,而对格子的选择可以采取以下方式:计算额外的格子/距离来算得哪种走法最优,然后再判断开始和结束是否需要切换走法。#include<cstdio>#include&原创 2021-08-12 22:13:45 · 81 阅读 · 0 评论 -
牛客8-OR
传送门题意:给你b序列和c序列,问你有多少种构造a序列的方法。思路:对于某二进制位来说,当其01值确定后,所有序列的该二进制位就确定了,依次来枚举位。#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>#include<map>#include<queue>#include<math.h>using name原创 2021-08-12 11:33:04 · 67 阅读 · 0 评论 -
C. Manhattan Subarrays
传送门题意:给你一个序列,然后以序列中的数和其下标来描述一个点,问你有多少个区间中的数满足题意。思路:要想满足题意条件,就要保证合法的序列中没有一个点被另外两个点所确定的矩形包含,而由这个推论,可以进一步得出最长的合法序列不会超过4。#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include &原创 2021-08-09 10:54:39 · 97 阅读 · 0 评论 -
Yes, Prime Minister
传送门思路:先筛一遍质数,对于n<0,需要先将其连加到刚好为正,答案为2n+1+刚好为正数时的那个答案;对于n>0,每一次n++,看n或者n2+1是否为质数。#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>#include<map>#include<queue>#include<math.h>u原创 2021-08-07 23:33:57 · 331 阅读 · 0 评论 -
牛客7 H-xay loves count
传送门思路:去重排序并记录每个数的个数,对于i和j对应的相同的数a,ans+=a的数量∗a的数量∗(a∗a)的数量ans+=a的数量*a的数量*(a*a)的数量ans+=a的数量∗a的数量∗(a∗a)的数量,对于i和j不相同的数,将上述值*2即可。#include<bits/stdc++.h>using namespace std;#define ll long long#define endl '\n'll vis[1000010];ll b[1000010];int m原创 2021-08-07 22:25:48 · 116 阅读 · 0 评论 -
牛客暑假训练营7-xay loves or
传送门题意:给你两个数x,s,问你有多少个数or上x等于s。思路:当x==s时,答案为2的x的二进制位上1的个数次方-1.否则寻找x的二进制位为1而s的二进制位为1的次数cnt,并判断是否存在x的二进制位为0而s的二进制位为1的情况,若有,则答案为pow(2,cnt)-1,否则为pow(2,cnt)。#include<bits/stdc++.h>using namespace std;#define ll long longint a[1000];int res[110];原创 2021-08-07 20:55:33 · 78 阅读 · 0 评论 -
牛客5-B.Boxes
传送门题意:一共n个盒子,每个盒子里放着黑球或者白球,现在问你得知每个盒子中球的颜色所需要的最小花费的期望。思路:有两条确认颜色的路线可选:1、暴力开启所有盒子,这样花费的代价是Σi=1n\Sigma{_{i=1}^n}Σi=1nw[i].2、花费c代价,然后从代价最小的盒子开始开,对于每一次开盒,该次开盒后能确认所有盒子颜色的概率为(1-1/2n−i^{n-i}n−i)。#include<bits/stdc++.h>using namespace std;#define原创 2021-08-06 23:33:21 · 64 阅读 · 0 评论 -
Codeforces Round #735 (Div. 2) C. Mikasa
传送门题意:给你n和m以及由n异或(1-m)组成的集合,问你这个集合中没有出现过的最小的非负整数是多少。思路:n⨁n\bigoplusn⨁x=kx=kx=k,且x为1到m中的每一个数由交换律可得:n⨁\bigoplus⨁k=x=x=x,而x为1到m中的每一个数,所以要找到集合{n⨁n\bigoplusn⨁x=kx=kx=k}中出现的最小非负整数,就是要找到一个最小的k,满足n⨁\bigoplus⨁k ≥\geq≥ m+1。现在要找到这个k,可以对每一个二进制位进行判断。从最高位开始,如果该原创 2021-08-06 23:08:36 · 69 阅读 · 0 评论 -
牛客4.LCS
传送门思路:三个字符串中共有的子串长度一定为min(a,b,c),然后用类似于容斥的方法即可。#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <utility>#include <vector>#inclu原创 2021-08-01 00:05:45 · 77 阅读 · 0 评论