自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

MisDeer's blog

您们怎么都这么强啊……

  • 博客(43)
  • 收藏
  • 关注

原创 [POJ 2886] Who Gets the Most Candies? (Joseph环问题 + 树状数组)

POJ - 2886 有 N个人顺时针围成一圈,刚开始第 K个人退出圈,他手上有个数字 A_k 如果 A_k为正,则他左数 A_k个人退出,如果 A_k为负,则他右数 A_k个人退出 同样,接下来退出的那个人手上也有个数字,一直进行下去直到圈内所有人都离开 第 p个人退出的时候,他能得到 F(p)个糖果,F(p) 为 p约数的个数 问得到最多糖果的最早退出的人是谁,他得到

2016-04-30 22:11:20 314

原创 [CodeForces 27E] Number With The Given Amount Of Divisors (数论 + 反素数)

CodeForces - 27E 求约数个数为N的最小的数这样的数一定是反素数,但不知道反素数也不要紧 用DFS从小到大枚举质数表中的每一个质数 然后乘起来,计算能组成的约数的个数 加两个剪枝,一是约数个数大于N的 二是继续增加这个质数的个数,但无法更新答案的#include <cstdio>#include <iostream>#include <cstdlib>#includ

2016-04-30 16:07:32 246

原创 [UVa 11426] GCD - Extreme (II) (数论 + 脑洞 + 技巧)

UVa - 11426 给定一个 N,数对 i,j <= N且 i < j 求所有数对的 gcd(i,j)的和 其中 N <= 4e6这是大白 p125的例题 首先按题目描述两个for肯定是不行的 所以我们反过来考虑,一个数是多少对数的gcdgcd 换句话来说,就是一个数被加了几次 于是我们枚举这个gcdgcd为ii 设有数对 a,b(a<b)a,b(a < b)使得 g

2016-04-30 14:47:30 284

原创 [ZOJ 3682] E - Cup 3 (背包DP计数 + 滚动数组)

ZOJ - 3682 有S1S_1个球迷支持巴萨,S2S_2个球迷支持皇马 球场有NN个方阵,每个可以坐 kik_i个球迷 安排球迷使得一个方阵要么全是支持巴萨的 要么全是支持皇马的,要么两种相等 问有几种安排方案其实一看NN最多只有200,但是S1和S1和S2$很大,我第一反应是离散化 然后就开了一个 map,结果依旧是爆空间了 (这题空间只有 65M) 所以只好

2016-04-29 23:01:39 304

原创 [HDU 4587] TWO NODES (Tarjan+割点)

HDU - 4587 给一张 N个点的无向图,要求删掉两个点以及与其相连的边 使得剩下的图中的连通分量的数量最多 其中 3≤N≤50003 \le N \le 5000思路很直接,直接暴力枚举删掉的第一个点,打上标记 然后在剩下的图中找割点,统计删掉割点后增加的连通分量的数量 最后更新答案就好统计的删掉割点的后连通块数量的方式,就是把 cutv[u]=1改为 cutv[u]++

2016-04-28 20:23:15 430

原创 [POJ 2155] Matrix (高维树状数组)

POJ - 2155 给定一个矩阵,开始时其元素全为 0,有两个操作 C x1 y1 x2 y2 将左上角为 (x1,y1),右下角为 (x2,y2)的子矩阵里的元素取反 Q x y 询问(x,y)元素的值裸的二维树状数组,知道了套路以后还是很好做的 add2(x1,y1,1);add2(x1,y2+1,-1); add2(x2+1,y1,-1);add2(x2+1,y2+1,1) 根据

2016-04-27 21:31:12 429

原创 [UVa 11889] Benefit (基础数论+GCD+LCM)

UVa - 11889 已知 A,C,求最小的 B使得 LCM(A, B) = C 首先如果 A不能整除 C,则无解由 lcm(A,B)=C=A∗Bgcd(A,B)lcm(A,B)=C = \frac {A*B} {gcd(A, B)} 得 CA=Bgcd(A,B)\frac C A = \frac B {gcd(A,B)} 设 gcd(A,B)=Dgcd(A,B)=D,A=A′∗D

2016-04-26 19:04:26 437

原创 [CodeForces 595C] Warrior and Archer (无胜负最优值博弈)

CodeForces - 595C 题意是一根数轴上分布着偶数个点,A和 B每次轮流从上面拿走一个点 A希望最后剩下来的两个点距离尽量近,B则希望尽量远 若两个人都采用最佳策略,则最后剩下的两个点的距离是多少这很显然是一个博弈,属于无胜负求最优值的游戏 既然是博弈,我们就要寻找这个游戏的最佳策略是什么 对坐标排序后,假设最后剩下的两个点下标为 l, r 首先, A希望最后两个点尽量近,那

2016-04-26 17:59:57 574

原创 [CodeForces 276D] Little Girl and Maximum XOR (构造+脑洞)

CodeForces - 276D 给定一个 a和 b,要求在 a,b之间找一对数使得他们的异或和最大构造贪心题,方法是从高位开始考虑,尽量使此位为 1 那么必然有一个数此位为 0,另一个此位为 1 不难发现,如果二进制表示的 b位数比 a多 比如 a=01101,b=10110,那么一定可以构造出 11111 只要 l=01111,r=10000即可,并且这就是最大值 如果 a与

2016-04-24 16:37:33 392

原创 [CodeForces 567D] One-Dimensional Battle Ships (区间隔断计数)

CodeForces - 567D 给定一个序列,上面有 K艘长度为 A的船互相不相邻地摆放在一起 Bob 每次都射击一个位置,Alice每次都告诉他没中 问到第几次射击的时候,可以判断出 Alice在说谎Alice在说谎,说明射击点将区间分割成的若干个区间放不下 K艘船 一开始想着用单调队列维护了一个 DP,然后搞了些奇怪的做法,然后就 WA了事实上这题很简单,用一个 set维

2016-04-24 16:29:53 379

原创 [CodeForces 279C] Ladder (DP)

CodeForces - 279C 给定一个序列,问序列中一段区间是否是山峰形状的 山峰形状即为中间有个最大值,然后向两边非严格递减第一反应是想着处理出中间峰向两边延伸的最远距离 然后用三分搜索找峰 但是三分搜索在整数区间上存在诸多坑点 而且在区间非单峰的时候存在一些不确定因素 所以没写好,挂了很多发后来看了题解,发现其实只要处理出两边山脚能向内延伸的最远距离 然后加起来看是否

2016-04-24 16:18:46 504

原创 [CodeForces 273C] Primes on Interval (二分合法解)

CodeForces - 237C 给定正整数上的一段区间[a,b][a,b],问是否存在长度 l(1≤l≤b−a+1)l (1\le l \le b-a+1) 使得任何 xi∈[a,b−l+1]x_i \in [a,b-l+1],以 xix_i开头, 长度为ll的区间 [xi,xi+l−1][x_i, x_i+l-1]内都至少有kk个质数 输出最小的ll,若不存在,输出−1-

2016-04-24 16:08:58 238

原创 [UVa 10943] How do you add? (计数+隔板法+重叠隔板)

CodeForces - 446A一个长度为 N的序列,现在可以修改最多一个值 使得序列中最长严格递增的序列的长度最长好题! 这题看起来很简单,但是坑点很多,毕竟 CF的题啊…… 首先,有一个很直接的思路是修改两个递增序列中间的断点,把它们拼接起来 但是这样太简单了,忽略了很多特殊情况,所以我们从头考虑:更改数为 0如果整个序列已经是递增的了,输出 N,结束如果不是,先在序列中找未修改时

2016-04-24 15:56:37 314

原创 [HDU 5316] Magician (线段树+单点更新+区间询问+区间合并)

HDU - 5316 给你一个长度为 N的序列,有 M个操作 0 a b: 询问[a,b]区间内下标奇偶交替的序列的最大和 1 a b: 将 a位置的数改为 b很显然这是一个区间询问,单点修改的线段树 具体写法就是区间合并的思想 首先奇偶交替的序列有四种情况: 1) 奇头奇尾 (oo) 2) 奇头偶尾 (oe) 3) 偶头奇尾 (eo) 4) 偶头偶尾 (ee) 然后小区间的序列

2016-04-24 15:05:36 267

原创 [POJ 1990] MooFest (树状数组)

POJ - 1990 有NN头牛排成一行,每两头牛之间进行交谈 代价为 max(v[i],v[j])∗distance(i,j)max(v[i], v[j])*distance(i,j),问代价和为多少很显然,如果暴力去做的话,是 O(n2)O(n^2)的,必然会 T 所以我们要依照vv的值来依次计算 即对vv的值从小到大进行排序,然后对vv从小到大计算 计算到排序后第ii头牛时,前面的牛

2016-04-21 22:51:10 267

原创 [POJ 2104] K-th Number (块状数组)

POJ - 2104 给定一个长度为 N的互不相同的序列和 M个询问 每次询问给出一个区间,问区间内第 K大的数是多少分块做法: 将区间分块,每块大小 sqrt(n),分块内排序 每次查询一个第 K大,先二分确定这个数是多少 然后在区间内统计小于他的数有多少个,如果 cnt>=K,则缩小这个数 (log(n)) 统计方式是,每次查询的一个区间 如果完全包含了一个分块,则在分块内二分搜索

2016-04-21 11:51:10 438

原创 [HDU 3017] Treasure Division (暴力+折半搜索)

HDU - 3017 一个裸的背包问题,有 N个物体,每个有个体积和价值 问分成两堆,每堆数量相差不超过 1,使得价值差最小这题数据的特点是体积特别大,有 2302^{30},意味着不能使用背包DP来做 但是N又特别小,所以其实这题正解是暴力枚举 但是显然,暴力枚举的复杂度是 2302^{30}次方 (一个物体选或不选)所以我们可以用上一个叫做折半搜索的小技巧 把N分成相等的两堆,每堆进行

2016-04-19 23:34:00 353

原创 [POJ 3684] Physics Experiment (脑洞+弹性碰撞模型)

POJ - 3684 一个圆筒内有 N个相同的小球,每隔一秒释放一个,它们将互相进行弹性碰撞 问 T时刻各个小球的位置在哪因为是弹性碰撞,所以机械能是守恒的 而且小球之间的相对顺序不会发生改变 一个小球撞到另一个小球时,相互交换机械能 每个小球的机械能都是各不相同的,所以相当于碰撞的两个小球交换了身份 进一步的,相当于小球没有发生碰撞,相互穿过了对方(2*R的距离) 每次碰撞,朝下的小

2016-04-18 13:28:04 297

原创 [HDU 5667] Sequence (矩阵快速幂+费马小定理)

HDU - 5667 题意很简单,给你一个递推式 F1=1F_1=1 F2=abF_2=a^b Fn=ab∗Fcn−1∗Fn−2(n>2)F_n=a^b*F_{n-1}^c*F_{n-2} (n \gt 2)求 F(n)modpF(n) \mod p其中 N可以高达 1e18,这赤裸裸地就告诉你解法了,矩阵快速幂搞起不过这题矩阵需要一点技巧,首先观察可得 FnF_n都是 a的幂次 所以我

2016-04-17 10:58:28 363

原创 [POJ 3276] Face The Right Way (翻转问题+技巧)

POJ - 3276 有 N个奶牛排成一列,有些朝前有些朝后, 一次可以翻转连续的 K头奶牛的朝向,K是固定的 求最少翻转次数,以及最小的 K这种翻转的问题有两个很明显的性质 1) 翻转的位置先后是无关的 2) 同一个地方最多翻转一次于是枚举 K,再枚举 N依次去翻转 K长度的窗口依次向右滑,如果此时最左边的牛朝后 则一定要翻转,因为此后的操作都与其无关了不过直接搞的话时间复杂度是 O

2016-04-16 00:30:04 373

原创 [POJ 2100] Graveyard Design (Two Pointer)

POJ - 2100 给出一个数 N,求有多少种连续的平方和加起来为 N 没啥好说的,two pointer搞起 坑点有几个: 1) 这题 POJ上内存给得比较小,所以不能把平方和预处理出来 2) 注意爆 int的问题 3) 多组数据 4) s,t,sum都要从 1开始,否则会 WA#include <cstdio>#include <iostream>#include <cstd

2016-04-15 22:58:28 174

原创 [HDU 4569] Special equations (数学+技巧+脑洞)

HDU - 4569 给你一个多项式,求使得多项式 mod (P*P)的平方为 0的解刚开始题目扯了一堆 CRT啥啥啥的,其实是烟雾弹 注意到这题 P只有 1e4,意味着可以从 0..P-1 枚举出 x的解 因为根据 mod 的性质,以及 f(x)是多项式 如果 f(x)%P=0,那么 f(x+P)%P=0 所以只需要枚举 0..P-1就好了 但是这题求的是 mod P*P就比较麻烦,乘

2016-04-15 21:42:59 247

原创 [CodeForces 118D] Caesar's Legions (计数DP)

CodeForces - 118D 有 N1个步兵和 N2个骑兵排成一列 其中不能有连续的 K1个骑兵,连续的 K2个步兵 问有多少种排列方式这题计数的我刚开始想得比较复杂 妄图用组合数和排列数给算出来 后来经菊苣提醒,发现有更无脑的做法这种连续序列相关的,事实上可以用计数 DP来做 dp[i][j][k] 表示当前是第 i个士兵,其中用了 j个步兵 而 k如果是 0..K1则表示包括

2016-04-15 18:23:44 355

原创 [CodeForces 566F] Clique in the Divisibility Graph (记忆化搜索)

CodeForces - 566F 一个集合,如果其中两个数能一个能整除另一个,那么他们就具有双向的关系 问最大的相容集有多大刚开始我把一个数之前有多少个因子存了下来 然后再枚举因子去求 编程复杂度爆炸,时间复杂度爆炸后来才知道,其实反过来考虑就好了 dp[i] 表示第i个数之后有多少个以它为因子的 然后不断翻倍,判断其倍数是否在集合中 然后记忆化搜索即可#include <cstdi

2016-04-15 17:09:01 305

原创 [HDU 4565] So Easy! (数学)

HDU - 4565 求 ⌈(a+b√)n⌉%m\lceil{(a+\sqrt{b})^n}\rceil \% m 的值,其中 0<N<2310<N<2^31 这题有个取整,看起来似乎根本没法用快速幂,没法做 实际上需要一点数学技巧特别注意到,题目提出了 (a−1)2<b<a2(a-1)^2<b<a^2 令 Fn=(a+b√)n+(a−b√)nF_n=(a+\sqrt{b})^n+(a-\s

2016-04-15 16:46:41 207

原创 [CodeForces 573B] Bear and Blocks (脑洞题)

CodeForces - 573B 一列上有若干个方块堆,每堆方块有一个高度 每次可以消去这堆方块最外面的那层,问要几次才能消去 这是个脑洞题,还是有点难度的首先可以预见的是 1) 每堆方块每次至少可以消去最顶上的一个 2) 每堆方块消去后,将与左右相邻中最矮的同高,如果都比他高,他就只能向下消一个 3) 每次都能消掉最左和最右两列然而实际上这题从两边同时开始考虑消去的话,比较复杂 不

2016-04-14 22:07:24 385

原创 [POJ 2566] Bound Found (TwoPointer入门)

POJ - 2566 给你一组数,要求从中找出连续的一段,使得其和的绝对值尽量和 t接近这种求序列连续一段的情况,最适合使用 two_pointer的技巧了 不过 two_pointer的前提是,序列在某种意义上是单调的 不过这题难就难在序列里数可正可负,时大时小,所以并不能使用 two_pointer关键步骤,求出前缀和,再对前缀和排序 由于求的是绝对值,那么 sum[r]-sum[l]=

2016-04-13 21:47:33 221

原创 [POJ 1759] Garland (二分)

POJ - 1759 这题 WA了好久,事实证明我真的想多了啊 原先化简了半天的方程组,其实完全是没必要的 由题目条件,可以化出 Hn−Hn−1+2=Hn−Hn−1H_n-H_{n-1}+2=H_n-H_{n-1} 所以相邻彩灯的位置差是等差数列 直接二分第二个的位置,然后递推求出 B的位置 中途判一下有没有位置小于 0的就好了 水题!#include <cstdio>#includ

2016-04-08 14:05:06 253

原创 [HDU 1024] Max Sum Plus Plus (DP)

HDU - 1024 定义 dp[i][j] 为取第 i 个数的情况下,前 i 个数组成 j 组 得到的最大和 转移方程为 dp[i][j] = max(dp[i-1][j], max(dp[0..i-1][j-1]) ) + inpt[i] 意思是:考虑第 i 个数,要么把它和第 i-1 个数放到一组 (dp[i-1][j]), 要么另起一组,从0..i-1中转移 (max(dp[0..i-

2016-04-07 21:23:12 204

原创 [LightOJ 1292] Laser Shot (几何,判断共线)

LightOJ - 1292 刚开始写的时候是O(n3log(n)n^3log(n))的,枚举两个点,得到一条直线,用set记录下来,然后再 O(nn)地计数,居然没有卡过 orz 听了学长的教导,get到一个几何常用思路,正确解法如下 枚举一个点,再枚举其他点,计算到这个点的斜率,make_pair(dx,dy)塞到map里,把相同斜率的计数一下 这样时间复杂度为 O(n2log(n)n^

2016-04-07 21:19:43 379

原创 [HDU 4855] Goddess (极角排序+三分)

HDU - 4855 借这道题学了下极角排序和三分求凸函数最大值 按所有左右切线,圆心的弧度值排序,从而分割出角度上的若干个区间 射线的角度在这些区间里变动时,每个割线的长度都是凸函数,叠加起来也是凸函数 所以可以对每个区间利用三分法求得最大值,再对这些最大值取 max 即为答案1) 利用三分法可以求得单峰函数的最大值 2) 利用 atan2(y,x)可以比较方便地求出向量与 x轴正方向的

2016-04-07 21:11:21 651

原创 [HDU 5029] Relief grain (树链剖分+线段树)

HDU - 5029 其实这道题最大的难点不是树链剖分,而是怎么维护某个点被那些颜色染过,染过多少次 如果在线段树维护的话,很难做到,估计得树套树,而且空间会炸 好在这题是离线的,可以使用差分的思想来维护 对一段区间[l,r]染色 c,相当于在这段区间左端点 l打上 c标志,右端点 r+1打上 -c标志 然后扫一遍整个区间 (依照 dfs序扫一遍整棵树),期间不断维护一颗线段树

2016-04-07 20:59:39 402

原创 [POJ 1284] Primitive Roots (数论,原根)

POJ - 1284 题意是,求一个质数的原根 原根的定义是,对于正整数 aimodp(i=[1,p−1])a^i mod p (i=[1,p-1])得到的集合为{1,2,…,p-1},那么则称 a是 p的一个原根 对于任意正整数 p,其原根个数为 ϕ(ϕ(p))\phi( \phi(p) ),ϕ(n)\phi(n)为欧拉函数,表示小于n且与n互质的数的个数 而质数的欧拉函数值为 p-1,所

2016-04-07 20:55:15 228

原创 [POJ 3764] The xor-longest Path (Tire树 + 贪心)

POJ - 3674 题意是给你一个树,每条边有一个权值,求得树上一条路径,使路径上每条边权值的异或和最大 首先用一个 DFS把根到任意点的路径的异或和求出来 xorv[i] 由异或的性质可得点 u和点 v的异或和即为 xorv[u]^xorv[v] ( 根到两点 LCA的异或和会消去) 然后问题就转化成在区间内找两个值,使得他们的异或和最大 与 LightOJ - 1269一样的做法,用

2016-04-07 20:47:59 378

原创 [LightOJ 1269] Consecutive_Sum (Trie树妙用)

LightOJ - 1269 题意是给你一个序列,求子序列区间异或起来的最大值和最小值 首先可以利用类似前缀和的形式预处理一下,inpt[i]^=inpt[i-1] 然后一段区间[l,r]的异或值就等于 inpt[r]^inpt[l-1] 然后问题就转化成了求区间两个数,异或的最大值和最小值,接下来就是问题的关键显然这是一个位运算的题目,通常都要按位,从高位到低位来考虑 先求最大值,如果某

2016-04-07 20:39:36 380

原创 [HDU 4334] Trouble (分治+二分查找)

HDU - 4334 给你五个数组,每组 N个元素 (N<=200) 问是否能在五个数组里各选一个数,使得和为0 思路是分治,然后再二分查找,降低复杂度1) 算出 S1S_1和 S2S_2所有元素的和的情况并排序,对 S3S_3和 S4S_4亦是如此 O(N2N^2) 2) 枚举 S3S_3和S4S_4的和数组与 S5S_5的和的情况 再在 S1S_1和 S2S_2的和数组里找其相反数 O

2016-04-07 19:24:39 282

原创 [HDU 4324] Triangle LOVE (拓扑排序,DFS)

HDU - 4324 题意是,一张有 N个点的图,保证每两个点之间有且只有一条有向边连接 求是否存在三元环 用拓扑排序判环,如果存在环,则一定存在三元环 证明如下: 不存在二元环 设存在 n(n>=3)元环 p1->p2->p3->…->pn->p1 1) 若存在边 p3->p1,则存在三元环 (p1->p2->p3->p1) 2) 若不存在 p3->p1,则必然存在 p1->p3

2016-04-07 19:14:21 241

原创 [CQUOJ 21448] 会做题的兔兔 (数学+DP)

题意大意是有一个整数,可以用若干个 2的 n次幂累加得到,问一共有多少种累加方案 统计方案的题,最重要的是做到不重复,不遗漏 dp[i][0]表示构成 i中不含 1的方案有多少种 dp[i][1]表示构成 i中含 1个 1的方案有多少种 dp[i][2]表示构成 i中含 1的方案有多少种 最后答案是 dp[N][0] +dp[N][2] 思路如下: 1) 如果 i是奇数,那么必然要有

2016-04-07 19:08:59 221

原创 [CQUOJ 21412] 软妹币!软妹币!软妹币! (数学+DP)

CQUOJ - 21412 题意大致是,用若干不同的数中的某些数加减得到 1…n之间的所有数,需要的最少几个不同的数 赛上是找规律做的,虽然过了,但是感觉不太稳,赛后看了题解恍然大悟首先有这样一个事实,如果有 3个数可以表示 1..13 那么对于小于 13的n,答案至多为 3 所以我们可以考虑,用 i个数能够构造出的最大的数是多少设 dp[i]表示 i个数最大能表示 [1, dp[i]]

2016-04-07 19:01:35 388

原创 [POJ 3045] Cow Acrobats (贪心)

POJ - 3045 有若干头牛叠罗汉,每头牛有一个冒险值,为在其上面所有牛的重量,减去其力量值 问如何使得最大的冒险值最小 挑战上面的题,本来想着用二分答案的方法做 虽然觉得自己的思路没什么问题,但是 WA了 百度了一发题解,发现这题正解是贪心首先直观感觉力量大的,体重轻的应该在下面,但这有两个因素,不好确定 可利用调整法试图找出答案 假设我已经找到了答案排列 ( 猜想答案序列)

2016-04-07 18:57:17 356

空空如也

空空如也

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

TA关注的人

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