自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

群山中的菜鸡

生来不凡,只因相信自己不凡

  • 博客(78)
  • 收藏
  • 关注

原创 【exgcd】不定方程整数通解

设{ax1​+by1​=gcd⁡(a,b)bx2​+(amodb)y2​=gcd⁡(b,amodb)​gcd⁡(a,b)=gcd⁡(b,amodb)所以ax1​+by1​=bx2​+(amodb)y2​又因为amodb=a−(⌊ba​⌋×b)所以有ax1​。

2022-11-23 20:58:26 743 1

转载 差分约束算法总结

差分约束系统,是求解关于一组变量的特殊不等式组的方法。如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi

2022-11-21 20:52:59 238

原创 【线段树】2022年10月20日A组 歪脖子树

【线段树】2022年10月20日A组 歪脖子树。

2022-10-22 09:06:54 173

原创 Wannafly挑战赛15 E 小W的斜率

他在二维平面上撒下了n个点,这些点相互不同,但一番观察之后,他失望的发现并没有任何两个点连成的直线的斜率是P/Q。因此将所有原坐标系中的点按x’坐标(分母为定值,所以仅需排x*P-y*Q)排序,比较相邻两点在原坐标系中的斜率是否最接近P/Q即可。对于100%的数据:5

2022-10-13 16:29:59 239

原创 网络流——最大流整理

通过从源点到汇点、在残余容量网络上进行的bfs来寻找增广路,引入反向边来保证之前的选择可以反悔,每条增广路增加的流量为路径上残余容量的最小值。直到无法找到增广路,此时流量为最大流。通过不断寻找增广路来尝试增加流量。.........

2022-08-07 21:49:24 156

转载 洛谷P8347 「Wdoi-6」另一侧的月

题目描述思路(转载大佬思路)记所有点的度数均为奇数的情况为 N 态,存在点度数为偶数的情况为 P 态。由博弈论的基本理论,我们只要证明 N 态的所有后继状态均为 P 态,且 P 态均存在一个后继状态为 N 态即可。首先我们能够发现题目中的操作就是选一条边切断,后继状态为其中一边的子树。对于 N 态,我们假设切断的边为 (u,v),则由于原树中 u,v 的度数均为奇数,因此切断后 u,v 的度数均为偶数,此时无论选择哪边的子树都存在一个点度数为偶数。对于 P 态,由于至多只有有限个点度数为偶数,因

2022-05-21 09:22:52 93

原创 洛谷P1850 NOIP2016 提高组 换教室

#include<iostream>#include<cstdio>#include<cstring>using namespace std;typedef long long ll;typedef long double ld;const ll N=5e3,V=1e3;ll n,m,t,e;ll room[N][2],dis[V][V];ld pro[N],f[N][N];int main(){ scanf("%lld%lld%lld%lld",

2022-05-14 17:40:20 112

原创 简述欧拉函数性质与应用

定义欧拉函数φ(n)φ(n)φ(n)(n为正整数),是指小于n的正整数中,与n互质的数的个数。(特别的,φ(1)=1φ(1)=1φ(1)=1)部分性质欧拉函数的通式:φ(n)=n∗∏(1−1pi)φ(n)= n*\prod{(1-\frac{1}{p_i})}φ(n)=n∗∏(1−pi​1​),其中p1,p2,...,pmp_1,p_2,...,p_mp1​,p2​,...,pm​为n的所有质因子证明:对于质因子pip_ipi​来说,由于倍数均匀分布,所以1~n中pip_ipi​的倍数有n−p

2022-03-14 14:04:04 328

原创 洛谷 P4310 绝世好题

Description思路由题目条件 bi&bi−1≠0b_i \&b_{i-1} \neq 0bi​&bi−1​​=0,可以得到:只要两个数的二进制展开中,在任意一位相同的二进制位上,两个数都为1,那么与运算之后结果就一定不为0。考虑到 n≤100000n\leq100000n≤100000,无法使用类似常规的最长不降子序列的做法,我们可以利用位运算的特点——不同二进制位之间的位运算相互独立,来将各个二进制位分开进行统计以此加快效率,这也是位运算题目中经常使用的技巧。例

2022-02-19 16:57:57 462

原创 Ybtoj 数位DP.A B数计数

Description我们称十进制形式包含子字符串13,并且可以被 13 整除的数为B数。例如, 130 和 2613 就是B数,而 143 和 2639 不是。您的任务是计算1到n之间的B数个数。思路数位DP的模板题,当然用数位DP做啦!(大佬勿看)由于有“整除”与“包含13”这两个条件,因此我们考虑在DP中增加两维。设f[pos][re][op]表示,当前由最高位填到第pos位(还未填)时,%13的余数为re,包含13的情况为op。(其中,op=2表示当前数已包含13,op=1表示当前数以1

2022-01-08 10:47:59 357

原创 Python爬取王者荣耀英雄皮肤

import requestsimport reimport jsonimport osheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}def get_pic(pic, path, num): with open(path + fr"\{num}.jpg","w

2021-12-25 12:06:42 319

原创 来自学长的快乐AK题——Day9 快速失败

快速失败——博弈论(Nim游戏)Description数据规模思路首先,考虑先后手开始时的策略。先手可以随便取,而后手显然不能取与先手取的石子同行同列的石子。那么博弈开始后,剩下的石头里与开始时取走的石头同行同列的石子一定不能取完,最少只能取到1。换言之,这些石子相当于只有ai,j-1个。那么对于剩下的七个格子里的石子,就是一个经典的Nim游戏了。Nim游戏的博弈

2021-12-18 16:51:57 2305

原创 Python选科建议(成绩排名)

sub=(“物理”,“历史”,“化学”,“生物”,“地理”,“政治”)stsub=(“物理”,“历史”)ndsub=(“化学”,“生物”,“地理”,“政治”)a = list(map(int, input("\n物理 化学 生物 历史 政治 地理\n")))

2021-12-18 16:37:24 1060

转载 数位dp简单总结

洛谷日报原文一些总结:数位dp的用法求出在给定区间[A,B]内,符合条件f(i)的数i的个数。条件f(i)一般与数的大小无关,而与数的组成有关。最高位标记limit的理解若当前位limit=1而且已经取到了能取到的最高位时,下一位limit=1;若当前位limit=1但是没有取到能取到的最高位时,下一位limit=0;若当前位limit=0时,下一位limit=0。当limit=0时,当前位可取0~9中的任一数字当limit=1时,当前位pos只可取能取到的最高位(即上界数字的pos位

2021-09-24 20:42:24 121

原创 来自学长的快乐AK题——Day8 荒地追猎

荒地追猎——数论Description数据规模思路设xi表示第i位的话就是(∑i=0xi∗Bi)%(B−1)=0(\sum_{i=0}x_i*B^i)\%(B-1)=0(i=0∑​xi​∗Bi)%(B−1)=0化简一下得:∑i=0(xi∗Bi%(B−1))=0\sum_{i=0}(x_i*B^i\%(B-1))=0i=0∑​(xi​∗Bi%(B−1))=0拆开单独的一个来看:xi∗Bi%(B−1)=(xi%(B−1))∗(Bi%(B−1))=(xi%(B−1))∗1x_i*B^i\%(

2021-08-25 15:58:20 61

原创 来自学长的快乐AK题——Day8 洛谷月赛

我们就同时向最大值的左右两边递归(前提是那一边有最大值为关键点的区间),比较这个点是连同左边的l~p-1的区间被合并更优,还是连同右边的p+1~r的区间被合并更优(因为在该节点前被划分的区间肯定有比当前节点更大的最大值,因此无需考虑谁大谁小)。如果不是,设当前递归到的区间为l~r,当前区间的最大值下标为p,那么当前这个最大值连同l~p-1或p+1~r其中的某个区间就必须被合并到另一个最大值为关键点的区间(否则当前区间l~r的最大值就不是一个关键点)。然后我们称d的倍数的位置为关键点。

2021-08-25 15:38:59 138

原创 来自学长的快乐AK题——Day7 B

B——简单数论+树状数组Description有3个人员给小朋友发糖果,人员1:如果在小朋友k开始发放糖果,则k,k+1,…,n都能获得1个糖果。人员2:如果在小朋友k开始发放糖果,则k可以获得1个糖果,k+1可以获得2个,往后第i个人获得i个糖果。人员3:如果在小朋友k开始发放糖果,则k可以获得1^2个糖果,k+1可以获得2^2个糖果,往后第i个人获得i^2个糖果。给出多组数据,每组给出人数n,发放次数m,以及m次发放操作的描述,回答m次操作后每个人获得的糖果数(对10^9+7取模)。输入

2021-08-25 15:01:12 93

原创 来自学长的快乐AK题——Day7 A

A——子序列自动机Description给出长度为n的字符串S,以及Q个询问每个询问给出一个字符串T,判断T是否为S的一个子序列所有串仅包含小写字母输入第一行给出正整数n,Q第二行给出S接下来Q行,每行给出一个询问T输出对于每个询问输出一行表示答案,符合输出YES,不符输出NO数据规模思路水题一道。扣教练题解:设f[i,j]表示位置i以后字符j第一次出现的位置然后预处理所有的f[i,j]然后每次询问直接暴力跳即可时间复杂度O(26n+q|T|)不过我用的是vect

2021-08-23 20:29:44 118

原创 来自学长的快乐AK题——Day6 D

D——蜜汁做法Description输入输出数据规模思路(扣自教练高质量题解)代码#include<iostream>#include<cstdio>#include<algorithm>#include<vector>using namespace std;const int N=1e6,lim=50;int n,m,cnt,ne[N],a[N];bool f,over[N];string s;vector &lt

2021-08-21 17:05:01 72

原创 splay模板

洛谷P3391文艺平衡树#include<iostream>#include<cstdio>#include<cstdlib>using namespace std;const int N=1e6,inf=0x3f3f3f3f;struct node{ bool rev;//rev记录该节点的子树是否需要反转 //val既为节点权值,也为初始时节点在区间中的下标 //(但因为之后会交换左右子树,所以val的大小不一定满足BST性质,因此只有建树时才有

2021-08-21 11:19:36 74

原创 来自学长的快乐AK题——Day6 C

C——简单数论Description对于一个正整数N,若x满足,(N-0.5x)/(N-x)为正整数,则x为N的幸运数。给出一个N,求出[1,N-1]所有N的幸运数,先回答个数,在将幸运数从小到大输出。输入第一行一个正整数N。输出第一个整数为cnt,表示有多少个满足的幸运数,后面cnt个数,表示满足的幸运数。数据规模对于30%的数据,N<=10^8。对于100%的数据,N<=10^14。思路进行简单的数学推导。根据同余的数学定义(若(a−b)%p=0(a-b)\%p=

2021-08-19 21:59:03 96

原创 Treap模板

#include<iostream>#include<cstdio>#include<cstdlib>using namespace std;const int N=1e6,inf=0x3f3f3f3f;struct node{ int r;//随机的优先级 int size,val,cnt;//val为节点的权值,cnt为相同权值节点合并后的个数 int ch[2];//ch[0]为左儿子,ch[1]为右儿子 }tree[N];int n,rt,t

2021-08-18 21:41:41 212 2

原创 来自学长的快乐AK题——Day6 B

B——蜜汁做法Description有10个小球,小球的编号从0~9。初始状态按照从左到右编号为0,1,2,3…9的顺序摆在了桌子上,有一个长度大小为n的操作序列。操作序列的每一行表示一次操作都有两个非负整数a,b,表示本次操作将会交换位置a,b的2个小球(下标从0编号)一共有m次询问,每次询问时,将杯子中的小球重置为初始状态。给出[li,ri],连续从操作li进行到ri,连续操作完后依次回答位置0到9,对应位置的小球编号。输入给出n,m。接下来n行,给出第i个操作交换小球的位置a

2021-08-18 15:16:05 93

原创 来自学长的快乐AK题——Day6 A

A——蜜汁数论Description给出多组n,m,求C(n,m)的奇偶性。输入输出数据规模思路我看不懂题解的思路,但我有更骚的思路。设sum[i]记录i!i!i!中质因子2的个数。由于n,m最大到1e7,我们就可以进行预处理,像前缀和一样递推出所有sum[i](1≤i≤n1\leq i \leq n1≤i≤n)。对于一个C(n,m),将其化简为(m+1)∗(m+2)∗...∗n(n−m)!\frac{(m+1)*(m+2)*...*n}{(n-m)!}(n−m)!(m+1)∗(

2021-08-18 10:38:13 70

原创 来自学长的快乐AK题——Day5 D

D——差分Description多个询问,每个询问给出长度为n的2个序列a,b每次可以对1<i<n的ai进行操作,操作后,问能否通过若干次操作,使得序列a变成 b输入给出询问数T第一行一个正整数n第二行给出序列a第三行给出序列b输出是否能转变,输出Yes或者No,每个询问对应一行数据规模20%:2<=n<=10100%:2<=n<=1e5,0<=ai,bi<=2e9,T<=10思路反正我比赛的时候,对于这道题都没有想暴

2021-08-18 08:24:20 75

原创 来自学长的快乐AK题——Day5 C

C——Description一棵树删去任意条边,可以得到若干棵新树。若使让每棵新树的节点数相同。问有多少种方法分割这棵树。设给出的树的结点数为n,并给出n-1条边输入第一行一个正整数N,表示这棵树的结点总数。接下来N-1行,每行两个数字X,Y表示编号为X的结点与编号为Y的结点相连。结点编号的范围为[1,N]。输出一个整数,表示方案数。注意,不砍去任何一条边也算作一种方案。数据规模对于40%的数据,N ≤ 15对于60%的数据,N ≤ 10^5对于100%的数据,N ≤ 10^6数

2021-08-18 07:51:05 91

原创 来自学长的快乐AK题——Day5 B

B——并查集+最小生成树Description数据规模思路代码

2021-08-18 07:41:17 72

原创 来自学长的快乐AK题——Day5 A

A——简单数论Description数据规模思路由于k是个位数,我们可以很容易的得到k重复n次后的数字:kk...k⏟n个k\underset{n个k}{\underbrace{kk...k}}n个kkk...k​​。再对这个数进行拆分:kk...k⏟n个k=k∗11...1⏟n个1=k∗(10n−1+10n−2+...+100)\underset{n个k}{\underbrace{kk...k}}=k*\underset{n个1}{\underbrace{11...1}}=k*(10^{n-

2021-08-17 15:01:48 107

原创 来自学长的快乐AK题——Day4 D

D——数论Description给定n,求出所有正整数x,满足小于n,且x^2(%n)=1将满足的x按从小到大的顺序依次换行输出思路(来自教练的高质量题解QAQ)代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;const ll N=2000000000;ll n,ans[10000000],cnt;i

2021-08-16 15:48:14 62

原创 来自学长的快乐AK题——Day1 D

D——简单的容斥+快速幂Description有n个人依次排队打饭,有m种饭菜可以选择,每个人可能选择其中一种,如果相邻排队的人打的菜一样,那么就会影响彼此吃饭的心情,求这个队伍中有人被影响心情的状态数,对100003取余。思路直接考虑有人被影响心情的方案数显然有些困难,但容易发现总方案数和没有人被影响心情的方案数更容易计算,我们就可以考虑容斥,用总方案数减去不合法的方案数,得到合法的方案数。考虑队伍里的n个人,每个人都有m种选择,显然总方案数为mnm^nmn。考虑没有人被影响心情的方案数,第一

2021-08-16 15:48:02 65

原创 来自学长的快乐AK题——Day1 C

C——模拟+维护中位数Description给出一个长度为n的排列ai以及seed,求ans=2∗∑l=1n∑r=lnseed(l−1)∗n+rmid(l,r)ans=2*\sum _{l=1}^n \sum _{r=l}^n seed^{(l-1)*n+r}mid(l,r)ans=2∗l=1∑n​r=l∑n​seed(l−1)∗n+rmid(l,r)结果对1000000007取模。mid(l,r)指al,al+1,…,ar-1,ar 的中位数。思路a是一个全排列,n<=10^4如果进

2021-08-16 15:47:44 133

原创 来自学长的快乐AK题——Day1 B

B——蜜汁做法Description思路对于一个矩阵,左上角为[x1,y1],右下角为[x2,y2]它的权值计算为ax1*(by1+…+by2) +…ax2*(by1+…+by2)即(ax1+…+ax2)*(by1+…+by2)发现x跟y没有必然的关系可以分开处理枚举a的可能区间[x1,x2],预处理所有的by区间和对于一个限制[L,R]若x选定为[x1,x2],则(L/suma[x1,x2],R/suma[x1,x2])为by区间和可以选择的范围(注意考虑小数取整)对于

2021-08-16 15:47:13 76

原创 来自学长的快乐AK题——Day1

来自学长的快乐AK题——Day1A——快乐区间动规A——快乐区间动规Description定义操作a(X)b= ((a&b) + (a|b))>>1给出n个数ai每次用操作合并任意相邻ai求进行n-1次操作以后可能得到的最终结果所有结果从小到大输出思路考虑区间DP,设fi,j,k表示区间i~j能否通过合并得到数字k,为1则能,为0则否。考虑如何转移。用区间DP的老套路,枚举分割点g,将区间i~j分割为区间i~g和区间g+1~j,将两个小区间的状态合并得到大区间的状态

2021-08-16 15:46:57 173

原创 主席树总结

主席树的全称是可持久化权值线段树,即主席树 ⫋ 可持久化线段树。——某大佬博客如是云

2021-08-15 20:52:52 79

原创 来自学长的快乐AK题——Day1 A

A——快乐区间动规Description定义操作a(X)b= ((a&b) + (a|b))>>1给出n个数ai每次用操作合并任意相邻ai求进行n-1次操作以后可能得到的最终结果所有结果从小到大输出思路考虑区间DP,设fi,j,k表示区间i~j能否通过合并得到数字k,为1则能,为0则否。考虑如何转移。用区间DP的老套路,枚举分割点g,将区间i~j分割为区间i~g和区间g+1~j,将两个小区间的状态合并得到大区间的状态。对于任意状态fi,g,p和fg+1,j,q,若两者

2021-08-13 08:17:56 76

原创 来自学长的快乐AK题——Day2

来自学长的快乐AK题——Day2A——蜜汁做法B——最小生成树C——维护第k大的数D——差分。。。之类的东东TipsA——蜜汁做法Descriptionn个小球排成一列,第i个小球颜色为ai定义小球i与j的距离为|(i-j)*(ai-aj)|求所有小球间距离之和i与j 和 j与i 不必重复计算100%:n<=1000000,0<=ai<=1思路由条件容易得到:只有当ai-aj不为0,即ai和aj不相等时,距离才不为0。也就是说,只有ai与aj不相等的两个小球才能产生贡献

2021-08-13 08:09:03 369 3

原创 来自学长的快乐AK题——Day2 D

D——差分。。。之类的东东Description题面有误,应该为子串长度。(否则这题就sb到爆了)思路考虑差分的思想,为男生则赋值+1,为女生则赋值-1,做前缀和。倘若一段区间i~j内男女个数相等,则该区间的所有值之和显然等于0(因为个数相等的+1和-1互相抵消了)。用前缀和来表示,即s[j]-s[i-1]=0。简单移项可以得到s[j]=s[i-1]。也就是说,如果s[j]=s[i],那么i+1~j就是一个男女人数相等的区间。用桶记录之前出现过的最早的s数组值的位置(因为要求最大),倘若之后

2021-08-13 08:04:40 61

原创 来自学长的快乐AK题——Day2 C

C——维护第k大的数Description给出一个长度为n的序列A描述一个长度为n的全排列a,Ai表示前i-1个数中有多少个数比ai大。请求出这个全排列a思路从后往前遍历A,根据题目中的定义,a的前n-1个数中有An个数比an大,换言之,an就是1~n中第An+1大的数。同理,an-1就是除去已经确定的an后第An-1+1大的数。以此类推,就将问题转化为如何维护一个序列中的第k大数。算法还是有很多,例如快排(nlogn),归并(nlogn或n),我是采用更好写也更快的桶排(n),卡到了O(n2)

2021-08-13 08:03:52 179

原创 来自学长的快乐AK题——Day2 B

B——最小生成树Descriptionn个人,每个人都有一份情报人之间都可以交流,交流有对应的费用,交流完后各自享有对方的情报A与B交流,A与C交流,B与C也可以互相享有派遣n个人中任意一人去执行任务都有对应的费用要求:派遣人去执行任务,派遣的人需要包含所有的情报(不一定只派遣一个),问最小花费思路比赛时一眼看过去,就知道遇见了你,我的最小生成树!首先,考虑两个人花一定费用见面,就能互相知道对方的情报,就联想到用一条边将两个点连接起来。考虑派遣出去的人必须得到所有人的情报,就联想到一张图中

2021-08-13 08:01:54 71

原创 来自学长的快乐AK题——Day2 A

A——蜜汁做法Descriptionn个小球排成一列,第i个小球颜色为ai定义小球i与j的距离为|(i-j)*(ai-aj)|求所有小球间距离之和i与j 和 j与i 不必重复计算100%:n<=1000000,0<=ai<=1思路由条件容易得到:只有当ai-aj不为0,即ai和aj不相等时,距离才不为0。也就是说,只有ai与aj不相等的两个小球才能产生贡献。观察数据范围,很容易发现一个突破口:ai不是0就是1。那么对于一个0色球来说,只有1色球能与它产生贡献,1色球同理。

2021-08-13 08:00:32 93

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除