数学
ssl_yty
这个作者很懒,什么都没留下…
展开
-
【博弈】取数游戏
先求出前面升序的长度以及后面升序的长度如果两个都是奇数,那就选大的那边,另一边就不能选了,剩下偶数个,先手赢如果其中一个是奇数,选奇数那边,剩下偶数个不管后手怎么选,先手都可以一直选奇数给后手留偶数,先手赢如果两个都是偶数,奇数就留给后手了,先手输所以只要有一个是奇数,先手就能赢...原创 2022-07-02 09:40:55 · 1116 阅读 · 0 评论 -
【51nod】【期望和概率】 超级购物
【51nod】【期望和概率】 超级购物题目解题思路这题涉及一个概念叫条件概率,p(A|B)意为在B的条件下发生A在这题中B既是有r个人购物A为第i个人购物代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;double f[25][25],p[25],pb;int n,r;double solve(int w){ f[0][0]=1; f原创 2022-05-03 20:56:03 · 520 阅读 · 0 评论 -
【51nod】【概率和期望】绑鞋带
【51nod】【概率和期望】绑鞋带题目解题思路题目要求只有一个环,假设已连接成一条绳,包括前i-1条鞋带那么第i(i!=n)条鞋带不能首尾相接,也不能和已经在绳里的鞋带相接,不然就成环了得到式子:2n-2i-2/2n-2i-1注意一下不用做最后一条鞋带的,不然会乘0代码#include<iostream>#include<cstdio>using namespace std;int n;double ans=1;int main(){ sca原创 2022-05-03 20:27:04 · 284 阅读 · 0 评论 -
【洛谷 P1297】[国家集训队]单选错位
【洛谷 P1297】[国家集训队]单选错位题目解题思路在填错位的情况下,想要正确,说明两题答案一样第i题有ai个选项,第j题有aj个选项得到式子式子可以被化简代码#include<iostream>#include<cstdio>using namespace std;int n,A,B,C,a[10000010];double ans;int main(){ scanf("%d%d%d%d%d", &n, &A, &B原创 2022-05-03 19:48:13 · 236 阅读 · 0 评论 -
【51nod】【数学】最大的最大公约数
【51nod】【数学】最大的最大公约数题目解题思路ai的值挺小的可以外层从小到大枚举答案然后里层枚举其倍数,看是否在数列中出现过2次及以上若能找到,即为答案代码#include<algorithm>#include<iostream>#include<cstdio>using namespace std;int n,a[50010];int main(){ scanf("%d",&n); for (int i=1;i<=n原创 2022-02-26 15:37:42 · 148 阅读 · 0 评论 -
【洛谷 P5495】【数学】Dirichlet 前缀和
【洛谷 P5495】【数学】Dirichlet 前缀和题目解题思路如果求出每一个数的因子然后累加必定TLE可以先用埃氏筛求出质数然后质数x对其的倍数y,a[y]+=a[y/x]因为是从小到大,累加过去的,就能累加到所有除x的因子的数代码#include<iostream>#include<cstdio>using namespace std;#define uint unsigned intbool vis[20000100];int n,t;ui原创 2022-02-26 09:53:17 · 112 阅读 · 0 评论 -
【洛谷 P5253】【数学】 丢番图
【洛谷 P5253】【数学】 丢番图题目解题思路讨厌数学题qwq原式通分后为了因式分解,变形一下十字相乘后得其实就变成了求n2的因子个数/2向上取整用分解质因数的方法求出n2的因子个数代码#include<iostream>#include<cstdio>using namespace std;long long n;int t,ans=1;int main(){ scanf("%lld",&n); for (int i=原创 2022-02-26 09:24:01 · 175 阅读 · 0 评论 -
【金牌导航】【欧拉函数】整数个数
【金牌导航】【欧拉函数】整数个数题目解题思路由1得:所以我们要求与n互质的数的个数由2得:要求n的因子个数3则规定了求的范围最后用n减去它们即可代码#include<iostream>#include<cstdio>using namespace std;int n,t,phi,tot=1,num[50000];int main(){ scanf("%d",&n); phi=n; int x=n; for (int i=2;1ll*i*i原创 2022-02-17 11:58:35 · 429 阅读 · 0 评论 -
【金牌导航】【洛谷 P4305】【高斯消元】球形空间产生器
【金牌导航】【洛谷 P4305】【高斯消元】球形空间产生器题目解题思路因为所有点到球心的距离相等得:(a-x1)2+(b-x2)2+(c-x3)2=(a1-x1)2+(b1-x2)2+(c1-x3)2将式子拆开得到 2*(a-a1+b-b1+c-c1)=a2-a12+b2-b12+c2-c12然后运用高斯消元求得方程解即可代码#include<iostream>#include<cstdio>#include<cmath>using name原创 2022-02-17 10:34:49 · 429 阅读 · 0 评论 -
【金牌导航】【凸包】凸包面积
【金牌导航】【凸包】凸包面积题目解题思路凸包模板题将凸包上的点求出来,然后用叉积求面积即可(多边形的面积可以看成由很多个三角形组成,叉积的正负形会抵消掉重复的部分,最后面积要取绝对值)没学过的可以看这个代码#include<algorithm>#include<iostream>#include<cstdio>#include<cmath>using namespace std;struct lzf{ int x,y;}a[原创 2022-02-15 10:18:39 · 356 阅读 · 0 评论 -
【poj 2007】【凸包】 Scrambled Polygon
【poj 2007】【凸包】 Scrambled Polygon题目poj 2007凸包模板题将凸包上的点从(0,0)开始,逆时针输出解题思路Graham算法确定最下面的一个点然后其他点按极角排序(用tan来排)(y1/x1与y2/x2比较)但是除法有精度问题所以装换为乘法就是叉积 x1y2-x2y1如果结果小于0,则点1在点2的逆时针结果大于0在顺时针,为0则共线下图为排完序后的然后用栈维护,如果一个点比栈顶在更外面,踢栈顶,加入这个点就是这种情况代码#inc原创 2022-01-16 20:28:56 · 224 阅读 · 0 评论 -
【POJ 1654】 【叉积】Area
【POJ 1654】 【叉积】Area题目poj 1654解题思路先处理出所有点每一个多边形都可以被分割成很多个三角形所以选定一个点,用叉积求出面积再除2的绝对值即为答案(叉积求的是平行四边形面积所以要除2)P.S 面积除2可能出现小数,但叉积必须要用long long不然会爆,所以特殊处理代码#include<iostream>#include<cstdio>#include<cmath>using namespace std;str原创 2022-01-15 12:00:53 · 94 阅读 · 0 评论 -
【51nod】【叉积】线段相交
【51nod】【叉积】线段相交题目解题思路首先判断两条线段有没有交集的地方以这两条线段为斜边的矩形如果相交,这两条线段才可能相交叉积可以判断两线段间的顺逆时针关系P.S ab判断的就是a在b的什么方向,ba则相反如果相交,那么一条线段的两个点肯定在另一条的两边那么[(c-b)(a-b)] * [(a-b)(d-b)]>=0要做两次这样的操作,避免出现以下这种情况第二次[(a-c)(d-c)] * [(d-c)(d-b)]》=0代码#include<iostre原创 2022-01-15 09:41:47 · 178 阅读 · 0 评论 -
【ssl 1715】【叉积】 计算面积
【ssl 1715】【叉积】 计算面积题目解题思路虽然三个点可以围成三种不一样的平行四边形但tm的面积是一样的,因为确定的三个点围成的三角形是平行四边形面积的一半那么我们可以直接用叉积求面积啦代码#include<iostream>#include<cstdio>using namespace std;int x1,y1,x2,y2,x3,y3,t;double cj;int main(){ scanf("%d",&t); while (t原创 2022-01-15 08:51:02 · 1313 阅读 · 0 评论 -
【ssl 1232】【叉积】雷达覆盖
【ssl 1232】【叉积】雷达覆盖解题思路确定了圆心以及半径,可以先排除掉在园外的点然后灌输一个新的小知识叉积叉积 |a× b| 可以解释成以 a和b 为边的平行四边形的面积。叉积的一个重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系那么可以先确定一个点枚举其它点,判断其在这个点的左还是右,累加进左半圆或右半圆的答案中ans取最大值代码#include<iostream>#include<cstdio>using namespace std;原创 2022-01-15 08:39:16 · 120 阅读 · 0 评论 -
【校内测 11.1】 【数学题】 [LnOI2019SP]快速多项式变换(FPT)
【校内测 11.1】 【数学题】 [LnOI2019SP]快速多项式变换(FPT)题目洛谷 P5248解题思路可以看出anan-1an-2…a1组合起来是一个m进制数它的十进制是f(m)那么题目就变成一个十进制转m进制用短除法代码#include<iostream>#include<cstdio>using namespace std;int t;long long m,fm,a[10010];int main(){ scanf("%lld%ll原创 2021-11-06 07:28:05 · 137 阅读 · 0 评论 -
【ybtoj 高效进阶 6.3】 【同余问题】 同余方程
【ybtoj 高效进阶 6.3】 【同余问题】 同余方程题目解题思路由ax≡1(mod b)可得,ax+by=1欧几里得定理:gcd(a,b)=gcd(b,a%b)讨论以下两个式子ax+by=gcd(a,b)bx2+(a%b)y2=gcd(b,a%b)可得ax+by=bx2+(a%b)y2a%b可看作a-a/bb∴ ax+by=bx2+(a-a/b * b)y2合并同类项ax+by=b(x2-a/b * y2)+ay2也就是说x=y2,y=x2-a/b*y2代码#inclu原创 2021-10-29 20:42:34 · 164 阅读 · 0 评论 -
【10.6 牛客提高(二)】 【结论题】 串串串
【10.6 牛客提高(二)】 【结论题】 串串串题目解题思路先举个栗子1011010011可以先统计1的个数,发现都是奇数,那么加起来则为偶数如果有1的数位相同,那么会同时消掉偶数个1,那么最后不一样的数位奇偶性为0最后总结一下发现就是,如果1的个数和是偶,那么答案是0,否则为1代码#include<iostream>#include<cstdio>#include<cmath>using namespace std;int n,m,q原创 2021-10-07 15:25:49 · 101 阅读 · 0 评论 -
【校内测 10.7】【签到题】高尚的战斗之神想要取模
【校内测 10.7】【签到题】高尚的战斗之神想要取模题目传送门解题思路一个数最多只能被mod两次求出这段的长度代码#include<iostream>#include<cstdio>using namespace std;int x,l,r;long long ans;int main(){ scanf("%d%d%d",&x,&l,&r); ans=x=x%r; ans=ans*(r-max(l-1,x)); //要么原创 2021-10-07 15:17:04 · 51 阅读 · 0 评论 -
【校内测 10.7】【规律题】巡回的梦魇之神喜欢数列
【校内测 10.7】【规律题】巡回的梦魇之神喜欢数列题目传送门解题思路先对n=4,k=5这个序列揣摩一下下a0=1,a1=5,a2=15,a3=35,a4=70假设现在要求a4那么原式子可以变成a3乘上一次系数的倒数就可以知道之前的和了(可以看成a1-3的和分解为a3和a0-2的和两部分,再分别乘当前的系数)式子整理可得发现每次的系数为a0乘第一个系数得到第二个数第二个数乘第二个系数得到第三个数。。。。。。第n-1个数乘第n-1个系数得到第n个数因为a0是1,最后的答原创 2021-10-07 12:22:52 · 71 阅读 · 0 评论 -
【校内测 10.5】 【结论题】看错题的产物改编而来的产物
【校内测 10.5】 【结论题】看错题的产物改编而来的产物题目不知道能不能贴题传送门解题思路设n个数中,x是最大的,i是x的一个因子如果想让i*子序列的长度大于x那么长度一定会大于x/i又因为序列中的数一定不同出现的第x/i+1个因子包含i的数,一定大于x(因为第x/i个是x)综上所述,序列中的最大数是解代码#include<algorithm>#include<iostream>#include<cstdio>using namespa原创 2021-10-06 14:41:06 · 64 阅读 · 0 评论 -
【gmoj】 【博弈论】stone game
【gmoj】 【博弈论】stone game题目洛谷 P7413解题思路如果开局每一种(石子的个数相同与否看作是否为同一种)堆的个数都为偶数,那一定是后手必胜不管你怎么拿,后手都可以拿和你一样的想让先手必胜,那一定要给后手每一种堆的个数都为偶数,所以要处理个数为奇数的堆进行一次操作会使b[j]-1与b[j-1]+1只有一个奇数堆的话,ans+b[1]两个奇数堆的话,一定得是相邻的,ans+b[j]枚举第一次拿多少个石子处理出每一种堆的个数然后分类讨论代码#include&l原创 2021-08-16 21:55:49 · 109 阅读 · 0 评论 -
【ybtoj 高效进阶 6.4】 【组合数学】 计算系数
【ybtoj 高效进阶 6.4】 【组合数学】 计算系数题目解题思路如果单纯只看(x+y)k xnym的系数是 ckmc_{k}^{m}ckm 由杨辉三角可得,xky0,xk-1y1…x0yk再看(ax+by)k还要算上他们本来的系数a,b,所以最终系数为 ckmc_{k}^{m}ckm * an * bm代码#include<iostream>#include<cstdio>using namespace std;const int mo=10007原创 2021-08-15 21:50:26 · 146 阅读 · 0 评论 -
【ybtoj 高校进阶 6.2】 【质数与约数】 不定方程
【ybtoj 高校进阶 6.2】 【质数与约数】 不定方程题目洛谷 P1445解题思路通分一下两边都加上(n!)2转换为设a=(x-n!),b=(y-n!),ab=(n!)2a是(n!)2的因数,且知道a一定能求出b设n!=p1c1+p2c2+…+pkck(n!)2=p12*c1+p22*c2+…+pk2*cka的个数就有(2c1+1)(2c2+1)…(2*ck+1)求c可以用公式代码#include<iostream>#include<cst原创 2021-08-15 19:33:26 · 123 阅读 · 0 评论 -
【gmoj】【暴力】【数学】 Do You Know Your ABCs?
【gmoj】【暴力】【数学】 Do You Know Your ABCs?题目解题思路最多有七个数,分别为A,B,C,A+B,A+C,B+C,A+B+C可发现A+(B+C)=B+(A+C)=C+(A+B)=A+B+C枚举每个数放的位置根据上面的规律求出七个数 必须非负且A<B<C用数组标记去重代码#include<iostream>#include<cstdio>using namespace std;int n,ans,t,f[10],a原创 2021-08-14 16:40:22 · 170 阅读 · 0 评论 -
【gomj】【数学】比赛
【gomj】【数学】比赛题目解题思路暴力n2求a中的每一个人和b中每一个人打求a队以及b队能拿到的分a队的分减去b队的除以n因为每一个出现的概率是N分之一pk的两人分值归实力高的人所有那么我们可以维护两种前缀和先排序实力值实力值的平方对于每一个ai找到所有比ta小的bi那么a队得到的分为因为每一个都要除n那么最后除即可求b队得分同理代码#include<algorithm>#include<iostream>#include&原创 2021-08-10 19:53:21 · 112 阅读 · 0 评论 -
【gmoj】 【NOIP2013模拟11.7A组】 【DP】【数学】图书馆
【gmoj】 【NOIP2013模拟11.7A组】 【DP】【数学】图书馆题目解题思路雾~ 求分差是什么鬼由初二知识可得方差公式长这个亚子将方差先乘上n 化开 变成这样因为平均数等于ai的和/n 那么 ai的和=n*平均数最后再合并一下就变成了这个亚子s2=∑(a[i])2-(x)2设f[i][j][k]为走了i步到达第j个平台用了k的力气里面存的是(a[i])2代码#include<iostream>#include<cstring>#i原创 2021-07-21 10:26:54 · 79 阅读 · 0 评论 -
【gmoj】【欧拉函数】Gcd会不会
【gmoj】【欧拉函数】Gcd会不会题目解题思路题目十分简单直白就是求1~n内每个数与其他数的最大公因数的和假设一个d能被 i 整除那么它的贡献如下接着将 j/d 那么最大公因数也会 /d,贡献变成这样然后我们想到欧拉函数φ(i)意为1~i中有多少个数与 i 互质那么式子就可以化为为了节省时间我们可以预处理出所有的φ可用线性筛o(n)求不懂的小朋友戳这里接着我们就枚举 i (所求值/因子) j (因子) ij 即为所求值转移式即为 ans[ij]=phi[i]*j最原创 2021-07-20 16:24:28 · 98 阅读 · 0 评论 -
【洛谷 P4284】【树形DP】【期望】 概率充电器
【洛谷 P4284】【树形DP】【期望】 概率充电器题目解题思路考试的时候就很懵样例都没推出来???我大概是脑子烧坏了直接求出开的概率还是很难想的可以想到求出关的概率然后用1-关的概率就是开的概率假设将图建出来长这个样子设 f[i] 是第i个节点不充电的概率 (其子树以及它自己转移过来的概率)考虑 j 这个节点能对 i 做出什么贡献既然要让 i 是关的 那么ta自己得是关的 边不能传电 或是 j 没有电边能传电那么式子就是f[i] = (1-p[i])(1 - h[i][原创 2021-07-19 20:46:40 · 81 阅读 · 0 评论 -
【洛谷 P3383】 【线性筛】线性筛素数 以及用线性筛求欧拉函数
【洛谷 P3383】 【线性筛】线性筛素数题目解题思路一般来说常用的是埃氏筛 for (int i=2;i<=n;i++) if (!p[i]) { prm[++t]=i; for (int j=i;j<=n/i;j++) p[i*j]=1; }就是筛到素数时,将它的倍数筛去但是某些合数,例如12能被质数2,3筛去,这样就会重复筛了而欧拉线性筛就很好的解决了这个问题为了保证每个合数只被筛一次,它只会被最小原创 2021-07-19 15:55:46 · 252 阅读 · 0 评论 -
【洛谷 P4774】 【扩欧】【同余】 屠龙勇士
【洛谷 P4774】 【扩欧】【同余】 屠龙勇士题目解题思路由题意可得xb[i]-a[i]/p[i]=0也就是xb[i]≡a[i](mod p[i])因为只有当x*b[i]和a[i]mod p[i]的部分相等,才能减掉,余下的是p[i]的倍数那么我们要求的x是这n条式子的通解首先考虑一下b[i]=1的情况式子将变为x ≡a[i](mod p[i])挺眼熟的吧,中国剩余定理呢设ans是前i-1条的通解,m为lcm(p1,p2…pi-1)那么到前i条时, 找一个最小的x,原创 2021-07-19 09:29:47 · 130 阅读 · 2 评论 -
【gmoj】 【扩欧】 鱼跃龙门
【gmoj】 【扩欧】 鱼跃龙门题目解题思路题意就是求1~x的和能整除n高斯求和公式是x(x+1)/2也就是说x(x+1)/2=n移项x(x+1)=2n设ap=x+1,bq=xap-bq=gcd(a,b)要求出最小的bq(x)已知b,就只求出q即可就变成了扩欧里的ax+by=gcd(a,b)求最小的y因为gcd(a,b)=1 说明a,b互质而abp*q=2n说明a,b必包含组成2n的所有因子预处理出小于1e+6的质数将2n分解质因数,组成a,b推导过程咱也不会,背板子原创 2021-07-16 14:46:53 · 175 阅读 · 0 评论 -
【gmoj】【高斯消元】 折射伤害
【gmoj】【高斯消元】 折射伤害题目解题思路题意每当受到伤害时就转移给别人不停的转移暴力纯模拟直到修改的微乎其微根据样例可以知道每人最终受到的伤害由自己原来的和从别人那转移的组成f1=1+½f2f2=0+½f1f3=2组成了多元一次的方程组用高斯消元解决代码#include<iostream>#include<cstdio>#include<cmath> using namespace std;double z,p[220原创 2021-07-15 20:57:07 · 104 阅读 · 0 评论 -
【gmoj】 【DP】 【期望】 彩色圆环
【gmoj】 【DP】 【期望】 彩色圆环题目解题思路暴力必用dfs跑出各种状态再求美观值的期望能跑20分求一个环其实就是一个特殊的链尝试将它断开因为题目求的是一段一段的贡献将这条链变为一段一段来看同一段内颜色相同设f[i][f_len][l_len]表示的是当前段与第一段颜色相同的期望值而g[i][f_len][[l_len]则是不同颜色那么认为f_len是第一段的长度然后l_len是目前最后一段i是当前位置那么可以得出转移式然后我们发现其实可以去除l_len这原创 2021-07-15 19:03:47 · 169 阅读 · 1 评论 -
【洛谷 P7472】【NOI Online 2021 入门组]】吃豆人
【洛谷 P7472】【NOI Online 2021 入门组]】吃豆人题目解题思路手推一下会发现镜面反射会形成回路或者对角线求出以第一行中任一点所形成的回路或对角线枚举两两之间的和减去重复的点即可根据反射出来的矩形的奇偶性可得所谓奇偶性,就是矩形在第一行的点的差值为奇则无交点,为偶则有两个矩形之间是否有交点自己手推规律吧????代码#include<iostream>#include<cstdio>using namespace std;原创 2021-04-03 12:24:56 · 399 阅读 · 0 评论 -
【洛谷 P7471】【NOI Online 2021 入门组】 切蛋糕
【洛谷 P7471】【NOI Online 2021 入门组】 切蛋糕题目解题思路分类讨论0刀:只有一个人吃1刀:只有两个人,吃同样大小的2刀:1.只有两个人,吃不一样的2.三个人吃同样大小的3.三个人中,有两个人吃一样的3刀:三个人吃的都不一样代码#include<iostream>#include<cstdio>using namespace std;int a,b,c,n;int main(){ scanf("%d",&am原创 2021-04-03 11:10:04 · 230 阅读 · 0 评论 -
【数学】 放置石子 题解
【数学】 放置石子 题解题目解题思路找规律1234501235123582358133471118459142311235最后一行是这一列中两两之间的差可以发现每一行两两之间是第一项的数*这一列的差+上一列的差代码#include <iostream>#include <cstdio>using namespace std;long long a原创 2020-11-27 21:20:03 · 464 阅读 · 0 评论 -
【洛谷11月月赛】 正方 题解
【洛谷11月月赛】 正方 题解题目解题思路被分成4分一定会有两份相加等于另外两份相加如果没有那么说明不可能有点能分成这样的四份如果这四个数相等那只存在一个点如果有两个数相等那存在4个点如果互不相等存在8个点代码#include<iostream>#include<cstdio>using namespace std;long long n,x,y,x1,y1;int main(){ scanf("%lld",&n); fo原创 2020-11-02 19:06:43 · 254 阅读 · 0 评论 -
【10.30 校内普及组】【二分】【数学】 有趣的水管 题解
【10.30 校内普及组】【二分】【数学】 有趣的水管 题解题目解题思路暴力一开始想暴力从输出口为k的倒序累加到2如果累加和大于n退出输出个数很明显,会超时二分二分求mid为分离器的个数假设每个输出口都为k除去第一个不会占用上一个分离器的一个输出口,别的都会所以要减去(mid-1)输出口的个数是k,k-1,k-2…k-mid+1减去的数是一个等差数列求和得mid*(mid-1)/2总式子即:midk-(mid-1)-mid(mid-1)/2代码#include原创 2020-10-31 07:54:12 · 478 阅读 · 0 评论 -
【10.27 牛客普及(五)】【数学期望】 飞行棋 题解
【10.27 牛客普及(五)】【数学期望】 飞行棋 题解题目解题思路nnn小于ddd时期望都是ddd-1回合然后用一个数组累加期望值n大于等于ddd时能跳到iii-1到iii-ddd+1格子再从这些格子跳到0期望值是sumsumsum[iii-1]-sumsumsum[iii-ddd]然后本身甩骰子期望值是ddd-1因为甩到ddd时可以再甩一次回合数不变期望值再+fff[iii-ddd]/ddd代码#include<iostream>#include原创 2020-10-30 18:41:13 · 675 阅读 · 0 评论