自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HbFS-

Would you like?

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

原创 [Codeforces Gym] 100162A Box Game 博弈+二分图匹配

第一次做交互题,真是留下了心理阴影先说题目,转化一下模型大概是一个n维棋盘博弈,每次只能移动到坐标相邻的点,已经访问过的点不能重复访问先求先手必胜还是必败,然后和计算机交互一道简化很多很多很多的题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2463结论:将初始点拿掉以后,对棋盘黑白染色,若与初始点颜色相反的点个数 >

2016-12-28 17:15:33 628

原创 [acm/icpc2016ChinaFinal][CodeforcesGym101194] Mr. Panda and Strips 暴力+剪枝

神棍剪枝剪过去#include #include #include #define N 1050using namespace std;int F[100*N],a[N],v[N],tr[N],n,ans;inline int rd() { int r; scanf("%d",&r); return r; }inline void ut(int &x,int y) { x =

2016-12-26 17:37:27 1518

原创 [acm/icpc2016北京赛区][hihocoder1424] Asa's Chess Problem 有上下界的费用流

将行列分开来考虑对于每一组交换,若对应点同色那么这组交换是没有意义的。我们只考虑两组交换是不同色的建图1、超级源连向所有的行和列,上界=下界=原本处在这一行的点数,费用为0;2、对于每组交换i,j,若i为黑色,那么点i连向j,上界为1下界为0,费用为1;3、所有的行和列连向超级汇,上界和下界为读入的限制,费用为0;可行流判断是否有解,若有解则最小费用即答案

2016-12-26 14:21:12 1152

原创 [ZOJ2314]/[SGU194] Reactor Cooling 无源汇有上下界网络流

若一个图是合法的,那么除了超级源和超级汇以外的所有的点的入度流量=出度流量 新建超级源S,超级汇T 对于每一条边a,b,l,r,若将流量变为0,r-l,那么a点的出度流量减少了l,b的入度流量减少了l。那我们加入边#include <iostream>#include <cstdio>#include <cstring>#include <queue>#define N 450#def

2016-12-24 14:15:59 294

原创 [acm/icpc2016香港赛区][Kattis] Slim Cut 支持撤销的动态规划(?)

将边权从大到小排序,若一条边属于两个并查集,则看剩下的并查集划分成两个集合的中小集合最大是多少,用这两个东西来更新答案。在同一个并查集里的点集不能被划分到两个集合中至于判断划分成两个集合的中小集合最大是多少,如果用一个朴素的背包动态规划F[i]表示能不能凑到价值为i,那么单次操作是n^2的,总时间代价n^3,显然超时。考虑任意两个相邻的动态规划,都是将两个元素合并成一个元素。但是上

2016-12-21 22:58:36 1090

原创 [Codeforces div1] Round 739C. Alyona and towers 线段树+差分数组

这题应当有很多做法拿到题目以后有很多想法,光是不同的线段树就有两三种,而且我觉得分块卡一卡也是能卡过去的。最后写了最简单的方法,代码比起其它的解法都短很多。考虑查分后的数组,原问题变可以转化成求最长的一段正数后紧接一段负数的长度。若用折线将这串数字连接起来,那么每一段“合唱队形”数便可以表示成两个波谷之间的距离。线段树维护所有的波谷,维护最大的两个波谷之间的距离。修

2016-12-20 19:35:57 553 2

原创 [Codeforces Gym] 100162B Circle of Stones 结论+Hash

首先考虑链上的情况:假设存在一条链且任意相邻两位都不相同,那么不存在长度为l的合法链的充分必要条件是所有相距为l的字符都相同。若所有相距为l的字符串的字符都相同的充分必要条件是字符串s1和字符串s2完全相同。字符哈希判断即可。环上:三倍长拆环,每次寻找一条任意相邻两位都不相同的链,按照上面结论哈希即可。Notice:1、本题不需要开模数大小的数组,所以模数可以取

2016-12-19 19:45:18 598

原创 [BZOJ1483] [HNOI2009]梦幻布丁 链表启发式合并

**填了昨晚BC的坑 链表的启发式合并 合并两个链表的时间代价如果是O(l1长度)或O(l2长度)的时候选择较短的那个长度。若l1>l2,则新链表长度显然大于两倍l2。 对于任意一个元素,若合并的时候对他进行了操作,那么该元素所在链表的长度至少翻了一倍,也就是说对这个元素我们最多进行logN次操作,它就会出现在最长的链表之中。 利用这个特性,在这个题目中,把所有颜色相

2016-12-18 14:37:08 372

原创 [HDU5996] [BestCoder Round #90] dingyeye loves stone nim游戏

一道nim游戏题目(好像叫阶梯博弈?) 深度为偶数的点扔掉,深度为奇数的点xor起来看是不是0#include <iostream>#include <cstdio>#define N 200050using namespace std;int n,fa[N],dep[N];void solve() { scanf("%d",&n); for (int i=1;i<=n-1;

2016-12-18 12:08:42 270

原创 [HDU5997] [BestCoder Round #90] rausen loves cakes启发式合并+线段树

诶手速慢了一两秒钟没了rank1 (为了速度借用了hzwer的板子,自己手写的线段树) 同BZOJ1483梦幻布丁,只是多一个区间l,r的询问 用线段树记录[l,r]区间内有多少个相同的布丁 答案等于qr-ql+1-([ql,qr]上相同的布丁)#include<cstdio>#include<iostream>#include<cstring>#define N 100005#de

2016-12-18 12:06:00 407

原创 [BZOJ1419]Red is good 数学期望动态规划

诶自从经历了今年的联赛已经不是特别怕数学期望dp了F[i][j]表示剩i个红球,j个黑球时候的期望收入F[i][j] = i/(i+j) * F[i-1][j] + j/(i+j) * F[i][j-1]爆空间把一维滚掉就行了#include #include #include #define N 5050using namespace std;typedef

2016-12-17 18:01:49 357

原创 [BZOJ1965][Ahoi2005]SHUFFLE 洗牌 数学公式+乘法逆元

天呐太弱啦 首先我们很容易就能得到一个公式 若i为偶数,F[i]=G[i/2]F[i] = G[i/2] 否则,F[i]=G[(n+i+1)/2]F[i] = G[(n+i+1)/2]观察可得,i在下一轮洗牌的位置可以表示为 (2×i)mod(n+1) (2 \times i) mod (n+1) 设答案为x,则有方程 x×2m≡l x \times 2

2016-12-17 17:24:13 413

原创 [BZOJ1485][HNOI2009]有趣的数列 catalan数

和老黄人一起切的这道题打个表,然后发现是Catalan数答案就是Catalan数第n位注意需要特殊的技巧防止超时#include #include #include #include #define N 2000050#define tp 2000000using namespace std;typedef long long LL;int F[N],p[N],ys

2016-12-17 15:50:26 369

原创 [Codeforces Gym]100162 H - Temperature 状态压缩dp

G[mask]是一个二进制状态,表示严格取mask这些人的实验结果算平均值的时候,有多少人的答案会被覆盖。F[mask] = G[mask] or F[S1] or F[S2] or F[S3] ... or F[Sn],其中Si为mask的子集这是$ 3^n $转移,显然会超时可以把它优化成,F[mask] = G[mask] or F[P1] or F[P2] ... F[Pn],

2016-12-17 10:02:26 368

原创 [Codeforces Gym] 100162G 爆搜+剪枝

好气啊~在dfs到>r的时候忘记return了,调了好久暴力枚举字符串,记录最长的以当前结尾的后缀等于该字符串的前缀的长度k。若新加的字符c小于a[k]则不合法,若等于a[k]则k++,否则k=0。爆搜剪枝即可。可以证明,最多枚举$ n*m^n $就能出结果#include #include #define INF (1<<30) #define N 35using

2016-12-13 21:40:19 527

原创 [UVALive]7344 数位dp+状态压缩dp

诶写了几天终于写过去了 看了网上无数的模板,发现都不好用,最后还是用了自己的办法写出来 细节多而且复杂状态压缩DP,F[mask]表示mask状态下的答案方案数,G[mask]表示取一个状态为mask的数的方案数 F[S]=∑(G[p]∗F[S异或p]) F[S] = \sum (G[p] * F[S异或p]) 其中p包含了lowbit(S)至于G[]数组怎么求,那就是另外一个数位DP了

2016-12-12 20:25:14 569 2

原创 [UVALive]7338 树链剖分+线段树

诶秒出正解的题目写起来就是爽有一个结论:在生成树上添加一条新边E{a,b,v}使得新图的最小生成树改变,充要条件是E和生成树形成的环中,v不是权值最大的边。对最小生成树进行树链剖分,按树链剖分序建线段树对于第n~m条边E{a,b,v},将a,b路径上的最短边求出来e{a0,b0,v0},v-v0即为该边能减小最多的值,增加最多的值为INF对于前1~n-1条边E{a,b,v}

2016-12-07 19:04:01 549

原创 网络流与线性规划24题

留坑待填最大流模板:#include #include #include #include #include #define N 10050#define INF 1<<30using namespace std;struct Node{int u,cap,rec; };vector e[N];int p[N],S,T;void add_Node(int

2016-12-06 11:55:09 1178

原创 [BZOJ1251]序列终结者 Splay

好累,一天写了三棵树splay区间翻转、区间加法、区间求最大值还是要记得注意边界条件,tr[0] = a[0] = mx[0] = -INF诶下午物理考龊了估计要被老师切死#include #include #include #define ls s[t][0]#define rs s[t][1]#define INF (1<<30)#define N 2

2016-12-05 19:25:41 441

原创 [BZOJ3224]普通平衡树 SPlay

诶一个中午种了两棵树写平衡树之前一定要明确数组的定义,想好每个过程怎么写之后再开始动手写想清楚每个操作返回的是结点的编号还是结点的值诶又是wall编译救了我#include #include #define INF 1<<30#define N 200050using namespace std;int tr[N],siz[N],fa[N],s[N][2];in

2016-12-05 13:58:40 309

原创 [BZOJ3223]文艺平衡树 splay

区间反转模板题好像最后输出换行符会被判错(?)#include #include #include #define N 200050#define INF (1<<30) using namespace std; int siz[N],rev[N],s[N][2],a[N],fa[N],tr[N];int ans[N],n,m,cnt,tot,rt; in

2016-12-05 12:44:43 335

原创 [BZOJ1552]robotic sort SPlay区间翻转

SPlay区间翻转模板题对于翻转区间[L,R],将R+1旋转到根,L-1旋转到根节点的左儿子,此时L-1的右子树便是需要翻转的区间打上标记即可为了防止SPlay一个不存在的节点,可以在头尾加一个空节点(不加也行写起来蛋疼)还不是很清楚SPlay(x)之前是否一定要access(x),感觉一定要先下放标记再操作改了好久最后要了数据才过,发现题目给的读入不是一个全排列诶

2016-12-01 22:20:19 321

空空如也

空空如也

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

TA关注的人

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