自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(231)
  • 收藏
  • 关注

原创 Educational Codeforces Round 38 (Rated for Div. 2) D_Buy a Ticket_加源点Dijkstra

题意  一国家由 n 个城市构成,城市之间有若干双向通路。一乐队在每个城市举办一场演出, 每次演出的票价不同。每个城市中的人,如果在自己城市看演出,只需要花票钱。否则还要加上往返路费。问对于每个城市来说,里面的人看到演出的最小票价是多少。思路  暴力做法 floyd 加 枚举。妥妥的超时(点和边上限 1e5)。   添加一个源点,到其他点的距离等于那些点的点权。则问题转化成了求其他点...

2018-03-09 11:30:37 302

原创 Codeforces Round #465 (Div. 2) D_Fafa and Ancient Alphabet_辗转相除求逆元&&DP

题意给出两个正整数串,每个串中有若干个空格,每个空格等概率地用 1 - m 中的数字填充。问第一个串大于第二个串的概率。思路简单dp。 mark 辗转相除法求逆元LL exgcd(LL a, LL b, LL &x, LL &y){ LL d = a; if(b != 0){ d = exgcd(b, a % b, y, x...

2018-03-03 20:33:56 288

原创 Codeforces Round #467 (Div. 2)D_Sleepy Game_思维

题意  小明和小刚玩游戏,一个有向图,点数不超过1e5,图上有一个小船,两人轮流将小船走一步,率先无法走的一方算输。如果走了1e6步未分胜负则为平局。小明先走。当小船走到 s 时,小刚睡着了,在他睡醒之前小明替他走。如果小明能赢,则输出路线。否则输出平局或输。思路  实际上是问从 s 出发,走偶数步,能不能走到一个节点,它的出度为 0。   拆点。将原图中的每个点拆成两个,表示走奇数...

2018-02-27 16:46:04 219

转载 POJ1084_Square Destroyer_IDA*

题意有一个用火柴棍摆成的 n * n (n <= 5)的格阵。其中的 k 根火柴被拿掉了。问至少再拿掉多少根火柴,可以使得剩下的阵中不存在正方形。思路IDA* http://blog.csdn.net/qq_25978793/article/details/49093589链接http://poj.org/problem?id=1084...

2018-02-12 10:20:43 253

原创 POJ1180_Batch Scheduling_斜率dp

题意有 n 项任务,每项任务有时间成本 ti 和 原料成本 fi。把任务分成若干批次,由一台机器完成。每个批次的总成本 = 批次完成时间 * 批次中任务原料成本之和。其中,第一批次的第一项任务从时间 0 开始执行。执行每个批次之前,需要时间 S 来启动机器。思路链接http://poj.org/problem?id=1180代码#include<i...

2018-02-11 08:47:45 243

原创 POJ3260_The Fewest Coins_deque优化dp解多重背包和完全背包

题意拿着 n 种硬币,每种硬币面值 vi,数量 ci,去商店购买价值 t 的物品。商店也同样有这些种类的硬币,但数目无限。问付钱和找零的过程中,至少 需要多少个硬币。思路付钱是多重背包,找零是完全背包。 有意思的地方是付款金额的上界问题,网上证明了 maxv * maxv + t。然而证明过程一知半解。其实猜一猜也就过了。链接http://poj.org/proble

2018-02-06 13:22:53 178

原创 POJ3074_Sudoku_部分固定的跳舞链

题意数独游戏。思路部分固定的跳舞链链接http://poj.org/problem?id=3074代码#include#include#include#includeusing namespace std;const int n = 9;const int maxn = n * n * n + 10;const int maxm = n *

2018-02-05 16:23:06 186

原创 POJ3709_K-Anonymous Sequence_双端队列优化dp

题意  给出一个长度为 n 的非严格单调递增数列,每一次操作可以使数列中的任何一项 -1。问至少需要多少次操作,使得任意一项都与其他至少 k - 1 项相等。思路  首先想到DP。    dp[i]:考虑前 i 项,满足要求的最小操作数。    dp[i] = min( dp[j] + sigma( dp[i] - dp[j] ) ) k 用这个式子,复杂度为 O(n^3),相当

2018-02-02 14:31:20 267

原创 POJ2559_Largest Rectangle in a Histogram_单调栈

题意  给出 n 个紧密排列的,宽度为 1 ,高度为 H[i] 的矩形,从这些矩形中画一个最大的矩形,问这个矩形的面积是多少?思路  假设,最大矩形的高度是 h, 它的左边界是第 l 个矩形,右边界是第 r 个矩形。则有结论,H[l - 1]   其中,求 l 实际上就是求最大的 i 使得 H[i]   在计算 l 或 r 的任意时刻,栈中的元素都是从栈底到栈顶递增的。因此,这种栈

2018-01-31 11:16:27 142

转载 POJ3728_The merchant_LCA + dp

题意n 个城市构成一棵树,所有城市中都流通一种商品,但价格不同。一个商人从一个城市到另一个城市。在路上,他可以在一个城市中买一件商品,然后在这座城市后面的一座城市中卖掉,并赚取差价。给出起点和终点,问商人能得到的最大利润是多少?思路LCA + dp 原题解作者的链接 http://www.hankcs.com/program/algorithm/poj-3728-the-mer

2018-01-30 15:36:37 209

原创 POJ1986_Distance Queries_LCA||树链剖分

题意给定一棵树,q 个询问。每个询问包含两个节点,要求输出两个节点的距离。思路解法一:二分法求LCA,然后 dis(u, v) = dis(root, u) + dis(root, v) - 2 * dis(root, lca(u, v)) 解法二:树链剖分链接http://poj.org/problem?id=1986代码LCA版本#includ

2018-01-30 12:39:42 172

原创 POJ - 2763_Housewife Wind_树链剖分

题意给出一个具有 n 个顶点的、带边权的树。给定初始位置 s,再给 q 个询问。询问有两种: 1。求从当前位置到某节点的路径长度。 2。将某条边的边权改为某值。 对于所有第一种询问,返回正确答案。思路边权转移到点权,然后树链剖分模板题。详见代码。链接https://vjudge.net/contest/177348#problem/R代码#include

2018-01-27 20:32:54 228

原创 CodeForces - 97B_Superset_分治

题意给出平面上 n 个点的坐标(最多 1e4 个),要往其上增加若干点,使得加点后,平面上任意两点至少满足下列三条件之一: 1。两点横坐标相同 2。两点纵坐标相同 3。以两点为对角的矩形中(含边线),至少含义一个其他点。 要求新加入点不超过 2e5。思路首先找到中间那个点,即 mid = (1 + n) / 2。过这个点作一条垂直于 x 轴的直线,不在这条直线上的其他点在这条直

2018-01-27 19:51:22 215

原创 CodeForces - 672D _Robin Hood_二分

题意城里有 n 户人家,每户人家有 mi 个金币。robin 每天从最富的人家偷一个金币送给最穷的一户人家。问 k 天后最富的一户人家比最穷的一户人家多多少金币。思路分别二分最富人家金币的最小值,和最穷人家金币的最大值,作差即可。 特别的,可以将金币数排序后,用前缀和减少运算。链接https://vjudge.net/contest/175446#problem/I

2018-01-21 12:03:39 250

原创 hdu5887_Herbs Gathering_较大规模(玄学)dp

题意n 种药草,每种药草有价值 vi,需要花费时间 ti。求时限 m 内能获得的最大价值。思路不能更裸的01背包,问题在于 m 可以大到 1e9。于是老师就教了一个神奇的dp。 简单地说就是把状态用 vector 存下来,一步转移之后,按价值从大到小排序,把价值小,时间反而多的状态删掉。据老师讲状态数是可证地不超过某个值(时间太久忘了)。链接https://vjudge.

2018-01-21 11:28:58 440

原创 HDU5037_Frog_贪心

题意池塘上有一根数轴,其中 0 点是岸边, m 点是对岸, 数轴上有一些石头。有一只青蛙从 0 点出发跳到 m 点,最大跳跃距离为 l。你可以在数轴上任意添加石头,使青蛙从 0 到 m 的过程中跳的次数最多。问,在青蛙总是采取最优策略的条件下,你最多能让它跳几次。思路首先想到 l + 1 的距离青蛙需要跳两次,尽量多地制造 l + 1 最符合我们的目标。 假设青蛙在石块 A[i]

2018-01-21 10:34:27 183

原创 UVA7147_World Cup_思维

题意n 支队两两比赛,共比赛 n * (n - 1) 场。赢一场得 a 分,输一场得 c 分,平一场得 b 分。得分最高的 m 支队晋级。问被淘汰的最高分最高可能是多少?晋级的最低分最低可能是多少?思路先看淘汰最高分,这支队排 m + 1 名。 它和前 m 支队比赛时,为了不超过他们,至多和他们持平。即前 m + 1 支队伍比赛时,尽量使得分数相等。有两种可能,一种是全平,一种是赢一

2018-01-20 21:31:36 173

原创 POJ2749_Building roads_2-sat

题意n 个牛舍分别和两个连接点中的一个相连,从而使任意两个牛舍相互可达。并且要求所有牛舍对距离的最大值尽可能小。特别的,有些牛相互讨厌,它们不能连在同一个点上;有些牛相互喜欢,它们必须连在同一个点上。思路显然是二分答案加2-sat检验,总结两点: 1。2-sat的建图实际上就是转化成蕴含式 2。建边时应该从“非”的角度考虑,即将冲突情况取非链接http://poj.org/

2018-01-19 05:36:05 218

原创 POJ2723_Get Luffy Out_二分&&2-sat

题意有 2 * n 把钥匙两两凑成一对,一对钥匙中,能且只能选择一把钥匙能用。有 m 扇门,每扇门上有两个锁,每个锁都能用 2 * n 把钥匙中的一把打开。且必须按照输入的顺序依次开门。问最多能开几扇门。思路二分+2sat链接http://poj.org/problem?id=2723代码#include#include#include#include

2018-01-18 20:54:23 215

原创 POJ3678_Katu Puzzle_2-sat

题意给出 n 个未知数, m 个布尔方程组成的方程组,判断输出是否有解。思路把式子转化成蕴含式,套用2-sat即可。 要注意的一点是: a 与 b = !a -> a 与 !b -> b链接http://poj.org/problem?id=3678代码#include#include#include#includeusing namespace std

2018-01-18 19:46:01 220

原创 POJ3683_Priest John's Busiest Day_2-sat

题意n 对新人举行婚礼,每个婚礼需要神父参与一个特殊仪式,可以在婚礼的开始进行,也可以在婚礼的末尾举行。神父只有一位,他不能同时参与两场婚礼。给定每场婚礼的开始时间、结束时间、仪式时长,问是否有一种安排,使得神父可以不冲突地参加所有婚礼的特殊仪式。思路对于每一场婚礼,只有两种选择:开始举行仪式,结尾举行仪式。这就可以用一个bool变量表示: x 取“真”表示在开始举行。由此可以把所

2018-01-18 13:39:45 201

原创 POJ2186_Popular Cows_强连通分量

题意给 n 头牛和 m 个有序对(A, B),表示牛 A 认为牛 B 是受欢迎的。该关系具有传递性。求被其他所有牛认为受欢迎的牛的数量。思路满足条件的牛必在同一个强连通分量中,并且只可能存在于拓扑序最靠后的那个连通分量中。所以有如下做法: 1。两遍 dfs 求连通分量,同时保存各节点对应的拓扑序号。 2。遍历 n 个点求出最后一个连通分量的节点数,并任找一个代表节点。 3。从

2018-01-17 14:14:33 152

原创 POJ2315_Football Game_Nim游戏变型

题意n 个足球摆在门前,与球门之间的距离为R[i], Alice 和 Bob 轮流踢,每次最多踢 m 脚。给定每个球的半径 r,踢出的距离只能是球周长的整数倍,且不超过 l。踢进最后一个球的人获胜,问获胜的人是谁。思路只能踢出周长的整数倍,显然可以确定每个球踢几脚进门。这个问题也就显然地转化成了:n堆石头,每轮取若干次,每次最多取不超过某上限的若干个,取走最后一个石子的人获胜。Nim游

2018-01-17 08:33:53 309

原创 UVA12171_Sculpture_坐标旋转45度映射&&离散化

题意某雕塑有 n 个边长平行于坐标轴的长方体组成。用每个长方体左上角的坐标,以及长方体的长宽高表示每个长方体。要求统计这个长方体的体积和表面积。其中,体积包含封闭在内部的空间,但表面积不包含在外面看不到的面。思路假想是从一个大的立方体中抠出这个雕塑,通过BFS计算多余体积,再从立方体中抠掉即可。同时,表面积也可以计算出来。 题目坐标系比较大,需要离散化。一开始有一点没想明白,怎么

2018-01-14 16:47:37 378

原创 codeforces 138D_World of Darkraft_SG函数

题意H*W的棋盘中每个点都是L、R、X三者之一,两人轮流选一个点,若为L则向左下和右上发射激光,R向右下和左上发射,X则相当于LR的组合——同时向四个方向发射。激光所至的点会被摧毁,只有已摧毁的点或棋盘边界才会挡住激光。若在某回合开始时所有点都被摧毁,则该人失败。问先手是否有必胜策略?思路1。将棋盘分成单双两部分,即两个子问题 为什么一定要分成两个子问题,过了好几天终于想

2018-01-11 21:03:49 473

原创 POJ3537_Crosses and Crosses_一维SG函数优化写法

题意一行 n 个空白格子,两人轮流往任意空白格子里画×。最先连出三个x的人获胜。问先手必胜还是后手必胜。思路SG函数。 用set可能会超时,n 不太大的情况下可以用 bool 数组标记。具体见代码链接http://poj.org/problem?id=3537代码#include#include#includeusing namespace std;i

2018-01-10 13:52:44 357

原创 POJ2311_Cutting Game_SG函数

题意一张分成 w * 好的各自的长方形纸张,两人轮流切割纸张。要沿着格子的边界切割,水平或者垂直地将纸张切成两部分。切割了 n 次之后就得到了 n + 1 张纸,每次都选择切的某一张纸在进行切割。首先切出只有一个格子的纸张的一方获胜。当双方都采取最优策略时,先手必胜还是后手必胜?思路SG函数设当前状态为 x, 定义集合 S(x) = {y | SG(t), t 是 x 可以一步

2018-01-10 10:01:31 179

原创 POJ2409_Let it Bead_Polya定理

题意一串项链上有 n 棵珠子,给每颗珠子图上 m 种颜色中的一种,问一共有多少种不同的涂法。特别的,如果一种涂法通过任意角度的旋转,或沿项链某条对称翻转后,能得到另一种涂法,则认为这两种是同一种。思路polya定理直观地理解 只考虑旋转,不考虑对称的情况首先计算,旋转 k 个位置后,和原来相同的染色方案的个数。 首先,按照顺时针顺序从 0 到 n - 1 给珠子编号。显然,i 珠子 与 (i +

2018-01-09 19:58:51 220

原创 POJ2407_Relatives_容斥原理

题意问小于n的自然数中有多少个与n互质的数。思路显然是一个欧拉函数的定义题。 然而容斥原理也能做。链接http://poj.org/problem?id=2407代码#include#includeusing namespace std;long long n;long long factor[1000], it;void get_fa

2018-01-08 17:40:59 188

原创 POJ1740_A New Stone Game_模仿策略

题意首先Alice先走,然后每次至少扔掉一个棋子,然后从该堆拿出任意的石子(>=0)进行任意的分配,任意的分配是指可以拿出一部分分给其他还剩有石子的堆(数目自己定), 谁拿最后一堆谁就赢思路模仿策略。假设现在的场面是:剩余偶数堆,并且每一堆都可以找到一一对应的关系,关系中两个堆石子数目相等。即所有数目的堆都有偶数个。在这种情况下,后手只要模仿先手操作对应的堆,就一定能获得胜利,即

2018-01-07 19:27:32 175

原创 POJ2068_Nim_DP博弈

题意两个队伍,每支队伍有n名队员交错入座,单次分别能最多取走Mi块石头,取走S块石头中的最后一块的队伍失败,求第一支队伍是否有必胜策略思路DP博弈。 dp[i][j][s] 第 i 队第 j 名队员取时剩下 s,此时是否必胜。 s = 0 时是必胜态。 第 i 队第 j 名队员从此状态出发, 能达到的状态中存在下一个取的队员(对方)的必败态,则此状态为必胜态。否则为必败态。链

2018-01-07 16:07:05 218

原创 POJ1704_Georgia and Bob_Nim游戏变型

题意排成直线的格子上放有n个棋子。棋子i在左数第pi个格子上。Georgia 和 Bob轮流选择一个棋子向左移动。每次可以移动一格及以上任意多格,但是不允许反超其他的棋子,也不允许将两个棋子放在同一格内。无法进行移动操作的一方失败。假设Georgia先进行移动,当双方都采取最优策略时,谁会获胜?思路Nim游戏 链接http://poj.org/problem?

2018-01-07 10:41:32 204

原创 POJ2348_Euclid's Game_必胜态推理

题意给定两个整数 a 和 b。Stan 和 Ollie 轮流从较大的数字中减去较小数字的正整数倍,并且相见后的结果不能小于0。Stan先,在自己的回合中将其中一个数变为0的一方获胜。当双方都采取最优策略时,谁会获胜?思路假设 b > a (否则可一交换一下)。 如果 b 已经是 a 的倍数,则必胜。 下面讨论 b 不是 a 的倍数的情况: 按照“自由度”的观点可以分为两种情况

2018-01-07 09:38:50 284

原创 POJ1150_The Last Non-zero Digit_阶乘性质

题意求组合数C(m, n)的最后一位非零数。思路求 n! 中含质因子 x 的个数 举例:求 10! 中质因子 3 的个数: 10! = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 不能被整除 3 的数不可能贡献出质因子 3,将其删去得到 9 * 6 * 3 从每个数中提取一个因子 3,实际共提取出 10 / 3 = 3 个,然后序列变成了

2018-01-06 23:07:47 230

原创 POJ2720_Last Digits_欧拉降幂公式&&打表

题意定义函数 f(x) = b^f(x-1) if x > 0, and f(0)=1。(a^b表示a的b次幂) 给定 b, i, n,求f(i) 的末n位思路首先末 n 位的意思就是 mod 10^n 嘛。所以这个函数就变成了一个同余意义下的递归幂运算了。当然是选择欧拉降幂公式啦。 但是应用欧拉降幂公式是由条件的:指数 e > phi(mod) 。直接套用公式的话,费了好大劲

2018-01-06 16:01:29 670

原创 POJ3532_Resistance_高斯消元&&基尔霍夫定律(高中物理)

题意N 个点被 M 根带有电阻的导线连接起来。问 1 和 N 之间的等效电阻是多少。思路基尔霍夫定律 大意就是:除了起点和终点之外,电路中任何一个点的流入电流和流出电流相等。如果记流出电流Ii为正,流入电流Ii为负,则在任意一点处有 sigma Ii = 0.基于这条定律,可以得到n个方程。 1:sigma Ii = 1(可取任意正数,1 方便一些) 2..N : sigma Ii = 0

2018-01-01 17:53:55 522

原创 POJ2345_Central heating_布尔运算版高斯消元

题意有n个人和n台机器。每个人控制这几台机器中的某几台。每个人执行操作时,会把他所控制的所有机器的状态翻转(开变成关,关变成开)。一开始所有机器都是关的,问至少需要哪些人操作,才能使所有机器全都打开。题目保证每个人不会被其他几个人的组合所取代。思路布尔运算版高斯消元。 可以在普通高斯消元中加个%2,或者写一个布尔运算版的高斯消元。 因为最后一句话,所以这个方程组中各方程是线性无关的,所以这个方程

2018-01-01 11:44:56 288

原创 poj3608_Bridge Across Islands_旋转卡壳&&点到线段的距离

题意给出两个凸包,现要用一条线段连接这两个凸包,求这条线段的最小长度。思路从第一个凸包y值最小的那个点,和第二个凸包y值最大的那个点出发,旋转卡壳。链接http://poj.org/problem?id=3608代码#include<cstdio>#include<algorithm>#include<cmath>using namespace std;const double eps = 1e

2017-12-30 18:22:10 162

原创 Codeforces Round #455 (Div. 2)C_Python Indentation_DP

题意python语言有两种语句,simple语句(s语句)和for语句(f语句)。其中for语句的循环体需要缩进一格,并且不能为空(for语句的循环体里至少有一个s语句或for语句)。给出n条语句,问总共有多少种合法的缩进方法。思路dp[i][j] 第i行缩进j格的种数。 如果第i行是f语句,它的下一行只能放在它的循环体里,缩进格数只能加一。dp[i+1][j+1] = dp[i][j] 如果

2017-12-29 22:25:10 228

原创 POJ1912_A highway and the seven dwarfs_判断凸包与直线是否相交

题意给出 n 个点和若干条直线,每一条直线用两个点的形式给出。对每一条直线,问所有点是不是在这条直线的同一侧。题目保证直线不会经过n个点。

2017-11-13 23:25:54 334

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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