03 2018 档案

摘要:八数码难题 题目描述 一.广搜: 首先要考虑用什么存每一个状态 显然每个状态都用一个矩阵存是很麻烦的。 我们可以考虑将一个3*3的矩阵用一个字符串或long long 存。 每次扩展时再转化为矩阵。 另外一个问题是判重,对于已经搜过的状态,就不再扩展了。 10^9次方的bool数组会爆空间 可以考虑 阅读全文
posted @ 2018-03-24 09:00 yjk 阅读(498) 评论(0) 推荐(0) 编辑
摘要:聪明的质监员 题目链接:https://www.luogu.org/problemnew/show/P1314 Y(W)随W的值增大而减小 二分W的值,找到最小的W使得Y(W)>S; 比较Y(W)和Y(W-1)与S的差值。 计算Y(W): O(n)预处理一维前缀和数组, O(m)暴力计算出Y(W) 阅读全文
posted @ 2018-03-08 18:43 yjk 阅读(147) 评论(0) 推荐(0) 编辑
摘要:电话线 题目链接:https://www.luogu.org/problemnew/show/P1948 二分答案+最短路 我们要求一条1~n的路径,使其中的第k+1大的数最小。 二分第k+1大的数的大小h,比h小的边可以看为0,因为它们不会让第k+1大的数更大;比h大的边边权设为1,最后求出的1~ 阅读全文
posted @ 2018-03-07 21:42 yjk 阅读(175) 评论(0) 推荐(0) 编辑
摘要:货车运输 题目链接 显然,从一点走到另一点的路径中,最小值最大的路径一定在它的最大生成树上 所以要先求出最大生成树,再在生成树上找最近公共祖先,同时求出最小值。 阅读全文
posted @ 2018-03-07 11:34 yjk 阅读(147) 评论(0) 推荐(0) 编辑
摘要:斐波那契数列 题目链接:https://www.luogu.org/problemnew/show/P1962 矩阵A 1,1 1,0 用A^k即可求出feb(k)。 矩阵快速幂 阅读全文
posted @ 2018-03-06 19:21 yjk 阅读(215) 评论(0) 推荐(0) 编辑
摘要:矩阵快速幂 题目描述 矩阵乘法: A[n*m]*B[m*k]=C[n*k]; C[i][j]=sum(A[i][1~n]+B[1~n][j]) 为了便于赋值和定义,我们定义一个结构体储存矩阵: X*Y: 快速幂: 把k转化为二进制, 如k=10(10)=1010(2); a^10=a^(2^3) * 阅读全文
posted @ 2018-03-06 16:30 yjk 阅读(193) 评论(0) 推荐(0) 编辑
摘要:删数问题 题目链接 首先找出最小的k个数:用堆每次取出最小的元素p,将p*2+1和p*4+5压入堆。 贪心求最大数:从前往后找第一个data[j+1]>data[j],删除data[j].(链表应该是比较快的,然而蒟蒻懒得写链表,用了一个数组瞎搞。。不开氧气优化会T一个点) 阅读全文
posted @ 2018-03-05 19:01 yjk 阅读(481) 评论(0) 推荐(0) 编辑
摘要:约瑟夫问题 链表模拟大概是正解 用数组乱搞: 阅读全文
posted @ 2018-03-05 18:44 yjk 阅读(241) 评论(0) 推荐(0) 编辑
摘要:单源最短路径 题目链接:https://www.luogu.org/problemnew/show/P4779 直到做了这个题才发现我之前写的堆优化dijkstra一直是错的。。 这个堆优化其实很容易理解,将枚举最小值改为从堆中取出最小值,改变dis时入堆即可 用单调队列维护时必须有两个值:点的编号 阅读全文
posted @ 2018-03-05 18:43 yjk 阅读(1467) 评论(0) 推荐(0) 编辑
摘要:单源最短路(dijkstra算法及堆优化) 弱化版题目链接 n^2 dijkstra模板 毒瘤标准版 题目链接:https://www.luogu.org/problemnew/show/P4779 直到做了这个题才发现我之前写的堆优化dijkstra一直是错的。。 这个堆优化其实很容易理解,将枚举 阅读全文
posted @ 2018-03-03 15:16 yjk 阅读(345) 评论(0) 推荐(0) 编辑
摘要:合并果子 题目链接 贪心:每次先合并最小的两堆果子 用堆实现 手写堆真恶心。。 STL是个好东西 阅读全文
posted @ 2018-03-02 20:51 yjk 阅读(177) 评论(0) 推荐(0) 编辑
摘要:关押罪犯 题目链接 思路: 二分图或并查集 这里讲并查集算法: 1.将每对罪犯的冲突关系按影响从大到小排序 2.将集合与(i+n)合并表示编号为i的罪犯不能在该集合内 3.依次从大到小处理冲突关系: 若x与y+n、y与x+n不在同一个集合内,将集合find(x)与集合find(y+n)合并,将集合f 阅读全文
posted @ 2018-03-02 20:41 yjk 阅读(138) 评论(0) 推荐(0) 编辑
摘要:并查集模板 题目链接1 题目链接2 题目链接3 代码: 1. 2. 3. 阅读全文
posted @ 2018-03-02 20:27 yjk 阅读(172) 评论(0) 推荐(0) 编辑
摘要:时间复杂度 题目链接 对于 100%的数据:L≤100 。 很明显的模拟题 然而考试时还是爆炸了。。 调了一下午。。 蒟蒻表示不会离线操作。。 直接贴代码: 阅读全文
posted @ 2018-03-02 20:07 yjk 阅读(170) 评论(0) 推荐(0) 编辑
摘要:借教室 【题目描述】 在n天中每天有一个可以借出的教室数,有m个订单,每个订单从第l天到第r天要借用x个教室。问能否满足所有的订单,若不能,输出第一个不能满足的订单编号。 思路: 1.1 ≤ n,m ≤ 10^6,区间的整体修改可以用差分数组实现,每次修改的时间复杂度为O(1),查询的时间复杂度为O 阅读全文
posted @ 2018-03-02 12:36 yjk 阅读(165) 评论(0) 推荐(0) 编辑
摘要:蚂蚁 【题目描述】 在一根无限长的木棍上,用n只蚂蚁,每只蚂蚁有一个初始位置和初始朝向,蚂蚁们以每秒一个单位的速度向前移动,当两只蚂蚁相遇时,它们会掉头(掉头时间忽略不计)。现给出每只蚂蚁的初始位置和初始朝向,请你计算出它们在t秒后的位置和朝向。 思路: 1.对于每只蚂蚁,它的坐标在所有蚂蚁中的次序 阅读全文
posted @ 2018-03-01 21:56 yjk 阅读(274) 评论(0) 推荐(1) 编辑
摘要:滑动窗口 【题目描述】 有N个数字,以及一个大小为k的窗口。现在这个窗口从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。 思路: k<=N<=1000000,暴力是拿不到全分的,要想解决这个问题,理想的时间复杂度应是O(n),我们可以用一个单调队列维护。 单调队列原理: 阅读全文
posted @ 2018-03-01 21:30 yjk 阅读(157) 评论(0) 推荐(0) 编辑
摘要:理想的正方形 【题目描述】 一个a*b的矩阵,从中取一个n*n的子矩阵,使所选矩阵中的最大数与最小数的差最小。 思路: 二维的滑动窗口 对于每行:用一个单调队列维护,算出每个长度为n的区间的最大值和最小值,分别存在两个数组fmin和fmax中,fmax[i][j]表示第i行区间[j,j+n-1]的最 阅读全文
posted @ 2018-03-01 21:11 yjk 阅读(120) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示