随笔分类 -  基本算法

摘要:(不会证明……以后再说) 费马小定理 对于任意$a,p \in N_+$,有 $a^{p 1} \equiv 1\pmod {p}$ 推论: $a^{ 1} \equiv a^{p 2} \pmod{p}$ 即$a^{p 2}$为$a$模$p$意义下的乘法逆元。 欧拉定理 对于$a,p \in N^ 阅读全文
posted @ 2019-10-13 18:29 onyYuan 阅读(210) 评论(0) 推荐(0)
摘要:裴蜀定理 : 对于$a,b\in N^ , x, y\in Z$,方程$ax+by=k$当且仅当$gcd(a, b)|k$时有解。 证明: 必要性显然。 充分性:只需证明当$k=gcd(a, b)$有解。 设$s$为令方程有解的最小$k$值,$gcd(a, b) = d$,首先有$d|s$。 设$t 阅读全文
posted @ 2019-10-13 10:44 onyYuan 阅读(350) 评论(0) 推荐(0)
摘要:上午 T3: 上图表示了一个方阵,沿行、沿列及两个对角线的5 个数字可被当作一个5 位的质数被读入。 对于行,自左向右读数;对于列,自上向下读数;对于对角线,两个对角线 均自左向右读数。 请读入数据,编一个程序,按以下要求构成方阵。 质数中每位之和(行、列、对角线)必须相同(本例是11)。 方阵左上 阅读全文
posted @ 2019-08-22 20:47 onyYuan 阅读(273) 评论(0) 推荐(0)
摘要:题意:给定一列数,分成m段,使每段和的最大值最小。 考虑二分最小段和size,答案显然满足单调性。可以在每次check中累加数列元素判断当前组的总和是否在size以内。由于序列元素均为非负整数,前缀和数组的值满足非严格单调递增,那么可以在前缀和上再套一个二分来优化暴力累加的过程。 我不知道优化以后的 阅读全文
posted @ 2019-08-16 21:52 onyYuan 阅读(199) 评论(0) 推荐(0)
摘要:(题面来自AcWing) 有N个元素,编号1.2..N,每一对元素之间的大小关系是确定的,关系不具有传递性。 也就是说,元素的大小关系是N个点与N*(N-1)/2条有向边构成的任意有向图。 然而,这是一道交互式试题,这些关系不能一次性得知,你必须通过不超过10000次提问来获取信息,每次提问只能了解 阅读全文
posted @ 2019-08-10 18:36 onyYuan 阅读(186) 评论(0) 推荐(0)
摘要:(题面来自AcWing) 给定一个长度为 n 的数列 a1,a2,…,an,每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。 求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。 输入格式 第一行输入正整数n。 接下来n 阅读全文
posted @ 2019-08-06 20:05 onyYuan 阅读(185) 评论(0) 推荐(0)
摘要:(题面来自AcWing) 一种新型的激光炸弹,可以摧毁一个边长为 R 的正方形内的所有的目标。 现在地图上有 N 个目标,用整数Xi,Yi表示目标在地图上的位置,每个目标都有一个价值Wi。 激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个边长为 R的正方形的边必须和x,y轴平行 阅读全文
posted @ 2019-08-06 19:36 onyYuan 阅读(176) 评论(0) 推荐(0)
摘要:(题面来自ACwing) 从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。 输入格式 两个整数 n,m ,在同一行用空格隔开。 输出格式 按照从小到大的顺序输出所有方案,每行1个。 首先,同一行内的数升序排列,相邻两个数用一个空格隔开。 其次,对于两个不同的行,对应下标的数一一 阅读全文
posted @ 2019-08-06 10:09 onyYuan 阅读(294) 评论(0) 推荐(1)
摘要:(题面来自ACwing) 城市的规划在城市建设中是个大问题。 不幸的是,很多城市在开始建设的时候并没有很好的规划,城市规模扩大之后规划不合理的问题就开始显现。 而这座名为 Fractal 的城市设想了这样的一个规划方案,如下图所示: 当城区规模扩大之后,Fractal 的解决方案是把和原来城区结构一 阅读全文
posted @ 2019-08-03 20:42 onyYuan 阅读(249) 评论(0) 推荐(0)
摘要:(题面来自luogu) 题目描述 输入两个正整数a和b,求a^b的所有因子之和。结果太大,只要输出它对9901的余数。 输入两个正整数a和b,求a^b的所有因子之和。结果太大,只要输出它对9901的余数。 输入格式 仅一行,为两个正整数a和b(0≤a,b≤50000000)。 仅一行,为两个正整数a 阅读全文
posted @ 2019-07-27 16:47 onyYuan 阅读(210) 评论(0) 推荐(0)
摘要:这是算法进阶上的三个例子。 一、指数型枚举 从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。 输入格式 输入一个整数n。 输出格式 每行输出一种方案。 同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。 对于没有选任何数的方案,输出空行。 本题有自定义校验器(SPJ),各 阅读全文
posted @ 2019-07-25 17:26 onyYuan 阅读(462) 评论(0) 推荐(0)
摘要:题意:给出一张含有n(n<20)个点的完全图,求从0号节点到第n-1号节点的最短Hamilton路径。Hamilton路径是指不重不漏地经过每一个点的路径。 算法进阶上的一道状压例题,复杂度为O(n^2 * 2^n),还是蛮恐怖的。 设f[i][j]表示当前经过状态为i,且当前在点j所花费的最小代价 阅读全文
posted @ 2019-07-25 17:03 onyYuan 阅读(515) 评论(0) 推荐(0)
摘要:题目大意:给定两数a,b和模数p,求a*b mod p的值。 解法一:迭代累加法 用类似于快速幂的思想,我们把a*b看作b个a相加,每次将各项两两合并,然后令b除以2。特判b不是2的倍数时把单独的一项累积到答案上。复杂度为对数级别。 代码: 解法二:转化原式后O(1)求解 这个方法我想了好久才明白… 阅读全文
posted @ 2019-07-25 16:45 onyYuan 阅读(447) 评论(2) 推荐(0)
摘要:(题面来自luogu) 题意翻译 你有一棵以1为根的有根树,有n个点,每个节点初始有一个颜色c[i]。 有两种操作: 1 v c 将以v为根的子树中所有点颜色更改为c 2 v 查询以v为根的子树中的节点有多少种不同的颜色 翻译贡献者UID:28455 n、m <= 4e5,ci <= 60。 今天唯 阅读全文
posted @ 2019-07-19 20:31 onyYuan 阅读(161) 评论(0) 推荐(0)
摘要:(以下是luogu题面) 题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权。其中lastans是上一个询问的答案,初始为0,即第一个询问的u是明文。 输入输出格式 输入格式: 第一行两个整数N,M。 第二行 阅读全文
posted @ 2019-07-15 19:09 onyYuan 阅读(149) 评论(0) 推荐(0)
摘要:(7.15)康托展开,就是把全排列转化为唯一对应自然数的算法。它可以建立1 ~ n的全排列与[1, n!]之间的自然数的双向映射。 1、康托展开: 尽管我并不清楚康托展开的原理何在,这个算法的过程还是比较好记的。正确性之后有机会询问下学长。 如果从1开始给全排列的排名从大到小编号的话(从0开始也可, 阅读全文
posted @ 2019-07-15 12:05 onyYuan 阅读(214) 评论(0) 推荐(0)
摘要:这个题是很经典的生成树问题。第一次接触时对倍增算法的理解还不够透彻,没能打出来正解。 首先,原题中给出的是一幅图,询问从某点出发到另一点“需要经过的最短边的最大值”。用floyd来解决是可以的,但是数据范围不能承受O(n^3)的复杂度。于是我们考虑:假设原图是连通的,那么我们从某点到另一点,一定至少 阅读全文
posted @ 2019-07-04 15:40 onyYuan 阅读(129) 评论(0) 推荐(0)
摘要:#include<cstdio> #include<iostream> #include<cctype> using namespace std; int read() { int s = 0, f = 1; char ch = getchar(); while(!isdigit(ch)) { if 阅读全文
posted @ 2019-03-27 12:31 onyYuan 阅读(4735) 评论(5) 推荐(1)