bzoj 4824: [Cqoi2017]老C的键盘】的更多相关文章

Description 老 C 是个程序员.     作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 Q 也是一个程序员.有一天他悄悄潜入了老 C 的家中,想要看看这个 键盘究竟有何妙处.他发现,这个键盘共有n个按键,这n个按键虽然整齐的排成一列,但是每个键的高度却互不相同 .聪明的小 Q 马上将每个键的高度用 1 ~ n 的整数表示了出来,得到一个 1 ~ n 的排列 h1, h2,..., h…
每一个限制条件相当于一条有向边, 忽略边的方向,就成了一道裸的树形DP题 同BZOJ3167 唯一的区别就是这个$O(n^3)$能过 #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std…
参考:https://www.cnblogs.com/FallDream/p/bzoj4824.html 画一画就会发现关系形成了一棵二叉树(其实看到n-1就能想到 然后dp,设f[i][j]为点i在这棵子树中排名为j,然后组合数乘着转移 这里有一个前缀和优化,返回父亲时,f为前缀和,g为后缀和,便于父节点的转移 #include<iostream> #include<cstdio> using namespace std; const int N=105,mod=1e9+7; i…
4824: [Cqoi2017]老C的键盘 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 218  Solved: 171[Submit][Status][Discuss] Description 老 C 是个程序员.     作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 Q 也是一个程序员.有一天他悄悄潜入了老 C 的家中,想要看看这个 键盘究…
4824: [Cqoi2017]老C的键盘 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 193  Solved: 149[Submit][Status][Discuss] Description 老 C 是个程序员.     作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 Q 也是一个程序员.有一天他悄悄潜入了老 C 的家中,想要看看这个 键盘究…
[CQOI2017]老C的键盘 题目描述 额,网上题解好像都是用的一大堆组合数,然而我懒得推公式. 设\(f[i][j]\)表示以\(i\)为根,且\(i\)的权值为\(j\)的方案数. 转移: \[ f[i][j]=\sum f[sn_1][k]*f[sn_2][q] \] 需要判断一下\(k,q\)与\(j\)的关系满不满足题意就行了. 但是这样的答案显然不对,因为有些权值可能多次出现. 换句话说,有些权值可能没有出现.所以我们就用那个经典的容斥,枚举颜色数上界. 设\(g[s]\)表示颜色…
4822: [Cqoi2017]老C的任务 练手速... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; const int N = 1e6+5; inline int read() { char c=getchar(); int x=0,f=1; while(c&l…
4823: [Cqoi2017]老C的方块 题意: 鬼畜方块游戏不解释... 有些特殊边,有些四个方块组成的图形,方块有代价,删掉一些方块使得没有图形,最小化代价. 比较明显的最小割,一个图形中必须删掉一个方块. 我的想法是方块拆点然后用INF连起来. 但是你不能随便连啊,否则可能会出现一些原来没有的限制. 要找到一个连边的顺序!也就是如何分层 画一画发现是可以做到的,然后建图就行了. 我是一层一层建的... 然后一开始忘记考虑一种图形WA了两次... 总共花了3个多小时... #include…
来自FallDream的博客,未经允许,请勿转载,谢谢. 老 C 是个程序员.     作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序在某种神奇力量的驱使之下跑得非常快.小 Q 也是一个程序员.有一天他悄悄潜入了老 C 的家中,想要看看这个键盘究竟有何妙处.他发现,这个键盘共有n个按键,这n个按键虽然整齐的排成一列,但是每个键的高度却互不相同.聪明的小 Q 马上将每个键的高度用 1 ~ n 的整数表示了出来,得到一个 1 ~ n 的排列…
Description 老 C 是个程序员. 作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 Q 也是一个程序员.有一天他悄悄潜入了老 C 的家中,想要看看这个 键盘究竟有何妙处.他发现,这个键盘共有n个按键,这n个按键虽然整齐的排成一列,但是每个键的高度却互不相同 .聪明的小 Q 马上将每个键的高度用 1 ~ n 的整数表示了出来,得到一个 1 ~ n 的排列 h1, h2,..., hn .为…
题目描述 老C的键盘 题解 显然对于每个数 x 都有唯一对应的 \(x/2\) , 然而对于每个数 x 却可以成为 \(x*2\) 和 \(x*2+1\) 的对应数 根据这一特性想到了啥??? 感谢leo101的友情点拨 二叉树!!! 所以可以把 x/2 看做是 x的父亲, 1 显然就是根 可以把 < 看作是由父亲连向儿子的有向边, > 看作是儿子连向父亲的有向边 所以就是求这棵树的拓扑序的方案数就好了!!! 考虑当前节点的两棵子树都已处理完的时候 在满足和 当前节点的关系的同时, 两颗子树在…
[BZOJ3167][Heoi2013]Sao Description WelcometoSAO(StrangeandAbnormalOnline).这是一个VRMMORPG,含有n个关卡.但是,挑战不同关卡的顺序是一个很大的问题.有n–1个对于挑战关卡的限制,诸如第i个关卡必须在第j个关卡前挑战,或者完成了第k个关卡才能挑战第l个关卡.并且,如果不考虑限制的方向性,那么在这n–1个限制的情况下,任何两个关卡都存在某种程度的关联性.即,我们不能把所有关卡分成两个非空且不相交的子集,使得这两个子集…
题链: https://www.luogu.org/problemnew/show/P3755 (洛谷上数据范围给全了的) 题解: 树状数组,离线询问 (本来想弄一个二维树状数组/二维RMQ,然后直接查询,但是空间不够用.)做法如下,可以考虑把每个询问拆为四个, 即:四个二维前缀和.然后把"拆过的询问操作"和"基站插入操作"排序,排序规则:若 x 不同时,x 小的排在前面,                否则 y 不同时,y 小的排在前面,             …
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4823 一个不合法方案其实就是蓝线的两边格子一定选.剩下两部分四相邻格子里各选一个. 所以这个图是一个四分图.记蓝线左边格子是1,右边是2,与 1 四相邻的是3,与 2 四相邻的是4:这个部分右边就是蓝线左边是2.右边是1,这样. 有一些“4个格子不能同时选”的限制,考虑怎么在图中表示. 需要做到的是4个格子里割掉一个就能让这条路径废掉,那么应该是把有联系的4个点连成一条链.因为是4分图,所…
题面 luogu 题解 其实就是一颗二叉树 我们假设左儿子小于根,右儿子大于根 考虑树形\(dp\) \(f[u][i]\)表示以\(u\)为根的子树,\(u\)为第\(i\)小 那么考虑子树合并 其实就是两个序列的合并 如果是左子树 枚举\(j\)为子树内有多少个数小于其根 那么以\(i\)为根的子树一定至少有\(j\)个 那么我们换一下枚举的东西 改成枚举有多少个数小于\(u\) 剩下的问题就是分配权值的问题了 组合数计算一下(具体看代码注释) Code #include<bits/stdc…
前者是后者各方面的强化版. 容易想到设f[i][j]表示i子树中第j小的是i的方案数(即只考虑相对关系).比较麻烦的在于转移.考虑逐个合并子树.容易想到枚举根原来的排名和子树根原来的排名,算一发组合数.具体要考虑的是当前有n个0.m个1,将他们排成一排,要求其中第x个0在k号位,第y个1在k号位的右边(1表示要合并上去的子树中的节点,对应父亲<儿子的情况).那么显然当y>k-x时存在方案,且方案数为C(k-1,x-1)·C(n+m-k,n-x).父亲>儿子的情况类似.直接算就是O(n3)…
建议大家还是不要阅读此文了,因为我觉得这题我的解法实在是又不高效又不优美……只是想要记录一下,毕竟是除了中国象棋之外自己做出的组合dp第一题~ 首先如果做题做得多,比较熟练的话,应该能一眼看出这题所给的信息正好描述的是一棵二叉树上父子的大小关系.于是确立一个状态 \(f[u][i]\) 表示在 \(u\)  及 \(u\) 的子树内 \(u\) 排名第 i 名的总方案数.(这个状态应该还是比较好想,我当时想到这个状态觉得是可做的就坚持了这个状态).那么就考虑如何通过 \(f[ch1][j], f…
分析: 我觉得我的网络流白学了...QAQ... 其实数据范围本是无法用网络流跑过去的,然而出题者想让他跑过去,也就跑过去了... 看到题目其实感觉很麻烦,不知道从哪里入手,那么仔细观察所给出的有用信息... 我们考虑网格图是一个含有挡板的图,这个挡板的分布很有规律,大概是每一行的相邻两个挡板都隔了四个格子,并且奇数行的排列相同,偶数行的排列相同... 然后考虑不合法的方块形状有什么共同点:仔细观察就会发现,所有的不合法图形中,挡板的左边至少有一个格子,右边至少有一个格子,并且左边的格子连着一个…
题目链接 BZOJ4824 题解 观察出题目中的关系实际上是完全二叉树的父子关系 我们设\(f[i][j]\)为以\(i\)为根的节点在其子树中排名为\(j\)的方案数 转移时,枚举左右子树分别有几个节点比\(i\)小,进行转移 乍一看是\(O(n^3)\)的,但其复杂度分析和某一题很像 就是在根处枚举两个子树大小,实质上就等于枚举任意两点\(lca\),是\(O(n^2)\)的 #include<algorithm> #include<iostream> #include<…
传送门 首先可以直接把整个序列建成一个完全二叉树的结构,这个应该都看得出来 然后考虑树形dp,以大于为例 设$f[i][j]$表示$i$这个节点在子树中排名第$j$位时的总方案数(因为实际只与相对大小有关,与实际数值无关) 我们考虑如果从当前子树中弄出$k$个节点,其他子树中弄出$j-1$个节点,那么当前节点的大小排名就是$k+j$ 然后考虑一下,如果我们不看这个子树,根节点排在第$j$个,方案数是$f[i][j]$,如果只看此子树,此子树的根就是根节点的儿子,它在此子树中的排名可能是$1,2,…
lrd的题解:http://www.cnblogs.com/liu-runda/p/6695139.html 我还是太菜了.以后遇到这种题目应该分析分析性质的. 网络流复杂度真是$O(玄学)$ #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <alg…
直接离散化之后用树状数组扫一遍. 把每一个询问拆成四个就可以做了. %Silvernebula 怒写KD-Tree #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define…
一个树状数组能解决的问题分要用树套树--还写错了我别是个傻子吧? 这种题还是挺多的,大概就是把每个矩形询问差分拆成四个点前缀和相加的形式(x1-1,y1-1,1)(x2.y2,1)(x1-1,y2,-1)(x2,y1-1,-1),然后离散化,打上id丢去按x排序,点也按x排序. 然后按照x扫描,树状数组维护到当前x坐行标前缀和的y,每次先把坐标等于x的点加进树状数组,然后查询乘上相应权值(+-1)加到相应id的ans数组里 #include<iostream> #include<cstd…
参考:https://www.cnblogs.com/neighthorn/p/6705785.html 并不是黑白染色而是三色染色(还有四色的,不过是一个意思 仔细观察一下不合法情况,可以发现都是特殊边两边有格子并且两个黑格子都在的时候黄蓝不能同在,所以(黄---黑)(黑---蓝)(黑---黑)都是最大权闭合子图中的依赖边 直接按照模型建就行,把黄蓝当成黑白染色. --但是为什么不能用struct代替map呢QAQ #include<iostream> #include<cstdio&…
老C的任务 题目大意: 维护一个二维平面,初始给出一些点及其权.多次询问某个矩形内的权和. n,m <= 100000 题解: 签到题. CDQ水一水. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; inline void read(int &x){ x=0;static char ch;static…
[BZOJ4822][CQOI2017]老C的任务(扫描线) 题面 BZOJ 洛谷 题解 没有修改操作,都不需要分治了... 直接排序之后扫描线算贡献就好了... 不知道为啥洛谷上过不了... #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<ve…
[BZOJ4823][CQOI2017]老C的方块(网络流) 题面 BZOJ 题解 首先还是给棋盘进行黑白染色,然后对于特殊边左右两侧的格子单独拎出来考虑. 为了和其他格子区分,我们把两侧的这两个格子染成灰色. 于是一个不合法的状态就是两个相邻的灰色点如果还和一个其他的点相连就是非法的. 我们先把黑白点分开,源点连向黑点,汇点连向白点,边权是删去这个点的代价. 因为灰点可以两两配对,非两两配对之间的没有影响,然后所有黑点连向对应的灰点,另一半灰点连向对应的白点.而要删去一组不合法的要么删去一个灰…
4822: [Cqoi2017]老C的任务 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 379  Solved: 203[Submit][Status][Discuss] Description 老 C 是个程序员.     最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统.作为经验丰富的程序员,老 C 轻松 地完成了系统的大部分功能,并把其中一个功能交给你来实现.由于一个基站的面积相对于整个城市面积来说非常 的小,因此每…
4823: [Cqoi2017]老C的方块 题目:传送门 题解: 毒瘤题ORZ.... 太菜了看出来是最小割啥边都不会建...狂%大佬强强强   黑白染色?不!是四个色一起染,四层图跑最小割... 很惊奇的发现染完色之后只要是不喜欢的图形都一定可以由黄-->黑-->红-->绿 组成 那就很nice啦...兴高采烈的去敲代码...结果10^5*10^5???搞毛线...太弱了ORZ,又看了一波大佬的操作,用map存! woc...不谈了不谈了...撸撸撸(分情况分到想屎...虽然不多) 注…
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色之后,任意满足要求的四联通块一定可以是 黑色-->紫左-->紫右-->白色 只要破坏三个箭头中的一个即可 所以可以构建最小割模型 1.源点向黑色格连流量为格子代价的边 2.黑色格向相邻的紫色格连inf边 3.与黑色格相邻的紫色格向与白色格相邻的紫色格连 流量 为 两个紫色格较小代价 的边 4…