NOI2017
整数(线段树)
不难想到按位处理,位数比较多考虑使用动态开点线段树维护大数,那么复杂度是\(O(nlog^2n)\)的,不够优秀。
但注意到我们需要支持的是二进制下的加减法,而在二进制下我们可以使用int压位来节约时空,于是使用unsigned int压32位,再用线段树维护。这样每一次加减都只会影响到最多两个位置,复杂度可以降为\(O(nlogn)\)。线段树需要支持单点查询、区间查询是否全\(0\)或全\(1\)(这是为了在进退位的时候二分出进退位的影响范围)、区间覆盖。直接做就可以了。
蚯蚓排队(哈希)
\(7.5 \times 10^8\)过\(2s\) emmm
因为每一次询问的串长不会超过\(50\),所以我们考虑在拼接和分离的时候动态维护长度为\(1\)到\(50\)的所有串。
因为每一次拼接和分离都只会加入/删除个数为\(k^2\)级别的串,所以暴力维护一下它们的Hash值,每一次询问的时候也暴力搞出每一个子串的Hash值,然后在哈希表上查一下。
复杂度\(O(k^2m)\)。卡常方法:哈希表手写、链表手写、自然溢出、\(seed=19491001\)……
泳池(概率、DP、线性递推)
首先恰好为\(k\)可以转化为\(\leq k\)的概率-\(\leq k - 1\)的概率。
设\(f_i\)表示宽度为\(i\)、底部最右边第\(i\)个点一定被ban、最大的无ban块矩形\(\leq k\)的概率,枚举底部从右往左第二个被ban的块,有\(f_0 = 1 , f_i = (1-q)\sum\limits_{j=1}^{\min\{k , i\}} f_{i-j} p_{j-1}\),其中\(p_{j-1}\)是宽度为\(j\)、底部没有被ban的块、最大无\(ban\)块矩形\(\leq k\)的概率。这样\(\leq k\)的概率就是\(\frac{f_{n+1}}{1-q}\),因为第\(n+1\)列的被ban的块的概率要除掉。
注意到上面是一个线性递推,只需求出\(p_1,...,p_k\)就可以\(O(k^2logn)\)或者\(O(klogklogn)\)地求解。
求\(p_i\)考虑一个DP:设\(dp_{i,j}\)表示对于一个宽度为\(i\)的矩形,其底部\(j\)行不存在ban块,第\(j+1\)行一定存在ban块,最大无ban块\(\leq k\)的概率。那么\(p_i = \sum\limits_{j=1}^{+\infty} dp_{i,j}\)。
\(dp\)数组转移枚举从左往右第一个ban块在第几列,有\(dp_{i,j} = q^j(1-q) \sum\limits_{k=1}^i (\sum\limits_{l > j} dp_{k-1,l}) (\sum\limits_{l \geq j}dp_{i-k , l})\),边界为\(dp_{0,x} = 1 , x \in [1 , k]\)。有效的\(dp_{i,j}\)会满足\(ij \leq k\),所以有效位置是\(O(klogk)\)级别的,故上面转移可以后缀和优化至\(O(k^2logk)\),(或许?)可以FFT优化到\(O(klog^2k)\)。
但是似乎这道题强上多项式和暴力没什么特别大的区别
游戏(2-SAT)
第一眼看上去似乎是一个3-SAT问题,然而\(d \leq 8\)给我们的信息就是暴力枚举。枚举\(x\)型地图变成\(a\)型地图还是\(b\)型地图(实际上不要枚举\(c\),因为\(ab\)两种地图已经包含了选择\(ABC\)三辆车的情况),对于每一种情况跑2-SAT。复杂度\(O(2^d(n+m))\)
然后需要用一些玄学的随机和疯狂叉人的test12345看不懂的2-SAT写法
蔬菜(贪心、并查集)
使用增量法求解答案,即每一次增加一天然后考虑新增加的蔬菜的最大价值,因为之前被加入到售卖行列的蔬菜在天数增加之后也一定会在售卖行列里。考虑现在正在做有\(i\)天的最大收益。
首先,一个价值更高的蔬菜肯定会优先被安排位置。所以我们把所有蔬菜全部丢到一个堆里面,对于\(s_i\),我们从每一种蔬菜中单独拿出一个蔬菜,特殊处理一下它的腐坏时间,也作为一个对象放到堆里。每一次我们从堆顶取出价值最大的蔬菜看它是否有位置。安排\(m\)个蔬菜进入到售卖行列或者堆为空时就完成了一次增量。
对于一个蔬菜,为了给之后的蔬菜腾出位置,肯定安排在越后面越好。我们算出这种蔬菜最后能安排在哪天(要跟\(10^5\)取min),我们要求的就是这一天前距离这一天最近且蔬菜没有被安排满的天是哪一天。可以使用并查集完成:每当某一天的蔬菜被安排满了之后就把它的父亲指向前一天,那么当前点的并查集的根就是第一个没有被安排满的天数。
最后,注意到上面的贪心是对于\(10^5\)天而言的,也就是说如果能够安排在第\(10^5\)天就一定会安排在第\(10^5\)天,但是实际上并没有那么多天。但这样的贪心是正确的,考虑:如果某一个蔬菜被安排在了第\(x+1\)天,而第\(x\)天的蔬菜没有满,那么放在第\(x\)天也是可行的。因为蔬菜数量一定不会超过\(iM\),所以我们可以把所有蔬菜全部推到前\(i\)天,也就相当于求出了有\(i\)天时的最大收益。
分身术
咕
NOI2017的更多相关文章
- LOJ_2305_「NOI2017」游戏 _2-sat
LOJ_2305_「NOI2017」游戏 _2-sat 题意: 给你一个长度为n的字符串S,其中第i个字符为a表示第i个地图只能用B,C两种赛车,为b表示第i个地图只能用A,C两种赛车,为c表示第i个 ...
- [NOI2017]蔬菜
[NOI2017]蔬菜 题目描述 大意就是有\(n\)种物品,第\(i\)个物品有\(c_i\)个,单价是\(a_i\).然后每天你可以卖出最多\(m\)个物品.每天结束后第\(i\)种物品会减少\( ...
- BZOJ4946[Noi2017]蔬菜——线段树+堆+模拟费用流
题目链接: [Noi2017]蔬菜 题目大意:有$n$种蔬菜,每种蔬菜有$c_{i}$个,每种蔬菜每天有$x_{i}$个单位会坏掉(准确来说每天每种蔬菜坏掉的量是$x_{i}-$当天这种蔬菜卖出量), ...
- [NOI2017]游戏(2-SAT)
这是约半年前写的题解了,就搬过来吧 感觉这是NOI2017最水的一题(当然我还是不会2333),因为是一道裸的2-SAT.我就是看着这道题学的2-SAT 算法一:暴力枚举.对于abc二进制枚举,对于x ...
- 【BZOJ4946】[NOI2017]蔬菜(贪心)
[BZOJ4946][NOI2017]蔬菜(贪心) 题面 BZOJ 洛谷 UOJ 题解 忽然发现今年\(NOI\)之前的时候切往年\(NOI\)的题目,就\(2017\)年的根本不知道怎么下手(一定是 ...
- [NOI2017]泳池——概率DP+线性递推
[NOI2017]泳池 实在没有思路啊~~~ luogu题解 1.差分,转化成至多k的概率减去至多k-1的概率.这样就不用记录“有没有出现k”这个信息了 2.n是1e9,感觉要递推然后利用数列的加速技 ...
- bzoj4946: [Noi2017]蔬菜 神烦贪心
题目链接 bzoj4946: [Noi2017]蔬菜 题解 挺神的贪心 把第次买的蔬菜拆出来,记下每种蔬菜到期的日期,填第一单位蔬菜比其他的要晚 按价格排序后,贪心的往前面可以填的位置填就可以了.找可 ...
- NOI2017 游记
成功在NOI2017退役……现在的我已经是一只退役狗了 结果也一直到了退役,我都还不会半平面交,不会单纯形,不会非旋转版Treap…… FWT我也不熟,分治FFT我也只写过一道板子题 但是现在已经退役 ...
- 【BZOJ4943】【NOI2017】蚯蚓排队(哈希)
[BZOJ4943][NOI2017]蚯蚓排队(哈希) 题面 BZOJ 洛谷 UOJ 题解 记得去年看网络同步赛的时候是一脸懵逼的. 昨天看到\(zsy\)做了,今天就看了看.. 这不是\(Hash\ ...
- 【BZOJ4945】【NOI2017】游戏(搜索,2-sat)
[NOI2017]游戏(搜索,2-sat) 题面 BZOJ的SPJ是假的 兹磁洛谷 题解 如果没有\(x\)地图的影响 这就是一个裸的\(2-sat\)问题 但是现在有不超过\(8\)个\(x\)地图 ...
随机推荐
- 52、Spark Streaming之输入DStream之基础数据源以及基于HDFS的实时wordcount程序
一.概述 1.Socket:之前的wordcount例子,已经演示过了,StreamingContext.socketTextStream() 2.HDFS文件 基于HDFS文件的实时计算,其实就是, ...
- CH定理与线性递推
才发觉自己数学差的要死,而且脑子有点浑浑噩噩的,学了一个晚上才学会 如果说的有什么不对的可以在下面嘲讽曲明 以下无特殊说明时,默认方阵定义在实数域上,用\(|A|\)表示\(A\)的行列式 特征值与特 ...
- [xms]西软xms试算平衡报表-穿透明细报表-增加储值卡卡号列
只能呵呵哒 [xms]西软xms试算平衡报表-穿透明细报表-增加储值卡卡号列 pospay ' and hotelid='${hotelid}'; hhaccount ' and hotelid='$ ...
- sublime 添加到右键菜单
- 微信小程序之页面传参
效果图: 点击编辑值传过去了,那么编辑支出类型这个界面又是如何获取到值呢? 传值代码: type.js editType: function (e) { var typeId = e.currentT ...
- NIO Channel SocketChannel ServerSocketChannel
ServerSocketChannel: ServerSocketChannel是一个基于通道的socket监听器.它同我们所熟悉的java.net.ServerSocket执行相同的基本任务,不过它 ...
- 利用Shell命令与HDFS进行交互
以”./bin/dfs dfs”开头的Shell命令方式 1.目录操作 在HDFS中为hadoop用户创建一个用户目录(hadoop用户) 在用户目录下创建一个input目录, HDFS的根目录下创建 ...
- 转:【微信公众号】微信snsapi_base静默授权与snsapi_userinfo网页授权的实现(不建议使用静默,直接用主动比较方便)
版权声明:本文为CSDN博主「小璐謌」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/qq_37462176/ ...
- C#使用SHA1加密类(RSAFromPkcs8)支持1024位和2048位私钥
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- BackgroundWorkerHelper
public static class BackgroundWorkerHelper { public static void Run(DoWorkEventHandler doWork, RunWo ...