自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 资源 (1)
  • 收藏
  • 关注

原创 BZOJ 3784|树上的路径|点分治|堆|RMQ

求前M个路径,使路径权最小。和NOI 2010 超级钢琴类似。。。#include <queue>#include <cstdio>#include <cstring>#define FOR(i,j,k) for(i=j;i<=k;++i)const int N = 50005, M = N * 2, S = 2000005;using namespace std;int bin[20]

2016-04-29 12:25:46 694

原创 BZOJ 2535|BZOJ 2109|BZOJ 2008|NOI 2010|航空管制|拓扑排序

求图的拓扑序,使各点v在序列中位置编号不大于给定的k[v]。 并求在拓扑序的最早出现的位置。最早出现和最晚出现相反,如果反序拓扑图,那么就变成最晚出现的位置,然后问题就简单了。。只要拓扑排序时不断地推迟对应节点的出现时间直到不能再推迟就可以了。至于不大于,由于至少出现的位置,因此只要是后面的就可以了,只要能放就放。BZOJ 2535和2109都卡\n和空格啊。。 BZOJ 2008好像不可做的样

2016-04-29 12:18:45 1037

原创 BZOJ 2006|NOI 2010|超级钢琴|堆|RMQ

对于所有的子序列,如果我们固定右端点,那么左端点就有一个区间了(这种想法和4268有点像?),那么如果我们取了一个左端点j能让区间值最大,那么就取了,左区间从[l,r][l,r]分裂为[l,j−1][l,j-1]和[j+1,r][j+1,r]。 那么取最大的k个就是答案了。至于怎么确定最大的左端点,显然通过后缀和+RMQ就可以实现了。 [r+1,n]对于所有的左端点都是一样的,所以有没有对于我们

2016-04-29 11:49:43 729 1

原创 BZOJ 3648|寝室管理|点分治|树状数组|平衡树

给出一个至多有1个环的图,求长度不超过K的路径数。考虑树的情况,显然用点分治就可以搞出来了。 对于过根的路径,先处理出各深度有多少的点,再依次枚举各子树,对于各点,有其深度,问题变成了在其他子树中,与现有深度之和不超过K的有多少个,而枚举的点到根的距离是已知的t,那么就变成在之前的子树中,深度不超过K-t的点有多少个,平衡树、树状数组都可以轻易地维护。O(nlog2n)O(n\log^2 n)环呢

2016-04-29 09:53:59 1002

原创 BZOJ 3522|POI 2014|Hotel|树形DP

给出树上三点对的个数,满足两两距离相等。显然,符合题意的情况只有3个点在某个点的不同子树中的情况,因此枚举根跑一次树形DP处理出不同深度的点的个数搞一下就可以了。2016年1月A的题为什么没有写题解呢。。 为Claris的加强版做准备#include <cstdio>#include <cstring>const int N = 5001, M = 10000;int h[N], v[M],

2016-04-28 22:36:36 874

原创 POJ 3744|Scout YYF I|概率DP

令dp[i]dp[i]表示到i的概率 显然有dp[i]=p×dp[i−1]+(1−p)×dp[i−1] dp[i]=p\times dp[i-1]+(1-p)\times dp[i-1] 然后状态转移很大,考虑矩阵优化。 显然有 [dp[i−1]dp[i−2]][p1−p10]=[dp[i]dp[i−1]] \begin{bmatrix} dp[i-1]&dp[i-2] \end{bma

2016-04-28 18:14:22 510

原创 BZOJ 4515|SDOI 2016|游戏|树链剖分

未完待续#include <cstdio>#include <algorithm>#include <cstring>typedef long long ll;using namespace std;const int N = 100005, M = N * 2, S = M * 2;int h[N], p[M], v[M], sz[N], fa[N], cnt, ts;int dep

2016-04-28 17:20:11 554

原创 BZOJ 4514|SDOI 2016|数字配对|筛法|费用流

任意两个符合条件的数字,指数之和只差1,因此形成了二分图,每个点的可选择次数为bib_i,因此考虑费用流, <s→i,cap:bi,cost:0>(ai的指数之和为奇数<s\rightarrow i, cap: b_i,cost:0>(a_i的指数之和为奇数 <i→t,cap:bi,cost:0>(ai的指数之和为偶数)<i\rightarrow t,cap:b_i,cost:0>(a_i的指数

2016-04-28 15:43:46 735

原创 BZOJ 4517|SDOI 2016|排列计数|错排公式|组合数学

求满足恰好m个数字使其元素和位置序号不同的全排列的个数。对于简单的错排问题,全部数字序号不同的排列数字个数定为D(n)D(n)。 长度为N的数列,元素1有n-1种放法,对于剩下的n-1个元素,如果元素1放到了位置k,那么元素k放在1,那么剩下的即为D(n−2)D(n-2),否则D(n−1)D(n-1)。 求得D(n)=(n−1)[D(n−2)+D(n−1)]D(n)=(n-1)[D(n-2)+D

2016-04-28 10:23:51 845

原创 BZOJ 4558|JLOI 2016|SHOI 2016|方|容斥原理

题面有毒。。poisonous poi!poi!poi! 注意斜着的正方形也是要算的。如果没有删除点,总的方案数显然是∑i=1min{n,m}i(n−i+1)(m−i+1)modp \sum_{i=1}^{\min\{n,m\}} i(n-i+1)(m-i+1) \mod p i表示有i种斜着的正方形,(n-i+1)表示以(i,k)为左上角的正方形数目,(m-i+1)表示k的数目。接下来考虑每

2016-04-28 00:30:38 3892

原创 BZOJ 4562|HAOI 2016|食物链|动态规划

写水题掉RP啦 我记得这个还是去年学长研究性学习的内容之一。。不过很水就是了。。 DAG DP。。懒得写拓扑排序了(和DP融为一体)#include <stdio.h>const int N = 100005, M = N * 2;int dp[N], h[N], p[M], v[M], in[N], entry[N], cnt = 0;void add(int a, int b) {

2016-04-27 21:42:35 1235

原创 BZOJ 4025|二分图|CDQ分治|并查集|LCT

一条边有存在的时间[start,end][start,end],问每个时刻该时图是不是二分图。是二分图就不存在奇环,考虑并查集维护最大生成树,是否是奇环也很好判断了,两点间距离就是dis[a]+dis[b]-2*dis[LCA],由于我们只关心奇偶性,因此把加减法换成xor也是可以的,然后就变成了dis[a]^dis[b]了,加上非树边就是环了。那么我们就考虑扫一遍时间,然后到了对应时间就加入边、删

2016-04-27 17:51:22 1088

原创 BZOJ 1854|SCOI 2010|游戏|并查集

如果把不同武器之间的边连起来跑一边DFS是30%的数据。 但是一定要是不同武器之间连边么?武器内的两个值?连边后发现了性质:如果连通块形成了环,那么全部点都可以满足,否则满足n-1个,肯定是最大的那个不能满足。 因此考虑并查集维护连通块,合并的时候给小的打标记,形成环时,给最大的打标记。 那么从1开始一直往后直到没有标记这段点就是答案。#include <stdio.h>#define FO

2016-04-27 16:08:08 507

原创 BZOJ 4546|CodeChef XRQRS|Xor Queries|可持久化Trie

#include const int N = 500005;struct Trie { Trie* c[2]; int size; Trie() { c[0] = c[1] = this; size = 0; } Trie(Trie *l, Trie *r, int sz) { c[0] = l, c[1] = r, size = sz; } void* ope

2016-04-27 15:02:32 690

原创 CodeForces 274C|275E|The Last Hole!|计算几何

给出N个点,从零时刻起,分别以这N个点为圆心的N个圆逐渐变大,有半径r=时刻t;随着时间推移,图形当中可能出现一些”洞”,而且出现的洞一定会在某时刻消失。严格地,一个洞被定义为封闭的、连通的未被圆覆盖的区域,可以理解为被圆所围起来的区域。对于给出的n个点,求出最后一个洞消失的时间;如果没有出现过洞,输出-1。最后一个洞♂考虑3个圆的情况,发现洞消失的位置即三个圆心围成的三角形的外心,而且当且仅当三角

2016-04-27 12:18:29 869 2

原创 what the hell it is?!

博客暂停更新

2016-04-27 10:35:50 762

原创 POJ 3470|Walls|线段树

网格上有N(<=5e4)堵墙,有M(<=5e4)只鸟,其会选择最近的那堵墙撞晕,求鸟撞到各堵墙的次数。考试时给的中文翻译不忍直视。。貌似还是从某题解直接抄过来的。。直接看英文了。。 然后就在POJ上排#13了。。首先离散化一下。。 然后因为只能上下左右4个方向飞情况类似,这里我们只需要讨论一个方向。考虑向上飞的情况,我们人为添加一条下边界扫描,同时维护横着的墙,显然,如果遇到了新的墙,肯定目前其

2016-04-27 10:32:30 1378

原创 BZOJ 3571|HNOI 2014|画框|最优匹配|计算几何

求最大匹配,使得选中匹配边的权值a的和与权值b的和的积最小。考虑方案(∑ai,∑bi)(\sum a_i,\sum b_i) ,其在反比例函数ans=xyans=xy上,显然在这个函数的右上方的点都比当前方案更优,因此所有可能的答案都在这个下凸壳上,考虑枚举下凸壳上的点,发现如果我们连接下凸壳两端点,那么离连线最远且最靠近原点的点肯定在下凸壳上,因此考虑分治。 (摘自:http://blog.cs

2016-04-26 22:46:10 556

原创 POJ 3017|Cut the Sequence|动态规划|单调队列

给定一个数列{an}\{a_n\},任意将连续的aia_i分块,使所有块的和都不超过MM,最小化各块的最大值的和。dp[i]=min{dp[j]+max{a[j..i−1]}} dp[i]=\min\{dp[j]+\max\{a[j..i-1]\}\} 其中∑i−1k=jak≤M\sum_{k=j}^{i-1} a_k\leq M 时间复杂度是O(n2)O(n^2),通过打表我们可以发现决策单

2016-04-26 18:21:48 1050

原创 POJ 3245|Sequence Partitioning|动态规划|单调队列

题意真是难懂。。一个长度为NN的序列(每个元素是(ai,bi)(a_i,b_i)这样的数对),连续地分成若干组。每组左右边界是(l1,r1),(l2,r2),⋯,(lp,rp)(l_1,r_1),(l_2,r_2),\cdots,(l_p,r_p),满足li=ri−1+1,li≤ri,l1=1,rp=nl_i = r_{i − 1} + 1, l_i ≤ r_i, l_1 = 1, r_p = n。

2016-04-26 17:56:50 959 1

原创 SGU 278|Fuel|凸包

有N种汽油每种有三个属性:密度aia_i,强度cic_i,价格bib_i。用第i种汽油mmkg拥有m∗aim*a_i的体积,m*ci_m*ci_的强度,花费m∗bim*b_i。汽车能装任意比例混合的多种汽油。总体积不能超过AA,总花费不能超过BB,最大化总强度,保留至少6位小数。∑miai≤A∑mibi≤Bmax∑mici\begin{aligned} \sum m_ia_i\leq A \\\s

2016-04-26 16:57:02 686

原创 BZOJ 3643|Phi的反函数|搜索|线性筛法

求φ−1(n)=min{x|φ(x)=n}(n≤231) \varphi^{-1}(n)=\min\{x|\varphi(x)=n\} (n\leq 2^{31})太大就输出-1的一定是搜索题φ(n)=n(1−1p1)⋯(1−1pk)=pa11⋯pakk(1−1p1)⋯(1−1pk)=pa1−11(p1−1)⋯pak−1k(pk−1)\begin{aligned} \varphi(n)&=n(1-\

2016-04-26 11:07:46 619

原创 POJ 3968|UVALive 4992|HDU 3761|UVA 1475|Jungle Outpost|二分|半平面交

有n个瞭望台,形成一个凸的n多边形。瞭望台的保护范围就是凸多边形内。敌人进攻会炸毁一些瞭望台使得总部暴露在剩下瞭望台凸包之外。你的任务是选择一个点作为总部使得最少需要炸坏的瞭望台总数尽可能多。输出此时敌人需要炸毁的瞭望台数量。vjudge真是个好地方,4倍经验唾手可得一开始想了个O(n2)O(n^2)的真是作死。。 嗯nn这么大应该是O(nlogn)O(n\log n)的。 二分答案。

2016-04-26 10:03:10 889

原创 URAL 1831|Tsyfirkin's Lesson|期望DP

中文大意:计算两个k位数(没有前缀0)加法的期望时间计算(跟我们竖式加法一样从低位到高位逐位相加)。规则:一秒钟来写一个数字或对进位1做个记号。如果一次一位加法是0+?或者1+?或者?+0或者?+1只需要1秒,如果两个数都大于1就要2秒,如果a+b或者b+a在之前算过,这次再算那么也只用1秒。计算期望秒数。稍后给方程。。#include <stdio.h>int main() { stat

2016-04-26 08:35:10 438

原创 UVA 1063|11318|UVALive 3807|Marble Game|搜索

棋盘游戏有挡板,每步可以往四个方向之一倾斜,然后所有球往那个方向移动,遇到洞就会掉下去。如果一个球没有落到对应编号的洞就输。然后如果前面是墙或者别的球或者挡板就停止移动。当每个球都落到对应编号的洞就算赢。问最少步数/无解。广度搜索暴力解决之。。 map判重大法好!!!!#include <cstdio>#include <map>#include <queue>#include <cstri

2016-04-25 21:46:03 545

原创 BZOJ 3270|博物馆|概率|高斯消元

Source实力透露做法。。似乎有这么个式子 f[i,j]→⎧⎩⎨⎪⎪⎪⎪⎪⎪1−pidi⋅pj⋅f[x,j]1−pjdj⋅pi⋅f[i,y]1−pidi1−pjdjf[x,y](x∈adji,y∈adjj) f[i,j]\rightarrow\left\{\begin{aligned}\frac{1-p_i}{d_i}\cdot p_j\cdot f[x,j]\\\frac{1-p_j}{d_j

2016-04-25 19:12:16 803

原创 URAL 1851|GOV-internship|最小割

一看是个巨水的最小割就来做了。给出两个字符串由0和1组成,有些位置不知道。把第二个串去匹配第一个串,贡献代价为本次失配字符数。如何决定这些不知道的位置使总代价最小。可以发现不知道位置只有两种状态:0和1,考虑最小割。 令xix_i表示’?’ 那么答案就显而易见了 min{∑max{0,xi−0}⋅(匹配到的0的个数)+∑max{0,1−xi}⋅(匹配到的1的个数)+∑|x−xj|⋅(匹配到?的

2016-04-25 16:33:15 837

原创 URAL 2064|Caterpillars|堆

NN只毛毛虫,开始高度为0,第ii只每爬tit_icm,休息tit_imin,即下滑tit_icm,速度1cm/min。每次询问时刻tt最高的毛毛虫的高度。首先很显然ti≥106t_i\geq 10^6时,就不用算了。 然后ti<106t_i<10^6 对于每个毛毛虫,在(2n+1)ti(2n+1)t_i时到达顶点。 然后答案肯定比这个顶点小。 所以时间的变动都可以视为毛毛虫是下滑的。 没

2016-04-25 15:50:30 605

原创 机房水题欢乐赛 2016-04-25 下午

九月的彩笔Color【题目描述】九月的桌面上有一行调色板,上面有n个格子,每个格子都涂上了k种颜色中的其中一种,颜色用’A’到’Z’编号。九月想给其中一些格子重新染色,使得没有相邻格子是同一种颜色,她想知道最少需要染多少个格子可以做到。【输入描述】第一行n,k 第二行一个字符串,为初始时的颜色【输出描述】一行为答案【输入样例1】6 3 ABBACC【输出样例1】2【输入样例2】3 2 BBB【

2016-04-25 09:37:29 437

原创 机房水题欢乐赛 2016-04-26 上午

Command【题目描述】我们现在来讨论一种机器的抽象模型。这种机器有一个有限的状态集S={s0,s1,s2..sn} 和一个有限的指令集C={c0,c1,c2…cm} 。机器在任意时刻都处于某 一种状态s∈S 。同时,机器还有一个转移函数f : S x C->S ,表示机器在当前状态下接 到某个指令之后会转移到的状态,亦即机器在状态s下接到指令c后状态会变成f (s,c)。 现在对于一个机

2016-04-25 09:11:46 797

原创 BZOJ 4539|HNOI 2016|树|可持久化线段树|LCA ******

待续。。#include <cstdio>#include <algorithm>using namespace std;const int N = 100005, M = N * 2;typedef long long ll;struct Seg { Seg *lc, *rc; int sz; ll sum; Seg() { lc = rc = this; sum = s

2016-04-24 23:58:57 521

原创 BZOJ 1483|HNOI 2009|梦幻布丁|Set

给定初始序列,每个元素有个颜色,查询不同颜色块的个数,或合并两个颜色。合并操作要把小的合并到大的上去,这样连续区间的长度至少会翻倍,复杂度O(nlogn)O(n\log n) 但是我用的是set。。应该是O(nlog2n)O(n\log^2n)了。。#include <cstdio>#include <set>#include <algorithm>using namespace std;

2016-04-24 23:49:28 375

原创 机房水题欢乐赛 2016-04-24 下午

本次比赛为真·水题欢乐赛Parliament【题目描述】给出一个正整数N,把N分解成若干个不同的正整数相加,使得这若干个正整数的乘积最大.按升序输出这若干个正整数.【输入样例】7【输出样例】3 4【数据范围】20% 的数据 N<=20 40% 的数据 N<=200 60% 的数据 N<=1000 100%的数据 N<=10000Solution尽量分到根号N处即可。。Oneperson【题目描

2016-04-24 22:13:05 468

原创 URAL 1841|Cableways|...

二维空间中存在若干条连续的折线,折线方向从左下到右上或者右下到左上。一个人沿着这个折线走从下方走到上方。每条折线上可能会有可以直达上方最近折线的线,这种线只能通往最近上方折线,而且走这条线只是y坐标增加。走折线需要一定时间,走直上的线也需要一定的时间。求最少时间到达折线y坐标最大的点。求第K大。。偷懒并没有写平衡树又写了二分+树状数组。。#include <cstdio>#include <cst

2016-04-24 21:59:58 421

原创 URAL 1849|Rabbit Hunt 2|计算几何|二分|Set

待续#include <cstdio>#include <algorithm>using namespace std;#define FOR(i,j,k) for(i=j;i<=k;++i)#define rep(i,j,k) for(i=j;i<k;++i)const int N = 10005;struct Data { int x, y; Data(int a =

2016-04-24 17:53:00 761

原创 CodeForces 273D|Dima and Figure|动态规划

N*M(≤150\leq 150)的棋盘有多少个连通块是凸的。绕了好几个弯之后终于搞定了。。 令f[i][j][k][l]f[i][j][k][l]表示现在到了第i行,当前连通块占用j~k列,状态为l。 考虑一个连通块,我们用一条线扫过去,发现可能的情况只有覆盖区域:变小,变大,左移,右移(没有限定区域大小)。所以l就表示这4种情况。 那么左右边界只可能有:一直扩张,一直收缩,或者先扩张再收缩

2016-04-24 17:48:49 963

原创 ZOJ 3916|Buy Cakes|贪心|堆

你身上有MM元,KK张优惠券。商店共有NN块蛋糕,使用一张优惠券可以买一块优惠价格的蛋糕。蛋糕ii使用优惠券花费bib_i,不使用花费aia_i。问最多买多少块蛋糕。开始方向想错跪跪跪。浪费了好多时间。 一直在想先aia_i买完再调整bib_i。。 然而正确姿势是先买完bib_i再调整aia_i。。 除了这点思路基本一样,但是就这点反了QwQ。 难怪一直觉得好像情况好复杂QwQ。 这个悲伤

2016-04-24 12:29:15 790

原创 USACO|Barn Repair|堆|贪心|动态规划

SolutionDPdp[i,j]=min{f[i−1,j−1]+1,f[i,j−1]+a[j]−a[j−1]} dp[i,j]=\min\{f[i-1,j-1]+1,f[i,j-1]+a[j]-a[j-1]\} min的第1项表示第j个牛棚用一块长度为1的新木板覆盖 第2项表示延长第i块木板至第j个牛棚。贪心当所有木板都用时长度最短。 一开始c块barn1

2016-04-24 00:33:21 425

原创 机房水题欢乐赛 2016-04-22 上午

crypt1【描述】下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式。 * * * x * * ---------- * * * * * * ---------- * * * *数字只能取代*,当然第一位不能为0,况且给定的数字里不包括0。 注意一下在美国的学校中教的“

2016-04-23 23:59:38 411

原创 机房水题欢乐赛 2016-04-23 上午 搜索

milk4 【描述】 农夫约翰要量取 Q(1 <= Q <= 20,000)夸脱(夸脱,quarts,容积单位——译者注) 他的最好的牛奶,并把它装入一个大瓶子中卖出。消费者要多少,他就给多少,从不有任何误差。 农夫约翰总是很节约。他现在在奶牛五金商店购买一些桶,用来从他的巨大的牛奶池中量出 Q 夸脱的牛奶。每个桶的价格一样。你的任务是计算出一个农夫约翰可以购买的最少的桶的集合,使得能够刚好用

2016-04-23 23:58:31 456

信息学竞赛离线评测软件

最受欢迎的信息学竞赛离线评测软件,需要提供输入输出文件,该软件将可以自动帮您运行程序(需要源代码),并输出得分。

2011-07-29

空空如也

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

TA关注的人

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