bzoj 4069~4071 APIO2015】的更多相关文章

T1 从高到底按位确定答案 A=1时f[i]表示前i个数合法的划分至少需要分出几段,时间复杂度$O(n^2log(ans))$ A>1时f[i][j]表示前i个数划分为j段是否可能合法,转移显然,时间复杂度$O(n^3log(ans)/32)$ #include<cstdio> #include<cstring> #include<bitset> typedef long long i64; int n,A,B; ]; i64 s[],ans=; std::bit…
[Apio2015]巴厘岛的雕塑 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 494  Solved: 238[Submit][Status][Discuss] Description 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 1 到 N 连续地进行标号,其中第 i 座雕塑的年龄是 Yi 年.为了使这条路的环境更加优美,政府想把这些雕塑分成若干组,并通过在组与组之间…
自己首先想了一种方法$f(i)$表示前$i$个最小值为多少. 然而发现位运算并不满足局部最优性. 然后我们可以从高到低贪心的判断,使得每一组的和在一个特定的范围之内. 还要特判最后一个Subtask, 想了想不用特判的办法,觉得bitset压不过去,就没写. #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include…
用权值线段树会容易一些并快一些,但是想复健一下splay所以打了splay 然后果然不会打了. 解题思路: 首先把家和办公室在同一侧的提出来直接加进答案里: 对于k=1,直接选所有办公室和家的中位数即可,因为显然如果选的点两边的办公室和家的点不一样多的话,显然可以向多的一侧移动来使得总路程减少: 对于k=2,所有人按家和办公室的中点排序,然后显然有一个断点,左边的人走左边的桥,右边的人走右边的桥.因为选择距离中点近的桥一定不会变差.然后枚举这个断点,先从左到右依次加进去,每次加完之后把当前在sp…
居然要对不同的数据写不同的dp= = 首先记得开long long,<<的时候要写成1ll<<bt 根据or的性质,总体思路是从大到小枚举答案的每一位,看是否能为0. 首先对于A=1的情况,因为没有最小值限制,所以设f[i]为到i为止,当前位能为0的最小长度.判断f[n]是否小于等于B即可.注意保证当前位为0的前提下也要保证之前枚举的位不变.时间复杂度是\( O(nlog_2nlog_2ans) \) 对于其他情况(n<=100),设f[i][j]表示枚举到i为止已经分了j段…
Description 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B. 每一块区域沿着河岸都建了恰好 1000000001 栋的建筑,每条岸边的建筑都从 0 编号到 1000000000.相邻的每对建筑相隔 1 个单位距离,河的宽度也是 1 个单位长度.区域 A 中的 i 号建筑物恰好与区域 B 中的 i 号建筑物隔河相对. 城市中有 N 个居民.第 i 个居民的房子在区域 Pi 的 Si 号建筑上,同时他的办公室坐落在 Qi 区域的 Ti 号建筑上.一个居民的房子和办公…
巴厘岛的雕塑 题解: 题意是要求分组使每组的和按位取或的值最小 那么考虑贪心,尽量使高位为0 于是枚举位置,从最高位枚举 假设当前枚举到第l位. 令 f[i][j] 表示前 i 个数分成 j 组,满足前l - 1位的最优答案,当前这一位能否填0 则 f[i][j] = true 当且仅当存在 k 满足 f[k][j - 1] = true 且 (sum[i] - sum[k]) | ans == ans 且 ((sum[i] - sum[k]) >> (l - 1)) & 1 == 0…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
http://www.lydsy.com/JudgeOnline/problem.php?id=4069 a!=1: 从高位到低位一位一位的算 记录下哪些位必须为0 dp[i][j] 表示前i个数分为j组,这一位为0,且满足之前必须为0的位也是0 是否可行 枚举k,表示k+1~i分为一组 若k+1~i的和满足 必须为0的位是0,且dp[k][j-1] 为true 则dp[i][j]为true a=1: 从高位到低位一位一位的算 记录下哪些位必须为0 dp[i] 表示前i个数,这一位为0,且满足之…
Link: BZOJ 4071传送门 Solution: 首先算出能提前算的贡献 $K=1$:肯定选中间的点,小学数学 $K=2$:对于每对$(x,y)$一定选离$(x+y)/2$近的桥 也就是说将$(x,y)$按$(x+y)/2$的值排序后一定恰有一个分割点使得两边选择不同的桥! 考虑如何如何快速枚举所有分割点时的答案: 需要支持插入.删除.求中位数及两边的和,明显选择$Splay$来维护(求和更容易些) 这样先将所有数对加进一个$Splay$,再不断将其中的数移向另一棵$Splay$即可 注…