
ACM-ICPC
山上一缕烟
这个作者很懒,什么都没留下…
展开
-
【梳理】【失效链接已于2020-09-27替换】(离散数学 第2版 屈婉玲、耿素云、张立昂 高等教育出版社)第19章 初等数论 结论归纳与证明(度盘)
第19章 初等数论 知识归纳与梳理(含证明)https://pan.baidu.com/s/1dYVCJOMmxS-T7MitwVHqcQ仅结论:https://pan.baidu.com/s/1wIQ-y8TX7qNlsYKlhgd0SA原创 2019-11-04 20:26:41 · 2649 阅读 · 0 评论 -
ACM-ICPC 读写挂(血妈快读与血妈快写)
一、血妈快读readi和readu分别读取有符号和无符号整数。需要头文件 cctype 。template<class _Ty> inline void readi(_Ty& x) { static _Ty c, s; x = 0, s = 1; c = getchar(); if (c == '-')s = -1; else x = x * 10 + c - '...原创 2020-05-02 15:49:43 · 415 阅读 · 0 评论 -
【代码超详解】ZOJ 2551 / POJ 2653 Pick-up Sticks(快速排斥实验 + 跨立实验判断线段是否相交 · 模板)
一、传送门http://poj.org/problem?id=2653https://zoj.pintia.cn/problem-sets/91827364500/problems/91827366050二、算法分析说明与代码编写指导overlapped 函数:返回两个区间是否重叠。若不交,返回-1;只重叠与一点(左端区间的右端点与右端区间的左端点重合),返回0;有重叠,返回1。cro...原创 2020-04-17 19:26:40 · 406 阅读 · 0 评论 -
【代码超详解】POJ 1556 The Doors(建图 + 最短路)
一、传送门http://poj.org/problem?id=1556二、算法分析说明与代码编写指导建图的方法是:如果两个点所在墙的编号相差 1 (起点和终点的编号记为 0 和 4n +1),那么把这两点连起来(无向边);如果两个点在同一个墙上,这两点不连边;如果两个点中间隔了其它的墙,需要先判断是否能直接到达而不是被中间的墙挡住。判断的方法是:把这两点连一条直线(得到斜截式 y = ...原创 2020-04-16 23:36:43 · 279 阅读 · 0 评论 -
【代码超详解】CodeForces 1335E1. Three Blocks Palindrome (easy version)
一、传送门https://codeforces.com/contest/1335/problem/E1二、算法分析说明与代码编写指导设 r 为结果,s[i] 代表数 i 的已出现次数的前缀和,变长数组 p[i] 代表数字 i 出现的所有位置。输入的时候要将各个数字出现的位置都记下来,并统计到字符串的每个位置的累计出现次数。构造要求的回文串有两种情况:第一种是 y > 0,x = ...原创 2020-04-15 23:28:13 · 458 阅读 · 0 评论 -
Codeforces 1335D. Anti-Sudoku(思维)
一、传送门https://codeforces.com/contest/1335/problem/D二、算法分析说明把所有的 1 (或其他数字)换成另外的数字,就满足每行、每列、每块变更的数字的位置都不同。三、AC 代码#include<iostream>#pragma warning(disable: 4996)typedef unsigned char uchar; ...原创 2020-04-14 20:29:59 · 348 阅读 · 0 评论 -
【代码超详解】Codeforces 1335C. Two Teams Composing(思维)
一、传送门https://codeforces.com/contest/1335/problem/C二、算法分析说明与代码编写指导特判:n = 1 的时候,一个人不能分出两个组,答案为 0n = 2 的时候,无论两个人的技能相同或不同,答案都为 1。用集合 s 去重,s.size() 表示技能种数 k。b[i] 表示拥有技能 i 的人数。数组 b 的最大值设为 m。分两种情况:①...原创 2020-04-14 20:10:44 · 533 阅读 · 0 评论 -
Codeforces 1335B. Construct the String(思维 · 构造)
一、传送门https://codeforces.com/contest/1335/problem/B二、算法分析说明一种符合要求的字符串具有如下的格式:以 a 为长度的循环节,前 a - b + 1 个字符是 ‘a’,后 b - 1 个字符是 ‘b’、‘c’、‘d’、……。三、AC 代码#include<string>#include<iostream>#p...原创 2020-04-14 17:48:03 · 415 阅读 · 0 评论 -
POJ 1269 Intersecting Lines(简单计算几何 · 直线与直线的位置关系)
一、传送门http://poj.org/problem?id=1269二、算法分析说明三、代码#include<cstdio>#include<cmath>#pragma warning(disable:4996)template<class _Ty> struct point { _Ty x, y; };unsigned n; point&l...原创 2020-04-13 17:48:41 · 194 阅读 · 1 评论 -
【代码超详解】POJ 3304 Segments(简单计算几何 · 思维 + 跨立实验 + 矢量积)
一、传送门http://poj.org/problem?id=3304二、算法分析说明与代码编写指导题目大意:给一组线段(可能完全重合),问是否存在一条直线,当全部的线段向该直线作正投影时,全部的投影都有重叠部分(至少重叠一个点)。如果所有线段对某直线的正投影都有公共部分,那么过该直线的垂线肯定与所有线段都相交。那么,将这条直线绕与其中任意一条线段的交点旋转(顺时针或逆时针均可),直到直...原创 2020-04-12 23:46:38 · 313 阅读 · 0 评论 -
【代码超详解】POJ 1265 Area(简单计算几何 · Pick 定理)
一、传送门http://poj.org/problem?id=1265二、算法分析说明与代码编写指导一开始机器人在原点(题目好像没明说),然后每次给出移动的相对坐标,最后围成一个简单多边形,问这个多边形的面积是多少。确保移动总是逆时针的,而且多边形为简单多边形。已知:(上图截取自oi-wiki)三、AC 代码#include<cstdio>#include<cm...原创 2020-04-12 19:04:06 · 222 阅读 · 0 评论 -
洛谷 P3389 【模板】高斯消元法 × 洛谷 P2455 [SDOI2006]线性方程组
一、传送门https://www.luogu.com.cn/problem/P3389https://www.luogu.com.cn/problem/P2455二、代码日……两道题合起来搞了我十几个小时,最后把我气得从别人的 AC 代码开始再一句一句改成适配自己模板的同义的语句。有些细节还是不太懂,暂时先把模板放上来。以后有时间再出详解。———————————————————————...原创 2020-04-12 16:26:36 · 212 阅读 · 0 评论 -
UOJ #332. 【NOIP2017】奶酪(暴力)
一、传送门https://uoj.ac/problem/332为了锻炼大家阅读代码的能力,本题将不撰写算法分析说明与代码编写指导。二、代码#include<cstdio>#include<cmath>#include<algorithm>#include<bitset>#pragma warning(disable:4996)usi...原创 2020-04-10 22:39:19 · 226 阅读 · 0 评论 -
【代码超详解】HDU 1704 Rank(Floyd-Warshall 算法求传递闭包 · 模板)
一、传送门http://acm.hdu.edu.cn/showproblem.php?pid=1704二、算法分析说明与代码编写指导对本题而言,将全部输入存储为关系矩阵。于是,如果 A 和 B 之间未直接比赛,但如果能根据一系列已有的比赛结果,确定 A → C1 → C2 → …… → Ck → B,k∈Z,那么 A 和 B 的输赢关系也可以确定。补完传递闭包后,关系矩阵中剩下的为 0 的...原创 2020-04-09 23:09:39 · 277 阅读 · 0 评论 -
【代码超详解】洛谷 P2764 最小路径覆盖问题(拆点法构造二分图 + 二分图匹配)
一、传送门https://www.luogu.com.cn/problem/P2764二、算法分析说明与代码编写指导(点、边)支配集、覆盖集、独立集,以及匹配最小路径覆盖(原文)匈牙利算法将任意顶点 v 拆成 v 和 v’,存储的时候将 v’ 编号为 v + n 存储。print 函数用于输出最小路径覆盖中的每一条路径。最小路径覆盖指的是关联图中全部点的路径的条数最小。三、AC ...原创 2020-04-09 00:02:28 · 350 阅读 · 0 评论 -
【代码超详解】HDU 1054 Strategic Game(二分图匹配)
一、传送门http://acm.hdu.edu.cn/showproblem.php?pid=1054二、算法分析说明与代码编写指导匈牙利算法本题给出的是一个树。在一个节点放一个士兵看守,士兵可以看到该节点的全部关联边。首先,树是二分图。因为二分图的充分必要条件是不存在奇数长度的回路。而树没有回路,所以树是二分图。一个节点只用放一个士兵去看守与该节点相邻的全部边,可以转化成二分图匹配。...原创 2020-04-08 14:21:03 · 251 阅读 · 0 评论 -
【离散数学 · 图论】支配集、独立集、覆盖集、匹配
(源文档高清截图位于最后)回顾:对两个顶点u和v,若有边(u, v)直连,则称u和v相邻。若两条边有公共顶点,称两条边相邻。边与相连的顶点关联。自环:一条从一个顶点到它本身的边。极大(小)值=局部最大(小)值≠全局最大(小)值。1、对无向图G(V, E),若,且对任意的v∈(V \ V’),总存在边(u, v)∈E且u∈V’,则称V’是G的一个点支配集。换言之:点支配集以外的任意一个点...原创 2020-04-07 19:53:58 · 3104 阅读 · 0 评论 -
【代码超详解】HDU 1045 Fire Net(建图 + 二分图匹配)
一、题目描述样例输入:Sample Input4.X......XX......2XX.X3.X.X.X.X.3....XX.XX4................0样例输出:51524二、算法分析说明与代码编写指导本题的难点在于如何建立正确的图论模型。一行、一列同时只能有一个炮,除非被墙挡住。炮弹向上下左右发射后,直到被...原创 2020-04-05 17:12:50 · 265 阅读 · 0 评论 -
【代码超详解】HDU 1281 棋盘游戏(二分图匹配)
一、题目描述http://acm.hdu.edu.cn/showproblem.php?pid=1281二、算法分析说明与代码编写指导已知:处于同一行或同一列的车可以相互攻击。若要使放在棋盘上的车不能相互攻击,应该让每一行、每一列都只有一个车。本题的难点在于建立图论模型。设二分图 G(V1, V2, E)。每一行、每一列的点分别映射到 V1、V2,如果位置 (x, y) 允许放车,则将对...原创 2020-04-02 16:32:45 · 276 阅读 · 0 评论 -
【代码超详解】HDU 1083 Courses(二分图匹配)
一、题目描述二、算法分析说明与代码编写指导匈牙利算法MD 原来在课程数 P 和 N 之后有 P 行,每行的第一个数分别是 Count 1 到 Count P 我说怎么回事看半天没看出来,原来是写成这个鬼样子……其实就是 P、N 之后一共 P 行,第 i 行开头是一个数 mi,接下来有 mi 个数,代表 m 个去了课程 i 的学生。三、AC 代码#include<cstdio>...原创 2020-04-01 23:01:36 · 265 阅读 · 0 评论 -
【代码超详解】HDU 2444 The Accomodation of Students(二分图的判定 + 匈牙利算法求二分图的最大匹配)
一、题目描述二、算法分析说明与代码编写指导匈牙利算法及二分图的判定三、AC 代码#include<cstdio>#include<vector>#include<bitset>#include<algorithm>#pragma warning(disable:4996)using namespace std;const uns...原创 2020-04-01 20:14:22 · 241 阅读 · 0 评论 -
【代码超详解】洛谷 P3386 【模板】二分图最大匹配(匈牙利算法)
一、题目描述二、算法分析说明与代码编写指导三、AC 代码#include<cstdio>#include<vector>#include<bitset>#pragma warning(disable:4996)using namespace std;const unsigned nmax = 1001;unsigned n, m, e, u...原创 2020-03-31 23:46:11 · 300 阅读 · 0 评论 -
【代码超详解】HDU 4763 Theme Section(KMP 的 next 数组的应用)
一、题目描述二、算法分析说明与代码编写指导KMP题目要求:给出一个字串,寻找一个尽量长的子串,子串既是前缀也是后缀,而且在中间亦出现过(首尾分别不能与母串的首尾重合)。用 KMP 算法的构造 next 数组的代码打一个 next 数组。(注意:本代码中,字符串的第一个字符的下标为 1)设输入的字符串长为 m,则新建一个 bitset vis,然后用如下代码遍历 next 数组:fo...原创 2020-03-30 23:08:24 · 197 阅读 · 0 评论 -
【代码超详解】HDU 4847 Wow!Such Doge!(KMP · 模板)
一、题目描述传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4847二、算法分析说明与代码编写指导KMP三、AC 代码HDU 有时候会卡格式,输出最后要空行,不能只输出一个数字就完事,否则会 Presentation Error。#include<iostream>#include<cstring>#include...原创 2020-03-30 21:06:34 · 283 阅读 · 0 评论 -
【代码超详解】HDU 3068 最长回文(Manacher 算法 · 模板)
一、题目描述二、算法分析说明与代码编写指导Manacher 算法三、AC 代码#include<cstdio>#include<cstring>#include<algorithm>#pragma warning(disable:4996)using namespace std;template<class _Ty> inline...原创 2020-03-30 20:11:05 · 183 阅读 · 0 评论 -
【代码超详解】HDU 4513 吉哥系列故事——完美队形II(Manacher 算法)
一、题目描述二、算法分析说明与代码编写指导把 Manacher 算法 改一下,向两端查找更长的回文子串时,必须满足两头的不大于中间的才可以被选入更长的回文子串中。三、AC 代码#include<cstdio>#include<cstring>#include<algorithm>#pragma warning(disable:4996)usin...原创 2020-03-30 18:02:14 · 199 阅读 · 0 评论 -
【代码超详解】HDU 3613 Best Rewards(Manacher 算法)
一、题目描述测试数据:input31 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1qabccbadddefghhgfeddd1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1aba1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...原创 2020-03-30 17:32:28 · 292 阅读 · 0 评论 -
【代码超详解】HDU 2609 How Many?(最小表示法)
一、题目描述二、算法分析说明与代码编写指导对输入的每个字符串,将它们的最小表示添加到 unordered_set 中,最后就可以直接统计出有多少同构的字符串。字符串的长度似乎会达到 101,超出题目给的 100。三、AC 代码#include<cstdio>#include<algorithm>#include<cstring>#include...原创 2020-03-30 11:11:24 · 191 阅读 · 0 评论 -
【代码超详解】HDU 3374 String Problem(最小 / 最大表示法 + KMP 求最小循环节长度,109 ms)
一、题目描述二、算法分析说明与代码编写指导最小表示法KMP三、AC 代码法一(468 ms):#include<cstdio>#include<algorithm>#include<cstring>#pragma warning(disable:4996)using namespace std;template<class _Ty...原创 2020-03-29 21:15:52 · 191 阅读 · 0 评论 -
【小测试】当需要构造并输出一个很长的字符串的时候,考虑先存到内存然后用 puts 输出而不是反复调用 putchar
题目背景:Codeforces 1328B. K-th Beautiful String(题解)本题按要求输出第 k 小字典序的字符串,字符串含有 n - 2 个 a 和 2 个 b,长为 n。调用 n 次 putchar 的输出耗时远远长于先存到内存再直接 puts 输出。附上测试代码与本机测试结果。#include<cstdio>#include<chrono>...原创 2020-03-29 18:01:49 · 284 阅读 · 0 评论 -
【代码超详解】Codeforces 1328F. Make k Equal(暴力)
传送门一、题目描述二、算法分析说明与代码编写指导要求凑出至少 k 个数相同,题目只允许两种方式:1、每次选一个最小值,将其 +1;2、每次选一个最大值,将其 -1。每个最值都改变完后,才可以选下一个改变。所以,我们不妨模拟这个过程。首先如果已经有某个数出现了至少 k 次,那么直接输出 0。如果没有,则将数组从小到大排序,然后以将每一个数 a1,a2,……,an 都调整为至少出现 k...原创 2020-03-29 14:40:56 · 899 阅读 · 1 评论 -
【代码超详解】Codeforces 1328D. Carousel(思维)
一、题目描述D. Carouseltime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputThe round carousel consists of nfigures of animals. Figures are number...原创 2020-03-28 23:47:26 · 347 阅读 · 0 评论 -
Codeforces 1328C. Ternary Xor(贪心)
传送门一、题目描述二、AC 代码为了锻炼大家阅读代码的能力,本题解将不撰写算法分析说明与代码编写指导。#include<cstdio>#pragma warning(disable: 4996)typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned int uint;typ...原创 2020-03-28 20:29:45 · 257 阅读 · 0 评论 -
【代码超详解】Codeforces 1328B. K-th Beautiful String(思维,有坑,31 ms)
一、题目描述ExampleInput75 15 25 85 103 13 220 100Outputaaabbaababbaababbaaaabbbabaaaaabaaaaabaaaaaaaa二、算法分析说明与代码编写指导一个长度 n 的字符串,每个串 n - 2 个 a,2 个 b。按字典序从小到大排列,共有 n(n - 1) / 2 个不同的字符串...原创 2020-03-28 19:56:24 · 573 阅读 · 0 评论 -
【代码超详解】洛谷 P1368 工艺 /【模板】最小表示法
一、题目描述二、算法分析说明与代码编写指导三、AC 代码#include<cstdio>#include<algorithm>#pragma warning(disable:4996)using namespace std;unsigned n, f[300000];template<class _Ty> inline size_t mine...原创 2020-03-26 09:01:01 · 207 阅读 · 0 评论 -
【代码超详解】HDU 2328 Corporate Identity(KMP)
一、题目描述二、算法分析说明与代码编写指导KMP从短到长枚举任意一个字符串(这里取第一个)的全部子串,用这个子串去匹配其它字符串。全部匹配成功且字典序更小就记录该子串作为答案。优化:由于 next 数组是基于模式串 p 生成的。而每一个枚举的子串 p 会用于匹配其它 (n - 1) 个字符串。这时候只需要生成 next 数组 1 次。三、AC 代码#include<cstdio...原创 2020-03-25 20:25:41 · 257 阅读 · 0 评论 -
【代码超详解】HDU 1238 Substrings(暴力枚举 + KMP)
一、题目描述二、算法分析说明与代码编写指导KMP 算法最多 10 个样例,每个样例最多 100 个字串,每个字串最大长度为 100,数据规模足够暴力匹配。从短到长枚举任意一个字符串(这里取第一个)的全部子串,用这个子串去匹配其它字符串。匹配成功就把该子串的长度记为答案。注意在原子串匹配失败时,还要尝试用这个子串的反串去匹配。头文件 algorithm 里面有比较方便的 std::cop...原创 2020-03-25 18:03:17 · 352 阅读 · 0 评论 -
【代码超详解】HDU 3336 Count the String(KMP 的 next 数组的应用)
一、题目描述二、算法分析说明与代码编写指导KMP 算法注意:本代码中所有字符串的下标都是从 1 开始的。next 数组的意义:next[j]的值 = 模式串在位置j以前的 (j – 1) 个字符的前后缀相等的长度 + 1。(当字符串的下标从 0 开始时,next[j]的值 = 模式串在位置j以前的 j 个字符的前后缀相等的长度)令 i = n + 1,n,n - 1,……。i 要从...原创 2020-03-24 20:22:31 · 284 阅读 · 0 评论 -
【代码超详解】POJ 3974 Palindrome(Manacher 算法 · 模板)
一、题目描述二、算法分析说明与代码编写指导Manacher 算法注意:fgets 的第二个参数给出的长度需要至少比字符串的最长长度大 2,因为 fgets 会保存换行符 ‘\n’,并在读取到 ‘\n’ 后写 0 结束字符串。如果只比字符串的最长长度大 1,那么当字符串的长度达到最大时,紧跟其后的 ‘\n’ 将不会被读取。下一次 fgets 时会因为读取到了 ‘\n’ 而直接结束读取,导致 ...原创 2020-03-23 22:37:07 · 214 阅读 · 0 评论 -
【代码超详解】POJ 3080 Blue Jeans(暴力枚举 + KMP 匹配,0 ms)
一、题目描述二、算法分析说明与代码编写指导KMP 模板由于字符串长度只有 60,要找出在所有字符串中都出现的最长子串,只需要取任意一个(这里取最先输入的一个)字符串,从短到长枚举其全部子串,然后进行 KMP 算法,只要有匹配,且字典序比已知的该长度的符合要求的字串小,就将输出结果替换为新找到的串。实现时需要注意,在本代码中,最后输出的是字符串 R。每个长度的字典序最小的符合要求的子串暂时...原创 2020-03-23 15:47:46 · 307 阅读 · 0 评论