数学
文章平均质量分 53
扩展的灰
扩展的灰(Extended Ash)
展开
-
Jzoj5414 幸运值
校庆志愿者小Z在休息时间和同学们玩卡牌游戏。一共有n张卡牌,每张卡牌上有一个数Ai,每次可以从中选出k张卡牌。一种选取方案的幸运值为这k张卡牌上数的异或和。小Z想知道所有选取方案的幸运值之和除以998244353的余数。为什么中间跳过了几道题?因为现在来不及改了先把过了的搬上来吧套路:按位计算贡献我们考虑,对于32个位置,选择k个异或为1的选法有多少我们记cnt[i]表示第i位为1原创 2017-11-07 07:23:27 · 481 阅读 · 0 评论 -
Jzoj5418 合影
题目背景 热烈庆祝北京师范大学附属实验中学成立100周年!问题描述 经过一天的忙碌,志愿者们结束了他们的工作,准备站在一排合影留念。 现在总共有n名志愿者留下来准备合影。不过,进程并不是那么顺利,有些同学提出了一些奇奇怪怪的要求(每个人最多只会提出一个):他必须站在另外一个同学的左边(不一定相邻),仁慈的老师满足了他们的要求。这时,其中一位来原创 2017-11-07 07:52:09 · 345 阅读 · 0 评论 -
Jzoj4831 方程式
首先题目有一个条件就是所有的实数解都在[1,20]之间且都是整数所以就枚举一下就好了,问题就是要输出重根,以及重根的次数一个根x是方程f(x)=0的k重重根的充分必要条件就是对于f的0~k-1导数f'都有f'(x)=0,那么我们将这个多项式所有的导函数都求出来枚举一下就好了#include#include#include#define LL long longusing n原创 2017-10-29 18:59:17 · 345 阅读 · 0 评论 -
Jzoj4782 Math
若一个数x是平方数,则d(x)为平方数所以就是要考虑有多少对i*j为平方数我们假设,i=p*k^2,那么,j=p*q^2时,i*j为平方数(p不含平方因子,k,q为正整数)所以,我们对于一个p,对应的j就有[√m/p]种我们考虑快速求p对于一个合法的p,我们可以筛掉p*k^2 ,这样时间复杂度是就是线性的#include#include#define N 10000原创 2017-10-24 20:46:42 · 452 阅读 · 0 评论 -
Jzoj4755 快速荷叶叶变换
求ΣΣ(N%i)(M%j)(i我们发现原式就是Σ(N%i)*Σ(M%j),这样分开算可以得到60分考虑化简Σ(N%i)=Σ(N-i*[N/i])=ΣN-Σi*Σ[N/i]=N^2-N*i*Σ[N/i]又因为[N/i]取值只有√N种,可以考虑分段计算,若当前为i则i~[N/[N/i]]的结果是一样的复杂度O(√N+√M)#include#define P 1000000原创 2017-10-23 20:37:52 · 338 阅读 · 0 评论 -
Jzoj4742 单峰
很明显,山峰一定是n那么无论其他的数在n的左边还是右边都对应一种单峰数列ok,答案就是2^(N-1)#include#include#include#define L long long#define M 1000000007using namespace std;L pow(L x,L k){ L S=1; for(;k;x=x*x%M,k>>=1) if(k原创 2017-10-23 18:40:51 · 448 阅读 · 0 评论 -
Jzoj4744 同余
线段树套分块/主席树!我们考虑到ai,p,q比较小(若p较大,则kp+q的数量就比较少,可以暴力枚举若p较小,可以预处理,令g[i][j]表示膜i余j的数的个数我们取这个界为sqrt(maxp)=100将询问放到每个节点上,依次处理处[1,i]的答案最后ans(l,r)=ans(r)-ans(l-1)即可#pragma GCC optimize("O3")#pragm原创 2017-10-23 19:28:56 · 385 阅读 · 0 评论 -
Jzoj4745 看电影
听说NOIP2016大家都考得不错,于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影。可是省常中OI队的同学们共有 N(N >= K)人。于是机智的你想到了一个公平公正的方法决定哪K人去看电影。N个人排成一圈,按顺时针顺序标号为1 - N,每次随机一个还存活的人的编号,将这个人踢出。继续上述操作,直到剩下K个人。但这样显然太无聊了,于是小S又想出一个牛逼的方法。原创 2017-10-23 19:37:55 · 359 阅读 · 0 评论 -
Jzoj1158荒岛野人
正解:同余方程对于每对野人i,j,解方程(p[i]-p[j])=c[j]-c[i](mod Answer) 若在min(l[i],l[j])以内有解则不行(++ANS)否则可以#include#includeusing namespace std;int c[20],p[20],l[20],n,M;int extgcd(int a,int b,int& x,int& y){原创 2017-09-19 18:47:19 · 580 阅读 · 0 评论 -
扩展gcd以及同余方程ax=b(mod M)
关于扩展gcd其实没有必要搞懂,背下来就好了如果不会的自行学习对于方程ax=b(mod M),我们可以将其化简成为ax+My=b,让后用扩展gcd求解当b|r=gcd(a,M)时,方程有r个解,否则无解,对于有解的情况,每个解为用gcd求出的x乘上b/r+k*(M/r)int extgcd(int a,int b,int& x,int& y){ if(b){ int r=extg原创 2017-09-19 18:48:56 · 2041 阅读 · 0 评论 -
Jzoj1306 Sum
先预处理出取模后的前缀和s,那么问题变成min(s[j]-s[i]%P)且s[j]-s[i]%P>=k把s序列反过来作,对于每个数s[i],维护一个set存有s[i]+1~s[……原创 2017-09-19 21:12:53 · 483 阅读 · 0 评论 -
Jzoj1164求和
若两个数的最大公约数为1,则这两个数互质。现在给出一个正整数N(1是不是很像欧拉函数呢没错,我们发现,对于i,若有gcd(i,n)=1则必有gcd(n-i,n)=1,所以互质的数是成对出现的!正好,φ(N)也必然是一个偶数所以answer=N*φ(N)/2求φ(N)可以用sqrt(N)的方法,这里不多讲#includeint N,M,K;int main(){ s原创 2017-09-19 19:43:05 · 452 阅读 · 0 评论 -
Jzoj1322硬币
动态规划,设f[i][j]为上一次取到第i个硬币,上一次取了j个硬币的最大答案,则f[i][j]=max(SUM[i]-f[i-k][k]),对于f[i][j],可以沿原创 2017-09-20 19:12:58 · 349 阅读 · 0 评论 -
Jzoj1460 无题noname
给定一个N,求出所有1到N之间的x,使得x^2=1(mod N)。将这个式子变形(x-1)(x+1)=0(MOD P) ,那么就可以枚举P的每一对因数(a,b),我们把方程化为ax*by=P*T(T为任意常数)那么这里ax,by必须满足ax-by=2,这个可以用扩展gcd求解求出x,y后,我们将所有形如a*(x*(2/gcd)+k*(b/r))的解加入vector并排序输出(注原创 2017-09-20 19:34:15 · 307 阅读 · 0 评论 -
Jzoj2270 【SDOI2011】计算器
1、给定 y、z、p,计算y^z mod p的值; 2、给定 y、z、p,计算满足xy≡z(mod p)的最小非负整数 ; 3、给定y、z、p,计算满足y^x≡z(mod p)的最小非负整数 。第一问不说,第二问请看 同余方程 主要说第三问第三问是经典的离散对数(其实我并不会而且也基本不考)我们使用经典的giant-step-baby-step算法,令s=sqrt(m)原创 2017-09-20 20:06:42 · 240 阅读 · 0 评论 -
Jzoj2581 最大公约数
sum:=0; for i:=1 to n-1 do for j:=i+1 to n do sum:=sum+gcd(i,j)显然这个程序的效率是很低的,小明打算写一个更强的程序,在求出sum的同时比妹妹跑的更快。我们令A[i]为Σgcd(i,j)(j∈[1,i])那么很显然的,gcd(i,j)为i的因数,而当gcd(i,j)=1时,原创 2017-09-20 20:40:27 · 404 阅读 · 0 评论 -
Jzoj1307 Jail
这个题很坑,我们考虑|x1-X1|+|x2-X2|,若已经知道每一维的正负号,我们就可以将每一维的x加起来求最大和最小并相减(x1+x2-X1-X2)又因为d原创 2017-09-19 21:27:19 · 500 阅读 · 0 评论 -
Jzoj2756 Longge的问题
做法可以参考这篇:jzoj2581,注意求phi(i)的方法,需要用到sqrt(i)的暴力分解算法#includebool vis[40010];int w[20010],t=0;long long phi(int x){ long long S=x; for(int i=0;w[i]*w[i]<=x;++i){ if(x%w[i]==0) for(S=S/w[i]*(w[原创 2017-09-20 20:45:35 · 228 阅读 · 0 评论 -
Jzoj2934 字符串函数
首先显然不能每个串暴力,我们考虑单独计算每一个字符的贡献对于b[i],若我们找到a[j]=b[i],可以分两种情况讨论1.i所以贡献就是i*j2.i>j 情况是对称的,所以贡献是(n-i+1)*(n-j+1)所以对于原创 2017-09-20 21:48:34 · 388 阅读 · 0 评论 -
Jzoj3192 球
小包有N个球和A个盒子。球标号为0到N-1,盒子编号为0到A-1。标号为x的球放在下标为x mod A的盒子里。然后他得到了B个新盒子,编号为0到B-1。他想把所有球从旧盒子里面拿出来放到新盒子,标号为x的球放在下标为x mod B的盒子里。对于某个球来说,如果原本放在下标为a的旧盒子,现在放在下表为b的新盒子,那么费用为|a-b|。求出总花费。a,b这个题比较有趣首先我们原创 2017-09-25 15:41:26 · 338 阅读 · 0 评论 -
Jzoj3093 合唱队形
这个题就是中国剩余定理了,这里介绍一种用扩展gcd的方法(本质上二者没有区别)我们来考虑两个同余方程 X=A(MOD M1) 和 X=B(MOD M2)我们可以将其变形成为求一个方程 M1x+M2y=(B-A)是否有解,这里用扩展gcd即可如果没有显然直接退出,如果有,那么令A'=x*M1+A,M'=M1*M2/gcd(M1,M2)那么我们就将这两个方程X=A(MOD M1) 和 X=B(MOD M2)合并成了一个方程 X=A'(MOD M')为什么这样是对的呢?原创 2017-09-25 14:59:55 · 395 阅读 · 0 评论 -
Jzoj3497 隐藏指令
显然,我们在计算方案时,每次必然加入在同一维度的,方向相反的行动那么我们令f[i][j][k]表示目前在处理第i维,已经走了2*j步,其中有2*k步在第i维上那么显然,f[i+1][j][0]+=f[i][j][k] 这等于是停止当前这一维的处理,开始下一维原创 2017-09-25 21:57:22 · 317 阅读 · 0 评论 -
Jzoj3498 图形变换
这道题看似一到模拟题,但是很明显TLE那么既然,看到类似于大量重叠的变换,自然想到矩阵快速幂这里简单说一下置换矩阵:假设我们用矩阵[x1,y1,1]表示一个点,那么分别对应三种操作的置换矩阵就是原创 2017-09-26 20:34:18 · 387 阅读 · 2 评论 -
Jzoj3927 可见点数
ZPS经过长期的努力争取,终于成为了0901班的领操员,他要带领0901班参加广播操比赛。现在0901班的队伍可以看作是一个n*n的点阵,每个人都站在格点上。现在作为领操员的ZPS站(0,0)点,他想知道如果0901班的队伍站齐了,他能看到多少个人的脸(假设每个人的身高相同,体积相同)这个题很容易发现,若一个点(x,y)可以被看到,那么gcd(x,y)=1,否则一定会被(x/gcd,y/gcd原创 2017-10-04 11:19:15 · 428 阅读 · 0 评论 -
Jzoj3769【NOI2015模拟8.14】A+B
完成斐波那契进制下的加法运算第一位为1,第二位为2,依次类推。。这里其实很简单,只是要考虑一下进位即可首先连续两位不为零直接向前进位即可但是不能解决问题,因为可能出现一个位上面的值大于1那么我们可以这样做,设连续的四位分别为:0,0,2,0那么我们可以将其变成1,0,0,1这样就相当于一次进位了,多次重复以上的进位过程即可这里可以加上第0位方便运算#includ原创 2017-09-27 21:32:40 · 484 阅读 · 0 评论 -
Jzoj3780 Magical GCD
给你一个序列s,求区间[l,r]使得gcd(s[l]~s[r])*(r-l+1)最大,输出这个最大值,n显然,我们暴力是不可以过的,那么我们考虑一下的做法:我们维护一个g数组,g[i]表示gcd(s[i]~s[r])那么我们每次移动r指针,让后重新更新g数组,显然每个g[i]可以O(lg k)更新,但是这样的复杂度依然是n^2lgk我们发现,对于g[i]=g[j]而且i为什么?原创 2017-09-28 16:25:36 · 385 阅读 · 0 评论 -
Jzoj3805 小X的二叉堆计数
题意:给你n个不同的数问你能构成多少个不同的二叉堆显然不能枚举,我们考虑用递推我们令f[i]表示以i为根的二叉堆有多少种令l,r为i的左右儿子,令size[i]为以i为根的堆的大小那么显然,f[i]=f[l]*f[r]*C(size[i]-1,size[l]),因为n个数互不相同,所以没有重复相当于是1~size[i]这几个数填进这个堆中,那么显然根只能填最大那个,让后在剩下的原创 2017-10-02 11:26:29 · 807 阅读 · 0 评论 -
Jzoj3902 游戏
农夫FJ和奶牛Bessie玩游戏,游戏由一个黑板和N张卡片组成。游戏初始时,黑板写的数字是0。每张卡片都写有一个[0,511]的整数。FJ和Bessie轮流操作,FJ先操作。操作者每次从当前的卡片中选取一张卡片出来(被选出来的卡片不会被再次利用),假设选出来的卡片写的数是X,并假设当前黑板写的数是Y,那么本轮操作后黑板的数变成Y|X,其中|是位操作的或。如果某个操作者没有卡片可取了(卡片已经取完)原创 2017-10-03 20:26:56 · 613 阅读 · 0 评论 -
Jzoj4714 公约数
给你n求gcd(i,j)=i xor j的对数(i,j这题看似反演,其实是一个结论题,code就150byte我们发现gcd(i,j)所以,我们要求的对数就是gcd(i,j)=i-j=i^j我们枚举i和它的倍数j=ki,那么显然,gcd(j,j-i)=i,所以只需要判断i^j=j-i即可很重要的一点!i^j要打括号!不要写成了i^j==j-i!#includeint原创 2017-10-15 11:19:11 · 279 阅读 · 0 评论 -
Jzoj4709 Matrix
十分套路,这种题很明显是单独计算每个元素的贡献来搞的我们发现,对于ti,它最后到n,n的路线有C(2n-i-2,n-2)条而对于每条路线,其值发生的变化都为t[i]*a^(n-i)*b^(n-1)所以贡献就是∑t[i]*a^(n-i)*b^(n-1)*C(2n-i-2,n-2)l的话差不多吧快速求c(n,m)应该不用讲了吧#include#define L long原创 2017-10-12 21:04:50 · 352 阅读 · 0 评论 -
Jzoj4699 Password
首先,orzYxuanwKeith,这套题后面两个把我虐爆了我们发现,B序列每一个元素都肯定出现在A中,那么考虑最大的元素B1,显然就是A中元素最大的那个删除后让后我们继续求B2,显然也是最大的那个,让后删除B2,gcd(B1,B2)后,我们就可以得到B3....以此类推偷懒用了map+O3#pragma GCC optimize("O3")#pragma G++ opt原创 2017-10-12 16:05:46 · 420 阅读 · 0 评论 -
Jzoj4627 斐波那契数列
题意:求Fib(n)此题渗水,这里讲一种不用矩阵的方法令f[n]=Fib(n)我们假设k=n/2那么久有以下递推式:若n-k%2=1f[n]=f[k]*f[k]+f[k+1]*f[k+1]否则f[n]=f[k]*f[k+1]+f[k+1]*(f[k]+f[k+1])边界特判一下就好了,复杂度lg n#include#define L long long原创 2017-10-11 21:45:49 · 459 阅读 · 0 评论 -
Jzoj4626 矩阵
先声明:本人在OJ上并没有AC但是坚信是spj错了因为我下载了数据本地评测而且交了一个直接输出答案的程序这个题目思路比较奇怪,题解我也没有看懂,这里提供一种三分的方法我们假设这个B的表达式为[a±x,b±x][c±x,d±x]那么显然答案就是x我们先暴力枚举正负号(二进制法),让后对于每一种情况,我们用三分法求B使得B的行列式绝对值尽量小,若这个值小余一个极小的量(我原来用的是1e原创 2017-10-11 21:29:13 · 319 阅读 · 0 评论 -
Jzoj4458 密钥破解——Pollard-rho
此题非常新颖,有一个专门的算法,所以如果没有了解过,那么就只能写暴力卡了这道题后面的几步都很简单,一个扩展gcd求逆元,一个快速幂,所以关键就是求r,而这需要对N=pq进行分解本来这个问题在是一个NP问题,不存在多项式算法(这里的多项式指的是lgN形式的式子,因为N通常有10^100以上的级别)但是这里不需要写高精度所以N最大就是10^18介绍一下这个问题的专门算法Pollard-原创 2017-10-06 21:40:56 · 401 阅读 · 0 评论 -
Jzoj4307 喝喝喝
显然,如果令w[i]=s[i]-k,那么显然s[i]|w[j]就是s[j]%s[i]=k的必要条件,那么我们倒序枚举每个开头l,枚举w[l]的每个因数看看他在s[l+1]~s[n]中有没有出现,求出一个位置最靠近l的r,那么贡献就是r-l#include#include#include#define INF 0x7f7f7f7fusing namespace std;int n,原创 2017-10-06 07:47:01 · 641 阅读 · 0 评论 -
Jzoj5458【NOIP2017提高A组冲刺11.7】质数
小X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感。小X 认为,质数是一切自然数起源的地方。在小X 的认知里,质数是除了本身和1 以外,没有其他因数的数字。但由于小X 对质数的热爱超乎寻常,所以小X 同样喜欢那些虽然不是质数,但却是由两个质数相乘得来的数。于是,我们定义,一个数是小X 喜欢的数,当且仅当其是一个质数,或是两个质数的乘积。而现在,小X 想要知道,原创 2017-11-07 15:30:27 · 346 阅读 · 0 评论 -
Jzoj5422 天才绅士少女助手克里斯蒂娜
居然是向量叉乘!考场上忘了怎么叉乘了。。。考完后发现可以推一波式子Σ(aj*bk-ak*bj)^2{1Σak^2)*(Σbk^2)-(Σak*bk)^2 {1让后用BIT维护a的平方和,b的平方和和ab的和就好了#pragma GCC optimize("O3")#pragma G++ optimize("O3")#include#include#include#de原创 2017-11-07 17:09:04 · 1267 阅读 · 0 评论 -
Jzoj4756 幻象
最近phantom得到了森の妖精的真传。在他练功的时候, 每秒他的思绪中都有一定的概率浮现出奇♂异的幻象,持续x秒的幻象将产生x^2 的幻象值。phantom练功发自真心,他想知道,在N秒内他期望产生的幻象值是多少。比较裸的期望dp设f[i]表示第i秒的期望幻象值那么,f[i]=f[i-1]+a[i]*((l[i-1]+1)^2-l[i-1]^2)其中l[i]是第i秒连续幻原创 2017-10-23 21:27:54 · 400 阅读 · 0 评论 -
Jzoj4732 函数
有这么一个函数满足Σf(d)=n (d|n),给出序列a,求Σf(a[i])首先,大部分人一眼就能看出这个f就是phi吧那么考虑怎么求有phi(p)=p-1(p为质数)phi(ab)=phi(a)phi(b)(gcd(a,b)=1)phi(ka)=kphi(a)(k|a且k为质数)那么我们就可以类似于素数筛法的来计算phi了(这道题有三个点是题答题,还有一个点数据错原创 2017-10-21 21:45:35 · 340 阅读 · 0 评论 -
Jzoj4722 跳楼机
srwudi的跳楼机可以采用以下四种方式移动:1、向上移动x层;2、向上移动y层;3、向上移动z层;4、回到第一层。一个月黑风高的大中午,DJL来到了srwudi的家,现在他在srwudi家的第一层,碰巧跳楼机也在第一层。DJL想知道,他可以乘坐跳楼机前往的楼层数(不大于h)。我们发现变量只有3个,所以必然考虑层数%x的情况,若第i层可达,则必然第i+kx层也可以到达原创 2017-10-15 17:30:36 · 542 阅读 · 0 评论