在这题TLE了一天-T_T BSGS裸题-不知道为什么一直挂 第二天(也就是今天)换成黄学长博客里的写法就过掉了 题意:解关于$x$的方程:$a^x \equiv b \pmod{p}$,$p$为质数,有多解则输出最小的那个 (和原题里的字母不一样x) 这玩意好像叫离散对数. 首先得注意到$x$的取值只有可能是$0~p-1$,因为费马小定理告诉我们$a^{p-1} \equiv a^{0} \pmod{p}$,这时候出现了循环 不过直接枚举复杂度还是不行的 考虑把$x$写成$x=k*m+i$的形…
今天来学了下莫队-这题应该就是这个算法的出处了 一篇别人的blog:https://www.cnblogs.com/Paul-Guderian/p/6933799.html 题意:一个序列,$m$次询问:求区间$[l,r]$内随机选出两条袜子(不放回去)颜色相同的概率,保留最简分数,$m,n,col \leq 50000$ 对于一个询问$[l,r]$,分母为$(r-l+1)*(r-l)$,分子为$\sum_{i} (sum[col[i]])^2-(r-l+1)$,其中$sum[col[i]]$表…
题意:单点修改,询问区间最大子段和,$n\leq 5e5$ 考虑分治的方法$O(nlogn)$求一次最大子段和的做法,我们是根据中点分成左右两个区间,那么整个区间的答案要么是左边答案,要么是右边答案,要么是左边的最大后缀和加上右边的最大前缀和.而一个区间的最大前缀和又会等于它左区间的最大前缀和或者是左区间的和加上右区间最大前缀和. 基于这种思想我们就有了一种动态求最大字段和的算法了,区间和,前缀后缀和,都可以直接用线段树维护,用这些信息就能求出最大子段和了. 注意询问的时候应该把整个结点的信息储…
啊居然要特判,卡了好久QAQ (好像Windows下的rand和Linux下的不一样? QwQ一些东西参考了喵铃的这篇blog:http://www.cnblogs.com/meowww/p/6400841.html  (业界良心) 题目 题意:输入$n$,求$phi(n)$,$n \leq 10^{18}$ 随便抽的题,刚好学习一下相关的算法. 很明显朴素的根号算法时间复杂度补滋兹,线性筛更不用想了,不过这题只需要单个欧拉函数值,还是直接考虑$phi(n)=n*\prod_{i=1}^k(1-…
又是写了一晚上才过的题- 题意:有一个数列$x_n=(ax_{n-1}+b) mod p$,给你$x_1,a,b,p,t$,求最小的$x_i=t$的$i$,可能不存在 一开始很自然的推出了式子$x_n \equiv a^{n-1}x_1+b*\frac{a^{n-1}-1}{a-1} \pmod p$ 这时候如果$a=1$的话就特判一下然后用exgcd做 否则让$x_n=T$得到$a^{n-1}*(ax_1-x_1+b) \equiv (a-1)T+b \pmod p$ 如果$ax_1-x_1+…
本篇文章是Hash在信息学竞赛中的应用的学习笔记,分多次更新(已经有很多坑了) 一维递推 首先是Rabin-Karp,对于一个长度为\(m\)的串\(S\) \(f(S)=\sum_{i=1}^{m}s[i]*p^{m-i} \mod q\) 那么在一个长度为\(n\)的文本串中找长度为\(m\)的子串,设该子串的首位下标为\(i\) \(f(S_i)=\sum_{j=i}^{m+i-1}s[j]*p^{(m+i-1)-j} \mod q\) \(f(S_{i+1})=\sum_{j=i+1}^…
模板题~ QAQ话说Simpson法的原理我还是不太懂-如果有懂的dalao麻烦告诉我~ 题意:每次给一个椭圆的标准方程,求夹在直线$x=l$和$x=r$之间的面积 Simpson法 (好像有时候也被叫Simpson公式,Simpson积分什么的-看到这里的人应该都知道这个是用来干嘛的吧) 对一段小区间$[l,r]$取奇数个点,然后把区间平均分成$n$段:$x_0,x_1,x_2, \cdots,x_n$,每段长度$\Delta x$,那么: $\int_l^r f(x) dx \approx…
题意:输入$k,n$,求$\sum_{i=1}^n k \mod i$ $k \mod i=k-i*\lfloor \frac{k}{i} \rfloor $,$n$个$k$直接求和,后面那个东西像比较套路的分段求和 算k/(k/i)这种东西的时候还要注意判一下分母为0什么的- #include<cstdio> typedef long long lint; lint n,k,ans; inline lint min(lint a,lint b){return a<b?a:b;} inl…
题意就是求最小割- 然后我们有这么一个定理(最大流-最小割定理 ): 任何一个网络图的最小割中边的容量之和等于图的最大流. (下面直接简称为最大流和最小割) 证明: 如果最大流>最小割,那把这些割边删去之后依然能找到一条增广路使得源点和汇点联通,和这些边是最小割矛盾.故最大流$\leq$最小割. 而如果最大流<最小割,可是这样通过这些割边还能有更大的流,和最大流矛盾. 综上,最大流=最小割~ 然后看看这道题-哇$n\leq 1000$,百万个点百万条边-好吧Dinic其实跑得过-而且还蛮快的-…
方格取数的升级版,每个格子最多取一次. $k=1$的话就是个普及组的dp题,$k=2$就是在之前的基础上多加两维. 然而现在$k$太大了当然就不dp啦 对于$k=1$的情况我们还可以把$(i,j)$向$(i+1,j),(i,j+1)$连边然后答案就是跑最长路,而对于更大的情况我们的瓶颈在于直接跑最长路不能限制每个点只取一次. 对于点来说没有什么好的方法我们就把问题转移到边上:把每个点拆成一条边.具体的说就是把一个点拆成两个点,把点权变成边权,而我们又要限制这样子的每条边最多走一次,这里就有点费用…