自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Codeforces Round #440(Div.2)

一句话题意:A:给出两个长为\(n\),\(m\)的的数组,每个数在\(1\)到\(9\)之间,求出一个最小的数使得至少有一位出现在一个数组中,且至少有一位出现在另一个数组中。\(n,m\leq9\)B:给出一个长度为\(n\)的数组\(a\),将它分成\(k\)段,最大化每一段最小值的最大值。\(1\leq{k}\leq{n}\leq10^5,-10^9\leq{a_i}\leq1...

2017-10-15 23:58:00 122

转载 Codeforces Round #439 (Div. 2)

一句话题意:A:传送门题意:给定两个长为\(n\)的数组\(a\),\(b\),令\(ans=\)有序对\((i,j)\)的个数使得\(a_i\ xor\ b_j\)在这\(2n\)个数中出现过,然后如果\(ans\)是奇数就输出Koyomi,否则输出Karen,\(n\leq{2000},a_i,b_i\leq2000000\)B:传送门题意:求\({b!\over{a!}}\...

2017-10-07 16:34:00 138

转载 Codeforces Round #384 Div.2

A:Vladik and flights题目大意:给定一个长度为n的01串和a,b两个位置,如果一个位置和另一个位置上的数相同,那么这两个位置之间相互到达的代价是0,否则代价是这两个位置的距离,问从a到b最少需要多少代价。思路:答案非0即1,0的情况就是这两个位置上的数相同,1就代表一定同时存在0和1,那么就把这两个点分别移到0,1交界的位置,那么答案就是1。#inclu...

2016-12-16 17:50:00 146

转载 Codeforces Round #381 Div.2

A:Alyona and copybooks题目大意:已经给了你n本书,你可以选择花a元买一本书,花b元买两本书(严格两本),花c元买三本书(严格三本),让你花最少的钱买x本书使得n+x为4的倍数。思路:枚举一下买一本书,两本书,三本书的次数,然后统计答案即可。#include<cmath>#include<cstdio>#include&...

2016-11-30 19:41:00 149

转载 bzoj3405:[Usaco2009 Open]Grazing2 移动牛棚

思路:首先因为要让距离尽量大,所以奶牛1一定在1号牛棚,奶牛n一定在s号牛棚,然后考虑dp。因为总距离为s-1,然后要使长度为d的段数尽量多,那么剩下的一定就是d+1的段数,也就是s-(n-1)*d。然后f[i][j]表示保证前i个牛棚合法且前面长为d+1的段数为j的答案,然后第i个牛棚的位置其实就是(i-1)*d+j。又因为第i-1个牛棚只可能是相隔d或d-1,所以有f[i...

2016-11-09 22:07:00 89

转载 bzoj3389:[Usaco2004 Dec]Cleaning Shifts安排值班

思路:可以贪心,也可以最短路。贪心写法:因为在保证合法的前提下,我们选择的区间一定要右端点尽量靠后才行,于是我们每次就选择一个合法的并且右端点最靠后的区间就好了(如果没有合法的输出-1即可)。时间复杂度O(nlogn)(排序是nlogn的,贪心是O(n)的)。#include<cmath>#include<cstdio>#include<...

2016-11-08 21:45:00 122

转载 bzoj3315:[Usaco2013 Nov]Pogo-Cow

思路:首先可以写出n^3dp的状态转移方程:f[i][j]=max{f[j][k]+val[i]},f[i][j]表示最后一步跳到点从j点跳到i点的最大价值(状态不能设成f[i],因为j对后面的决策是有影响的),然后枚举k转移,但这样在时限内是无法通过的,于是考虑如何优化dp,可以改变一下枚举顺序,也就是一般的都是先枚举i再枚举j,可以先枚举j再枚举i,这样有什么好处呢,那么k就以直接用...

2016-11-08 20:31:00 119

转载 bzoj1018:[SHOI2008]堵塞的交通traffic

思路:线段树好题,用线段树维护连通性。区间[l,r]表示左端点为l,右端点为r,宽度为2的矩形,那么线段树区间维护的就是该区间内的四个角的连通情况,注意是该区间内的连通情况,也就是说只能通过该区间内部进行连通而不能越出区间而进行连通。一共六种连通情况:左上对右上,左上对左下,左上对右下,右上对左下,右上对右下,左下对右下。线段树的每一个节点均维护一个域a[]用来维护该区间内的...

2016-11-04 12:34:00 104

转载 bzoj4637:期望

思路:最小生成树计数只不过加了一个期望,由于期望具有线性性质,就可以转化为每条边的期望之和,那么一条边的期望如何求呢,在最小生成树记数中,是把相同边权的一起处理,之后把属于连通块内的点缩点,也就是说,一条边只可能在它属于的连通块内对答案产生贡献,之后因为缩点而不会影响答案,因此一条边的期望就等于它在它所属的连通块内包含它的生成树个数除以那个连通块的生成树个数,而包含这条边的生成树个数就是...

2016-11-02 19:48:00 160

转载 bzoj1016:[JSOI2008]最小生成树计数

思路:模拟kruskal的过程,可以发现对于所有权值相同的边,有很多种选择的方案,而且权值不同的边并不会相互影响,因为先考虑权值较小的边,权值比当前权值大的边显然不在考虑范围之内,而权值比当前权值小的边所组成的连通块已经经过缩点变成一个点了,因此处理权值相同的所有边可以看成是一个阶段,最后的答案也就是所有阶段的答案的乘积(乘法原理)。那么如何来处理权值相同的方案数呢,同样还是考虑kr...

2016-10-31 17:49:00 93

转载 bzoj1002:[FJOI2007]轮状病毒

思路:一道很裸的生成树计数问题,然而要高精度,而且听说直接行列式求值会被卡精度,所以可以模拟行列式求值的过程得到递推公式:f[i]=3*f[i-1]-f[i-2]+2,证明详见vfk博客:http://vfleaking.blog.163.com/blog/static/17480763420119685112649/#include<iostream>#in...

2016-10-30 20:40:00 102

转载 bzoj1015:[JSOI2008]星球大战starwar

思路:反着做用并查集维护连通块个数就好了。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;#define maxn 400005...

2016-10-30 16:26:00 80

转载 bzoj3208:花神的秒题计划I

思路:因为Q、S、B操作总和不超过100,因此怎么暴力怎么写。。。。当然记忆化搜索还是要的#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;...

2016-10-30 15:57:00 76

转载 bzoj2431:[HAOI2009]逆序对数列

思路:设f[i][j]表示前i个数逆序对为j的方案数,第i+1个数可以新形成1~i个逆序对,于是f[i][j]=Σf[i-1][j-k],然后用一个前缀和优化成n^2即可。#include<cstdio>#define maxn 1005#define p 10000 int n,k,sum;int f[maxn][maxn]; int m...

2016-10-29 18:02:00 77

转载 bzoj2748:[HAOI2012]音量调节

思路:刷水有益健康。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;#define maxn 55#define maxc 1000...

2016-10-29 17:23:00 189

转载 bzoj2287:[POJ Challenge]消失之物

思路:首先先背包预处理出f[x]表示所有物品背出体积为x的方案数。然后统计答案,利用dp。C[i][j]表示不用物品i,组成体积j的方案数。转移公式:C[i][j]=f[j]-C[i][j-w[i]]#include<iostream>#include<cstdio>#include<cstring>#include<...

2016-10-29 17:21:00 118

转载 bzoj1485:[HNOI2009]有趣的数列

思路:首先限制数很多,逐步来考虑,限制一很容易满足,考虑限制二,也就是让奇数位和偶数位上的数递增,限制三就是让奇数位上的数小于奇数位加一对应的偶数位上的数,那么我们可以把形成序列的过程看成加数的过程,从小到大逐步加(这显然满足限制一),然后加数的条件一是从小到大依次放奇数位或偶数位,因此也满足限制二,然后无论何时奇数位上的数一定要大于等于偶数位上的数,这样也满足了限制三,那么问题就转化成...

2016-10-29 17:08:00 89

转载 bzoj2653:middle

思路:首先容易想到二分答案,但如何去check呢,对于一段区间[l,r],把所有小于答案的都赋值为-1,大于等于它的都赋值为1,然后求左端点在[a,b],右端点在[c,d]的最大子串和即可(也就是区间[a,b]的最大右子串和加上(b,c)的子串和加上区间[c,d]的最大左子串和)这样既可,用个线段树维护一下,每次暴力重建,单次询问的复杂度是完全可以承受的,但如果多次询问时间复杂度将是n^...

2016-10-28 14:23:00 92

转载 poj2104:K-th Number

思路:可持久化线段树,利用权值线段树,把建树过程看成插入,插入第i个元素就在第i-1棵树的基础上新建结点然后得到第i棵树,那么询问区间[l,r]就是第r棵树上的信息对应减去第l-1棵树上的信息,然后再利用权值线段树的职能找第k大,这里就巧妙地利用了可持久化线段树不修改原来线段树上的信息而是新建结点来更新信息,这样要询问某次操作下的线段树就访问那次操作新建的root就好了,而这里的区间[l...

2016-10-28 12:04:00 69

转载 bzoj1901:Zju2112 Dynamic Rankings

思路:树套树,我写了两种,一种是线段树套splay,线段树维护区间信息,splay维护第k大,一种是树状数组套权值线段树(并不是什么可持久化线段树,只不过是动态开点罢了,为什么网上一大堆题解都是可持久化线段树。。。。。明明可以直接修改的,不过可持久化线段树应该也是可以写的),树状数组维护前缀和,权值线段树维护第k大,利用那道不带修改的裸题的思想即可。#include<ios...

2016-10-28 11:55:00 119

转载 bzoj2679:[Usaco2012 Open]Balanced Cow Subsets

思路:折半搜索,每个数的状态只有三种:不选、选入集合A、选入集合B,然后就暴搜出其中一半,插入hash表,然后再暴搜另一半,在hash表里查找就好了。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cm...

2016-10-28 11:36:00 118

转载 bzoj1014:[JSOI2008]火星人prefix

思路:插入、修改操作是splay的模型,然后询问的话就可以二分答案,然后再用splay去判,关键就在于怎么去判断。可以用字符串hash,splay每个节点维护一个hash域,然后就可以定义一个进制去hash即可二分判断,hash值让其自然溢出即可。#include<iostream>#include<cstdio>#include<cst...

2016-10-28 11:29:00 69

转载 bzoj1009: [HNOI2008]GT考试

思路:设f[i][j]表示前i位后j位与不吉利串前j位相同的方案数,然后f[i][j]+=f[i-1][k]*trans[k][j],trans[k][j]表示串s后k位与不吉利串前k位相同,添加一个字符后后j位与不吉利串前j位相同的方案数,显然这个矩阵是可以用kmp求的,然后因为只能由i转移到i+1,且转移矩阵是一定的,于是可以用矩阵乘法快速幂优化dp即可。#include&l...

2016-10-28 11:23:00 82

转载 bzoj1008: [HNOI2008]越狱

思路:首先所有情况就是m^n,然后不可能发生越狱的情况就是第一个有m种选择,第二个要与第一个不同就是m-1种选择,第三个要与第二个不同也是m-1种选择,然后不可能发生越狱的情况数就是m*(m-1)^(n-1),然后用总方案数减去它即可。#include<iostream>#include<cstdio>#include<cstring>...

2016-10-28 11:10:00 115

转载 bzoj1007:[HNOI2008]水平可见直线

思路:首先按斜率排序,如果斜率相同就取截距最大的,显然截距小的会被覆盖而对答案没有贡献,然后考虑斜率不同的如何统计答案,可以用一个单调栈维护,当前新插入的直线显然斜率是要比当前栈顶斜率要大的,然后如果新插入的直线l[i]与stack[top]的交点在stack[top]与stack[top-1]的交点的右边,那么就不需要退栈直接加进来就好了,否则就要退栈直到条件成立。#inclu...

2016-10-28 11:04:00 96

转载 bzoj3991: [SDOI2015]寻宝游戏

思路:将关键点按dfs序排序,然后显然就是dfs序中相邻的两个点的距离之和加上最后一个点到第一点的距离(YY一下很显然),动态维护就用splay就好了(我是一个不会用set的蒟蒻。。。。。)#include<iostream>#include<cstdio>#include<cstring>#include<algorithm...

2016-10-24 17:16:00 119

转载 bzoj2286: [Sdoi2011]消耗战

思路:建出虚树然后treedp即可,f[i]表示将以i为根的子树与根隔绝的最小代价,f[i]=min(val[i],Σf[son[i]])(val[i]表示将点i与根隔绝的代价),需要注意的是如果i就是关键点那么f[i]=val[i]。#include<iostream>#include<cstdio>#include<cstring>...

2016-10-24 11:51:00 72

转载 bzoj3611: [Heoi2014]大工程

思路:首先因为n的范围很大,考虑建立虚树,就是把大部分的冗余的点去掉然后建立一颗新的树然后再树形dp,具体实现可以考虑用一个栈维护,首先求出每个点的dfn然后按照dfn排序,然后用一个栈维护(栈里存的关键点或关键点之间的lca或关键点lca的lca等等。。。),然后枚举关键点,求出关键点与当前栈顶元素的lca,如果当前栈顶元素就是当前关键点的父亲(也就是他们的lca就是栈顶元素),直接就...

2016-10-24 10:55:00 63

转载 bzoj3631: [JLOI2014]松鼠的新家

思路:首先这道题可以直接裸上树剖。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;#define maxn 300005 int...

2016-10-23 20:00:00 77

转载 bzoj1131: [POI2008]Sta

思路:首先先求出以1为根的答案,然后考虑由i转移到i的儿子的答案的变化,显然以son[i]为根的子树的所有结点的深度都会减一,其余的点的深度都会加一,然后就可以直接O(n)求出所有结点的答案,然后取max更新答案即可。#include<iostream>#include<cstdio>#include<cstring>#incl...

2016-10-23 19:55:00 81

转载 bzoj1231: [Usaco2008 Nov]mixup2 混乱的奶牛

思路:状压dp,设f[i][j]表示当前已经选出的牛的状态为i,最后一头选出的牛为j的方案数。然后注意就是初值不能是f[0][i]=1,因为所有牛本来都可以第一个被选中,然而这样一定初值有些牛可能就无法被第一个选出了,因此应该是f[(1<<i)][i]=1。#include<iostream>#include<cstdio>#i...

2016-10-23 19:51:00 115

转载 bzoj1688: [Usaco2005 Open]Disease Manangement 疾病管理

思路:状压dp,枚举疾病的集合,然后判断一下可行性即可。#include<bits/stdc++.h>using namespace std;#define maxs 400000#define maxn 1900 int n,d,k;int a[maxn],f[maxs],num[maxs];int main(){ sc...

2016-10-23 19:47:00 104

转载 bzoj1072: [SCOI2007]排列perm

思路:状压dp,f[i][j]表示新的排列的状态为i(也就是新的排列已经选了哪些数),然后模d的余数为j的方案数。但考虑到可能有些数会出现多次,假设一个数x出现了cnt[x]次,那么对于一个可行的答案,显然也包含cnt[x]个x,那么这样的答案就会被计算多次,因为如果状态i先加入第一个x再加入第二个x和状态i先加入第二个x再加入第一个x显然是算作两种不同的方案,但其实他们是一样的,但...

2016-10-23 19:44:00 113

转载 bzoj2073: [POI2004]PRZ

思路:看到n十分于是考虑状压dp,先预处理出处于状态s的情况下过桥的时间和重量,然后枚举状态转移即可,f[i]=min(f[i],f[j]+time[i^j])(j∈i)(自称会状压dp结果连枚举非空子集都不会的我。。。。。)顺便普及如何枚举非空子集:for (int j=i;j;j=j&(i-1));j就是i的所有非空子集。#include<iostrea...

2016-10-23 19:33:00 106

转载 Codeforces Round #376 Div.2

A:题意:给定一个由字母表组成的首尾相接的环,环上有一个指针,最初指向字母a,每次可以顺时针或逆时针旋转一格,例如a顺时针转到z,逆时针转到b,然后问转出给定字符串最少需要转多少次。思路:模拟。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #in...

2016-10-17 09:07:00 159

转载 bzoj3351:[ioi2009]Regions

思路:首先如果颜色相同直接利用以前的答案即可,可以离线排序或是在线hash,然后考虑怎么快速统计答案。首先如果点a是点b的祖先,那么一定有点b在以点a为根的子树的dfs序区间内的,于是先搞出dfs序。然后如果颜色a的点数很小,颜色b的点数很大,那么可以考虑枚举a的点数,然后对于每一种颜色开个vector记录一下有哪些点是这种颜色,然后按照它们的dfs序排序,就可以用颜色a中的每个...

2016-10-14 17:44:00 108

转载 Codeforces Round #80 Div.1 D

思路:考虑离线操作,以y为关键字排序,对于y相同的一起操作,然后考虑y的范围,当y<=sqrt(n)时,直接O(n)预处理出f[x]表示f[x]+f[x+y]+f[x+2*y]+..+f[x+k*y]的答案,然后这样的y显然不超过sqrt(n)个,复杂度也就是O(n*sqrt(n))的;如果y>sqrt(n),那么这样直接暴力统计答案,因为答案的项数也显然不会超过sqrt(n...

2016-10-14 16:58:00 166

转载 10.13测试

T1:bzoj4711:小奇挖矿题意:喵星系有n个星球,标号为1到n,星球以及星球间的航线形成一棵树。所有星球间的双向航线的长度都为1。小奇要在若干个星球建矿石仓库,设立每个仓库的费用为K。对于未设立矿石仓库的星球,设其到一个仓库的距离为i,则将矿石运回的费用为Di。请你帮它决策最小化费用。思路:设f[i][j]表示以i为根的子树仓库设在j的最小代价,然后设在j的仓库的花费不考虑...

2016-10-13 21:21:00 131

转载 bzoj3202:[Sdoi2013]项链

思路:首先考虑如何求珠子个数,一个珠子由a,b,c三个数组成且属于区间[1,a],并满足gcd(a,b,c)=1。由于要求本质相同,对于a,b,c这样的一个无序的数列且满足gcd(a,b,c)=1,设其总方案数为t1,那么显然本质相同的重复了6次,即(a,b,c),(a,c,b),(b,a,c),(b,c,a),(c,a,b),(c,b,a),所以要将t1/=6,但如果存在两个数相同,这...

2016-10-13 20:10:00 94

转载 bzoj4330:JSOI2012 爱之项链

题目大意:一串项链由n个戒指组成,对于每个戒指,一共有M个点,R种颜色,且旋转后相同的戒指是相同的,然后一串项链又由N个戒指组成,同时要满足相邻的两个戒指不能相同,这串项链上某个位置插入了一个特殊的东西,且如果特殊的东西插入的地方不同,即使戒指都是相同的,这两串项链也是不同的,求一共有多少不同的爱之项链。思路:首先可以求出一共有多少种不同的戒指,又由于有那个特殊的东西,相当于这串项链...

2016-10-12 10:13:00 103

空空如也

空空如也

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

TA关注的人

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