其他oj
笑对这个世界的志贵
这个作者很懒,什么都没留下…
展开
-
【BFS】FZU 2150 Fire Game
Problem Description 给你T组数据,给你一个n,m的矩阵,.#分别代表空地,草丛。让你找两个草丛,开始烧,要求把所有的草都烧完,所需要最少的时间。烧一个草可以向上下左右扩散,扩散时间+1.代码:找到所有草地下标。两两遍历所有的草丛,求出最小#include<cstdio>#include<queue>#include<algorithm>#include<cstring翻译 2017-05-15 22:05:02 · 204 阅读 · 0 评论 -
【欧拉函数打表】LightOJ - 1370 Bi-shoe and Phi-shoe
Problem Description 给出一些数字,对于每个数字找到一个欧拉函数值大于等于这个数的数,求找到的所有数的最小和。f(n)的n至少从2开始。思路: 欧拉函数f(n)定义:表示小于或等于n的数中与n互质的数的数目,f(n) = n∏(1 - 1/p)其中p|n 欧拉函数求值的方法: (1) f(1) = 1; (2) 若n是素数p的k次幂,f(n) = p翻译 2017-10-16 10:59:22 · 238 阅读 · 0 评论 -
【Lucas定理 && C(n, m)%p && 逆元】FZU - 2020 组合
Problem Description 求C(n,m) mod p的结果, 其中p是素数思路: 参考博客 求逆元 a*x ≡ 1(mod p)。 因为p是素数,所以我们求逆元可以用费马小定理 和 欧拉定理 a^(p-1) ≡ 1(mod p) -&gt; a*a^(p-2) ≡ 1(mod p)。所以a^(-1) = a^(p-2) 还有一种通用的求逆元方法,适合所有翻译 2017-10-23 16:14:41 · 356 阅读 · 0 评论 -
【判断点在不在三角形内】FZU 2148 Moon Game
Problem Description 给你T组测试数据,每组测试数据给你一个n,接下来有n组,每组有代表一个坐标分别为两个正整数,问你能构成几个不是凹的四边形。思路:核心考点,如何判断点在不在三角形内,如果在三角形内,那么该点与其他三个顶点分别组成的三角形和,等于其他三个顶点组成三角形的和。还有就是如果求三角形面积,这里用的是向量积。再次让我明白数学的重要,平时高数课就得好好听课好好学。#i翻译 2017-05-20 19:53:05 · 462 阅读 · 0 评论 -
【基本算术定理 && 质因数分解】LightOJ - 1341 Aladdin and the Flying Carpet
Problem Description a面积,b为其中一条边最小长度,问你能组成不同矩形不包含正方形的个数。思路: 算术基本定理可表述为:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1^a1*P2^a2*P3^a3……Pn^an,这里P1小于P2小于P3……小于Pn均为质数,其中指数ai是正整数。 定理应用: (1) 一个大于1的翻译 2017-10-16 16:38:58 · 373 阅读 · 0 评论 -
【快速幂 && 公式推导】LightOJ - 1282 Leading and Trailing
Problem Description 输入两个数n, k问你n^k次方前三位数是多少,后三位数是多少。思路: 后三位快速幂%1000就好了。 核心是求前三位 n^k = 10^(a + b) 其中a为整数,b为小数。前三位就是 10^b * 100。所以我们得求出b, log(10)n^k = log(10)10^(a+b) -> k*log(10)^n = a + b, 因为b是翻译 2017-10-16 17:21:24 · 220 阅读 · 0 评论 -
【除法分块 && 找规律】LightOJ - 1245 Harmonic Number (II)
Problem Description long long H( int n ) { long long res = 0; for( int i = 1; i <= n; i++ ) res = res + n / i; return res; } 让你实现这个代码 题目n的范围(1<=n<2^31)思路: 显然暴力肯定翻译 2017-10-16 17:38:38 · 281 阅读 · 0 评论 -
【唯一分解定理 && 状态压缩 && 组合数学】LightOJ - 1236 Pairs Forming LCM
Problem Description long long pairsFormLCM( int n ) { long long res = 0; for( int i = 1; i <= n; i++ ) for( int j = i; j <= n; j++ ) if( lcm(i, j) == n ) res++;翻译 2017-10-16 19:37:10 · 325 阅读 · 0 评论 -
【质因数分解 && n = x^p求最大p】LightOJ - 1220 Mysterious Bacteria
Problem Description 输入n,n = x^p求最大的p思路: 算术基本定理可表述为:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1^a1*P2^a2*P3^a3……Pn^an,这里P1小于P2小于P3……小于Pn均为质数,其中指数ai是正整数。 n = x^p。最大的p就是gcd(p1, p2, p3, …, pn)。翻译 2017-10-16 19:48:05 · 306 阅读 · 0 评论 -
【找规律 && 快速幂 && 概率论】LightOJ - 1213 Fantasy of a Summation
Problem Description#include <stdio.h>int cases, caseno;int n, K, MOD;int A[1001];int main() { scanf("%d", &cases); while( cases-- ) { scanf("%d %d %d", &n, &K, &MOD); int i, i1翻译 2017-10-17 11:03:11 · 271 阅读 · 0 评论 -
【二分 && 唯一分解定理】LightOJ - 1138 Trailing Zeroes (III)
Problem Description N! 后面有Q个0,问你第一个后面有Q个0的N!。输出N,找不到输出impossible思路: N! = p1^a1 * p2^a2 * … * pn^an。那么后面0的个数就是min(2的指数,5的次数)。由于2比5多,所以我们只考虑5。 100! 有几个0,100/5 = 20, 20/5 = 4, 4/5 = 0 所以100! 后有 20翻译 2017-10-17 11:57:51 · 188 阅读 · 0 评论 -
【裸K-D树】BZOJ 2648
Problem Description 棋盘上原本有,n个黑棋。 有两种操作: 1 x y 插入一个黑色棋子 2 x y 输出距离这个白色棋子最近的黑色棋子距离(这里的距离是曼哈顿距离)思路: 参考ldq大佬博客 K-D树,其实就是一个k维的搜索树。这道题k = 2而已。#include<bits/stdc++.h>using namespace std;co翻译 2017-11-30 22:28:25 · 283 阅读 · 0 评论 -
【K-D树 求最近最远距离】BZOJ 1941 [Sdoi2010]Hide and Seek
Problem Description 给你n个点(二维),让你求所有点 到最远点 和最近点 的距离差最小思路: 自身点不算。 求个距离该点,最近距离。和 距离该点,最远距离即可。 这里的距离指的是 曼哈顿距离#include<bits/stdc++.h>using namespace std;const int MAX = 500010;const int inf =翻译 2017-12-01 09:10:11 · 297 阅读 · 0 评论 -
【K-D树 求矩阵的和】BZOJ-4066 简单题
Problem Description 输入一个N,代表有一个N*N的棋盘。 有三种操作 1 x y A : 将格子x, y里的数字加上A 2 xl yl xr yr : 输出xl yl xr yr这个矩阵内的数字和(xl <= xr, yl <= yr) 3 : 终止条件 接下来每行一个操作。每条命令除第一个数字之外, 均要异或上一次输出的答案last_an翻译 2017-12-01 11:16:02 · 233 阅读 · 0 评论 -
【数论 && 概率论 && 打表找规律】HihoCoder - 1432 JiLi Number
Problem Description 记 JiLi Number 指满足 前 K 个数([1, K] )中数字 1 的个数等于 K 的数 K 。 输出前N个中多少个JiLi Number, 同时输出最大的JiLi Number思路: 很不错的博客 参考博客 [0, 9] 中数字1的个数 1 [0, 99] 中数字1的个数 10*2 … [0, 99999翻译 2017-10-23 20:37:30 · 374 阅读 · 0 评论 -
【二分答案&&最短路】URAL - 2034 Caravans
Problem Description 给你n个点,m条边。接下来m行每行u, v代表u 可以到达v,边权为1。最后一行输入s,f,r。代表s到f的所有最短路中。让你求r到这些最短路中最小值的最大值。(r到这些最短路的距离是最小值。但是因为有很多条最短路,所以找出到这些条最短路的最大值)思路: 先求出s-f的最短路的值res。在求出r到各个点的最短路。这时候二分答案。从1-n查找答案。假设翻译 2017-08-14 21:42:40 · 276 阅读 · 0 评论 -
【最长公共子序列】51 nod 1006 最长公共子序列Lcs
Problem Description 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。Input 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000)Output翻译 2017-08-07 11:31:31 · 242 阅读 · 0 评论 -
【循环数组最大子段和】51nod 1050 循环数组最大子段和
Problem Description N个整数组成的循环序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a[n],a[1],a[2]这样的序列)。当所给的整数均为负数时和为0。 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。翻译 2017-08-09 11:15:11 · 222 阅读 · 0 评论 -
【编辑距离问题】 51 nod 1183 编辑距离
Problem Description 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 例如将kitten一字转成sitting: sitten (k->s) sittin (e->i) sitting (->翻译 2017-08-07 20:50:35 · 245 阅读 · 0 评论 -
【最长上升子序列】51 nod 最长单增子序列
输入 第1行:1个数N,N为序列的长度(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)输出 输出最长递增子序列的长度。 输入示例 8 5 1 6 8 2 4 5 10输出示例 5思路: 平时的方法,O(n * n)会超时,得用二分翻译 2017-08-07 21:00:21 · 456 阅读 · 0 评论 -
【多重背包】51nod 1086 背包问题 V2
Problem Description 有N种物品,每种物品的数量为C1,C2……Cn。从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。Input 第1行,2个整数,N和W中间用空格隔开。N为物品的种类,W为背包的容量。(1 <= N <= 100,1 <= W <= 500翻译 2017-08-09 11:06:18 · 212 阅读 · 0 评论 -
【子序列个数】51nod 1202 子序列个数
子序列的定义:对于一个序列a=a[1],a[2],……a[n]。则非空序列a’=a[p1],a[p2]……a[pm]为a的一个子序列,例如4,14,2,3和14,1,2,3都为4,13,14,1,2,3的子序列。对于给出序列a,有些子序列可能是相同的,这里只算做1个,请输出a的不同子序列的数量。由于答案比较大,输出Mod 10^9 + 7的结果即可。Input 第1行:一个数N,表示序列的长度翻译 2017-08-09 10:50:37 · 383 阅读 · 0 评论 -
【更难矩阵取数问题】51nod 1084 矩阵取数问题 V2
Problem Description 一个M*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,先从左上走到右下,再从右下走到左上。第1遍时只能向下和向右走,第2遍时只能向上和向左走。两次如果经过同一个格子,则该格子的奖励只计算一次,求能够获得的最大价值。 例如:3 * 3的方格。 1 3 3 2 1 3 2 2 1 能够获得的最大价值为:翻译 2017-08-09 11:00:02 · 223 阅读 · 0 评论 -
【线段树区间单点更新加约束条件】Range Minimum Queries CodeChef - ANDMIN
Problem Description 给你n个数的序列,有q个操作。操作分为两种0的时候查询L,R中的最小值。1的时候对于L,R区间的每个元素进行&X的操作。思路,对所有元素进行&X的操作。就可以寻找约束条件(如果该区间所有元素进行|操作,和X进行&操作没有变化的话,就不往下递归)也就是所有元素的二进制1的集合,被X的二进制1的集合包含,那就不需要更新。#include<bits/stdc+翻译 2017-07-25 09:21:31 · 248 阅读 · 0 评论 -
【最短路 && 把一些点看成一个团】CodeChef - CLIQUED Bear and Clique Distances
Problem Desription 输入的第一行包含一个整数T,代表测试数据的组数。接下来是T组数据。 每组数据的第一行包含五个整数N、K、X、M和S,分别代表城市数、古城数、古城间的道路长度、新建道路的条数,以及Limak居住在的城市编号。接下来M行,每行包含三个整数ai、bi和ci,代表有一条连接编号为ai和bi的城市的长度为ci的新建道路。保证不存在由一个城市连向自己的道路,所有道翻译 2017-07-26 08:48:52 · 344 阅读 · 0 评论 -
【枚举情况】UVALive - 6924 Load Balancing
Problem Description 给你T组数据,每组数据给你m个数,让你分配成四组,分别是0-a,a+1-b,b+1-c,c+1-160,(每组的人数 与 m / 4.0) 的差值的和最小。有多组情况,输出a,b,c最小的情况枚举所有情况#include<bits/stdc++.h>using namespace std;int a[200];//桶排的方式存数int main()翻译 2017-08-04 09:51:38 · 197 阅读 · 0 评论 -
【字符串处理】UVALive - 6917 Decoding Baby Boos
Problem Description 给你T组数据,每组数据先给你一个串,只包含大写字母或者下划线。给你m组操作,每组操作有u, v两个大写字母,就是将串里面的所有字母v变成字母u思路:把B变成A, 把A变成C,就相当于把 B变成C。那一个数组来存最后该字母变成那个字母#include<bits/stdc++.h>using namespace std;char s[1000055];翻译 2017-08-04 09:57:25 · 327 阅读 · 1 评论 -
【或 与 求和(二进制)】UVALive - 6918 And Or
Problem Description 给你T组测试数据,给你一个闭区间范围a-b,让你求该闭区间的所有数求或,求与。思路:10^18不会超过1<<60;从b to a 暴力查找各位二进制1 求 或, 查找0 求 与。b to a 一个数一个数的减,肯定会超时,如果比较1<<0为,就减1<<0,如果比较1<<50位,就减1<<50。如果该为是1,肯定会变成0,同理是0,肯定变成1。但是可能由于翻译 2017-08-04 10:06:35 · 229 阅读 · 0 评论 -
【数学物理问题】UVALive - 6921 Refraction
Problem Description 给你水槽,给你水槽的宽度W,水槽的高度H,需要被照射的点的横坐标x,光源点的坐标xe,ye.给你sin∠MPE/sin∠CPN的比值u,让你求水最低多低,光就可以照射到被照射点(具体题目去搜索原题);思路:列出两个方程,联立方程求h,判断h和H的大小关系。光线肯定过E点H点,这样才能使得h尽可能的小#include<bits/stdc++.h>usin翻译 2017-08-04 10:17:05 · 253 阅读 · 0 评论 -
【排列组合】UVALive - 6926 Maximum Score
Problem Decription 给你T组测试数据,给你n组数,每组数包含data, num,代表data这个数有num个。问你怎么排列这些数,求出最大的分数(如何求分数,一个数的左边递减个数包括相等 和 右边递减个数包括相等的和 加上 1(本身)就是该点的分数,但你要求出所有数的分数和)。求出最大分数一共有多少种组合思路:从小到大排序一定是最大的分数和。因为(只要这串数保持弧形)所以从小翻译 2017-08-04 10:26:39 · 258 阅读 · 0 评论 -
【最大子矩阵和】51nod 1051 最大子矩阵和
Problem Desciption 一个M*N的矩阵,找到此矩阵的一个子矩阵,并且这个子矩阵的元素的和是最大的,输出这个最大的值。 例如:3*3的矩阵: -1 3 -1 2 -1 3 -3 1 2 和最大的子矩阵是: 3 -1 -1 3 1 2Input 第1行:M和N,中间用空格隔开(2 <= M,N <= 500)。 第2 - N翻译 2017-08-09 11:23:59 · 295 阅读 · 0 评论 -
【后缀数组 不同的字串个数】SPOJ - SUBST1 New Distinct Substrings
Problem Description 给你一个串,问你这个串有多少个不同的字串思路: 后缀数组学习过程:wwl巨巨讲解了一波,然后参考博客。 特别重要的一个图片 后缀串,按字典序从小到大排序。求两两之间的公共字串长度,就是height[]数组。 核心需要去理解: 求height[]数组的过程,为何要按字典序从小到大去求height[]数组,height翻译 2017-12-12 16:49:26 · 254 阅读 · 0 评论