自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)

原创 数论

1.对于大整数NNN来说,不大于NNN的质数大约有Nln⁡N个\frac{N}{\ln N}个lnNN​个 2. 判断质数的方法 试除法 复杂度O⁡(N)\operatorname{O}(\sqrt N)O(N​) 绝对正确 Miller Robbin 非常高效,但有将合数判为质数的可能 通过费马小定理,猜想当满足am−1≡1(modm)a^{m-1}\equiv1\pmod mam−1≡...

2020-02-19 16:01:41 23

原创 poj2891 Strange ways to express integers

题目没说互质,所以用不了中国剩余定理。 通过数学归纳法: 假设前面的几个方程组成的方程组的通解为k∗t+r,k为任意整数.k*t+r,k为任意整数.k∗t+r,k为任意整数. 则接下来的这一步对于输入的两个数a,ba,ba,b我们要找 k∗t+r≡b(moda)k*t+r\equiv b\pmod ak∗t+r≡b(moda) 即k∗t+r+l∗a=b的整数解k*t+r+l*a=b的整数解k∗t+...

2020-02-19 15:54:09 14

原创 poj3696 The luckiest number

问题转化:问题转化:问题转化: x888…8⏞=8∗(10x−1)9\begin{matrix}x\\\overbrace{888\dots8}\end{matrix}=\dfrac{8*(10^x-1)}{9}x888…8​=98∗(10x−1)​ 令gcd⁡(8,L)=d,令\gcd(8,L)=d,令gcd(8,L)=d, L∣8(10x−1)9  ⟺  9Ld∣10x−1  ⟺  10x≡1...

2020-02-18 17:09:40 18

原创 poj1084 Square Destroyer

这题的关键是如何存储信息 IDA*估计函数:找到一个未被删除的正方形并去掉所有边,但只记一次操作 一定小于等于实际 从当前的最小的正方形(使得搜索树小)开始枚举删去其中的边 代码(关键函数变量有注释) #include<iostream> #include<cstdio> #include<vector> #include<cstring> usi...

2020-02-17 10:43:00 32

原创 noip2009/acwing200 Hankson的趣味题

好题。 (解法不写了 #include<iostream> #include<cstdio> using namespace std; int n; int vis[50005],prim[50005],cnt; int ans; int cal(int x,int y) { int ret=0; while(x&&x%y==0) { x/=y...

2020-02-16 17:25:25 38

原创 acwing199 余数之和

把问题转化为求n∗k−∑i=1nk−⌊k/i⌋∗i把问题转化为求n*k-\sum\limits_{i=1}^nk-\lfloor k/i \rfloor*i把问题转化为求n∗k−i=1∑n​k−⌊k/i⌋∗i 令g⁡(x)=⌊k/⌊k/x⌋⌋令\operatorname{g}(x)=\lfloor k/\lfloor k/x \rfloor \rfloor令g(x)=⌊k/⌊k/x⌋⌋ 则⌊k/g...

2020-02-16 15:44:10 22

原创 bzoj1053

很重要的需要看出来的结论: 每个数分解后包含的不同质数个数最多10个 因为最小的11个质数相乘大于2e9了 每个质数的次数不超过30 因为2302^{30}230超过了2e9 质数的指数一定随着底数的增大而减小(否则一定存在g(i)=g(x)且i<x,则x不是anti-prime) 以此为准进行搜索 非常快速 代码 #include<iostream> #include&lt...

2020-02-16 14:11:41 13

原创 poj1077/acwing179 Eight

A*算法 估价函数为当前每个数到最终结果的曼哈顿距离(因为是和空格交换 所以只能改变一个数的情况 故此处满足f(x)<g(x)) 对于一个矩阵的表示(因为要判断vis)可以使用暴力n*n康托展开 但是我的代码跑得很慢 应该可以双向bfs什么的会快一点(或者discuss里好像有单向过的?) 代码 #include<iostream> #include<cstdio> ...

2020-02-14 17:25:28 30

原创 poj2449/acwing178 第k短路

A*的算法核心:选择一个合适的估计函数f(x),且必须估计值小于等于实际值(否则是错的)实际值表示为g(x),则f(x)<=g(x) 本题因为是一张图 所以想到每个点的估计函数作为该点到终点的最短路 。这样符合要求,且能顺应g(x)的实际变化趋势 代码 #include<iostream> #include<cstdio> #include<queue> ...

2020-02-14 14:23:33 21

原创 hdoj3085 / acwing177 Nightmare

双向dfs 男孩女孩每到一个地方标记最小时间 第一次来到对方标记的地方的时间就是答案 代码 #include<iostream> #include<cstdio> #include<queue> #include<cstring> #include<cmath> using namespace std; int n,m; char s[...

2020-02-13 18:11:18 26

原创 acwing175电路维修

看成一张图 如果是原来摆成的状态意为着边权为0,否则为1,在跑最短路 这里很特殊的一点是只有0,1所以我们扩展的时候 若边为0 则将扩展的点插入到队首 否则插入到队尾 这需要一个deque 但是可以维护广搜队列任意时刻的两段性和单调性 没有vis数组 因为不能保证第一次扩展到就是最短 但是由于满足广搜的上述两条性质 可以保证每次出队的时候距离就是最短距离(仔细想想)所以复杂度还是O(r*c)的 代...

2020-02-13 14:38:49 24

原创 poj1475/acwing174 推箱子

这题思路挺新的,,可是相比实现并不那么恶心 因为要求箱子的移动次数少 可以bfs,用三元组(x,y,dir)表示箱子在(x,y),dir是人所在的箱子的方向 因为在箱子移动次数少的基础上还要人移动尽可能少 所以每次判断人的移动时要再bfs一次(也就是bfs里套了一个bfs) 实际实现时我的队列里存储了6个量 q[x][0]:dir q[x][1]:x q[x][2]:y q[x][3]:上一个状态...

2020-02-13 12:18:56 72

原创 acwing173 矩阵距离

很简单 但所含思路我认为非常重要 方法:一次性把所有值为1的坐标都入队,再进行bfs 很好地利用了bfs的最短特点 代码 #include<iostream> #include<cstdio> using namespace std; int n,m; bool a[1005][1005]; bool vis[1005][1005]; int ans[1005][1005...

2020-02-12 14:53:59 27

原创 poj3076 16*16soduku

思路 1.若某一个格子只有一种填法了 那就填上 2.若某个格子一种填法也没有 无解 3.若某行/列/宫格中某个字母的填法唯一 填上 4.若某行/列/宫格中某个字母不能填 无解 在以上的情况下 再选择可选选项最少的格子去填就行 最近做了几个搜索题,可以感觉到在一层dfs里多几个小的遍历没有关系 关键要让搜索树小才能快 #include<iostream> #include<cstd...

2020-02-11 17:49:25 78

原创 poj1190 生日蛋糕

原始思路(黑色) 正解(highlighter) 从几个角度考虑 优化搜索顺序: 本题本来就有顺序 对,的确要从下往上 排除等效冗余: 无 无 可行性剪枝: 若往上放的蛋糕体积尽可能大也不符合要求直接return 除此之外还要注意: 1.若放上的体积最小也超出return 2.h和r的取值范围要大于从上往下数的层数(否则后面无法安排)3. h和r要小于上一层且小于sqrt(n-v),v是已经摆出...

2020-02-11 09:09:20 21

原创 poj1011 sticks

做完这题后 再也不敢说自己会搜索会剪枝了 剪枝思路见代码注释 使用的方法 1 优化搜索顺序 2 排除等效冗余(主要) 代码 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n; int sum,cnt...

2020-02-10 23:02:31 45

原创 acwing165 小猫爬山

这题很简单的dfs 之所以说是因为一开始贪心错了 我原本的贪心思路: 先从大到小排序 若能在已有的当中找到一个车厢放进这只小猫 就把它放进去,否则开一个新车厢来放 hack: 4 7 3 3 2 2 2 2 正解:2 错解:3 正确思路: dfs(x,y)正在放第x只 已经用了y个车厢 然后把x放进1-y个以及新开车厢都试一遍 优化: 一开始从大到小排序(减少搜索树大小);若y>ans 直接...

2020-02-10 17:16:03 37

原创 acwing160 匹配统计

做法1:哈希+二分 时间复杂度O(nlogm+q) 做法2:kmp匹配 时间复杂度O(n+m+q) 值得思考的做法2 cnt[j]表示匹配长度为j的个数 一位一位的kmp匹配 若我们发现到a的第i位有b的前j个与它匹配 就++cnt[j] kmp后倒着遍历 cnt[nxt[j]]+=cnt[j],因为kmp每一位匹配到的都是当前最长的,这一遍可以把短的也加进来 但这样会有一个问题 若一个a的后缀与...

2020-02-10 09:09:14 22

原创 poj2185 Milking Grid

#挺难的题 数据水 看了几篇题解才确定了正确做法 对于一个长度为n的字符串,kmp一遍,它的最短题目要求的长度为n-nxt[n] a个不可分割出循环节的字符串连在一起是不可写成b个连在一起的形式的(a,b互质) 但是对于AAAABAAA,符合的长度有5,6,7,8并不全是8-nxt[8]=5的倍数 所以在得出5这个答案后 要把后面三个(AAA)再kmp一次得到1,所以答案为5,5+1,5+1+1,...

2020-02-09 16:13:00 23

原创 poj1635 Subway tree systems

把0看成1 1看成-1 对于一个子树来讲如果从开头到某一段的和为0表示又回到了这个子树的根 根据子树把字符串截乘小段 再sort string 方便比较两个树是否相同 注意截成的小段递归求解时要把开头和结尾的0和1去掉 才算是以这个子树的根为起点(开头本来表示进入这个根,结尾本来表示离开这个根) 好用的stl: ss=s.substr(a,b) a为起点下标,b为长度 sort(vs,begin(...

2020-02-09 11:37:23 26

原创 poj1193/LGp5763 内存分配

好题。算法不难,实现巧妙 堆(按结束时间排序) 链表 表示已经占据的空间的开始点和长度 用set表示了 队列 等待分配的 代码 #include<iostream> #include<cstdio> #include<set> #include<queue> #define PII pair<int,int> using namespac...

2020-02-08 22:59:39 61

原创 acwing154/LGp1155 双栈排序

性质 若存在k>i>j且a[k]<a[i]<a[j] 则i,j不可被放进同一个栈 充分性、必要性均易证 对这样的i,j连一条无向边,再判断整个图是不是二分图 代码 #include<iostream> #include<cstdio> #include<memory.h> using namespace std; int n; bool ...

2020-02-08 16:39:46 99

原创 acwing150 括号画家

空序列是合法括号序列 若A是合法括号序列,则(A),[A],{A}也是 若A,B是合法括号序列,则AB也是 这是一个在题目里常见的规则。 本题的要求是输入一个字符串,输出其中最长的连续括号序列。 O(n)判断一个序列是否括号序列是很简单的。但本题不适用。 这里有两种思路: 1,栈 对于每个字符,如果能与栈顶的字符匹配,则出栈 不可的话则进栈 这里用栈存储下标,既方便知道对应的字符,也可计算长度 每...

2020-02-08 10:44:41 41

原创 bzoj1150

这题调了我3小时… 显然只选相邻的两个楼。 a_i表示第i个楼与第i+1个楼的距离设i时a_i取最小时的i 根据题意选了a_i就不能选a_(i-1),a_(i+1) 所以在选了a_i后删去a_i,a_i-1,a_i+1并加入a_(i+1)+a_(i-1)-a_i,如果后面选了新加的就表示不应选a_i而应a_(i-1)和a_(i+1),因为a_i最小所以旁边两个要么同时选要么同时不选 边界要特殊考虑...

2020-02-07 15:09:14 17

原创 poj2442

先考虑m=2的情况 将数组排好序 最小的和肯定是a_1+b_1 假设这一个答案为a_i,b_j下一个答案的可能会加入a_i+1,b_j和a_i,b_j+1 把所有可能的下一个加入一个堆 为了避免一个答案被加入两次 ,可以用vis数组或者直接在加入堆时加入一个变量g表示有无移动过j 如果移动过后面就不能移i只能移j,可以保证不会重复选到 代码 #include<iostream> #in...

2020-02-07 10:46:47 16

原创 acwing143&144最大异或和

acwing143 在给定的N个整数A1,A2……AN中选出两个进行xor(异或)运算,得suoyi到的结果最大是多少? 建乘一字典树。插入0,1(从高位向低位) 查找相当于贪心?因为从高位查起,所以满足这一位即使后面每一位不满足,也比这一位不满足后面每一位都满足要强(二进制真好) 代码 #include<iostream> #include<cstdio> using ...

2020-02-06 17:02:59 35

原创 poj1961

先kmp匹配一遍 设s的下标为1~n 则当i%(1−nxti)=0i\%(1-nxt_i)=0i%(1−nxti​)=0时有K=1−nxtiK=1-nxt_iK=1−nxti​的的答案 证明: 令sl,rs_{l,r}sl,r​表示由第lll位到第rrr位组成的字符串(inclusive) 令len=i−nxtilen=i-nxt_ilen=i−nxti​ 由nxtnxtnxt的定义可知 s1,i...

2020-02-05 23:08:46 22

原创 manacher复杂度证明

洛谷p3805 manacher模板题 复杂度证明: 令fif_ifi​表示第i个字母while进行的次数,mximx_imxi​表示第i次结束后mx的值。可知,mx是非降的 可得 fi=mxi−mxi−1  (i<=mxi−1)f_i=mx_i-mx_{i-1}\;(i<=mx_{i-1})fi​=mxi​−mxi−1​(i<=mxi−1​) fi=mxi−i  (i>m...

2020-02-05 10:53:10 24

原创 bzoj2457

将数先排好序 记录每种数字在原序列中最小和最大的出现位置 该问题相当于把排序好的数组分成最少的段数 使每段在原序列的出现顺序满足单谷性质(先单调递减再单调递增),因为只有这样才能按照题目的意思放进同一个双端队列 记录最大最小值的目的是判断这一段能否与之前的升/降接上 如果不可的话就改变当前的升/降 代码 //11:18 #include<iostream> #include<cs...

2020-02-04 12:05:33 71

原创 poj3714

知识点:分治+平面最近点对 全部排好序后:截中点 分别先考虑左右两半 假设左右两半最近点距为d 就再在距离mid d的范围内考虑就可 一层层递归下去时间复杂度不太高 代码 #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> using namespace st...

2020-02-02 19:36:37 145

原创 poj3179

二维离散化 二分 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int c,n; int len; int a[505],b[505]; int tmp[1005],s[1005][1005]; bool check(int x) { int pos=...

2020-02-01 13:26:42 97

原创 洛谷p2690

f[i][j]表示第i时刻移动了j次的最大答案 转移: f[i][j]=max(f[i-1][j],f[i-1][j-1])+(a[i]==(j%2+1)) 注意:一开始Bessie处在第一棵树 代码 #include<iostream> #include<cstdio> using namespace std; int t,w; int a[1005],f[1005][...

2020-02-01 09:31:26 35

原创 矩阵乘法

n×m的矩阵a 乘 m×k的矩阵b 等于 n×k的矩阵c 其中 for(int k=1;k<=m;++k)c[i][j]+=a[i][k]*b[k][j]

2020-01-31 11:13:49 17

原创 扩展欧几里得

朴素欧几里得: gcd(a,b)=gcd(b,a mod b) 。 这个是比较好证明的: 假设 a=k∗b+r ,有 r=a mod b 。不妨设 d 为 a 和 b 的一个任意一个公约数,则有 a≡b≡0(mod d) 。 由于同余的性质 a−kb ≡ r ≡ 0(mod d) 因此 d 是 b 和 a mod b 的公约数。 然后 ∀ d|gcd(a,b) 都满足这个性质,所以这个定理成...

2020-01-31 09:32:42 38

原创 poj1328

[poj1328题解] 通过坐标系距离公式计算满足能探测到岛屿i的雷达可能的区间[xi,yi] 根据x的大小从小到大排一遍 若xi>y(i-1)则需要一个新的雷达 若xi<=y(i-1)则可以与上一个岛屿共用 并yi=min(yo,y(i-1))以便正确判断后面的 如此贪心即可 代码 #include<iostream> #include<cstdio> #in...

2020-01-30 19:29:03 88

原创 欧拉路的困惑

今天写了一道欧拉路的模板题 洛谷p2731 对于欧拉回路要用栈记录不是很理解 现针对此题给出一种hack掉随dfs输出的数据 8 1 2 2 3 3 4 4 2 4 5 4 6 5 1 6 1 画图然后再感受一下 正解的算法真的是妙不可言啊 ...

2020-01-20 22:28:55 21

原创 提醒

strlen()超级慢 尽量少引用不然TLE

2020-01-20 22:27:56 37

原创 c++ windows下对拍

c++ windows下对拍程序笔记 #include<bits/stdc++.h> #include<windows.h> using namespace std; int main(){ while(1){ system("Untitled3.exe>data.in");//造数据的exe system("Untitled1.exe<data.in...

2019-08-29 21:40:38 110

空空如也

空空如也

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