csp-s模拟测试112 & csp-s模拟测试113
考前两天模拟。
Day1直接炸飞,T1浪费的时间太长,对拍+调试了一个多小时但复杂度还不能过,最后5分钟想出来了解决方案但是已经打不出来了。T2读入出了事故RE0。T3打了假贪心。
Day2心态几乎也是爆炸。T1做了一个小时,也没法对拍。T2调试了一个小时后发现算法伪了,瞬间崩溃。犹豫了一会去打T3,一看T3不好打,暴力也难,又回过头考虑T2,试图基环树dp。终于最后发现在环上贪心就行了不用dp,然后T2过了对拍就只剩不到20分钟了。T3 dfs难打,想骗分,最后也没骗到。
D1T1:
首先一个贪心思路:每次给三种颜色的气球排序,从最多的气球出$2$个,次多的出$1$个装饰一张桌子,最终特判$(1,1,1)$。暴力来是$O(N)$的。考虑优化(其实随便构造的)。先取三种气球数量$min$值,即用$(1,1,1)$装饰,把剩下两色气球充分利用(具体需要大力讨论,比较麻烦),最后使得只剩为$(1,1,0)$或$(x,0,0)$的情况(前者无贡献),用最后的$x$与$min$个$(1,1,1)$再凑$(1,2,0)$的情况,这样构造了最优解。复杂度$O(1)$。
D1T2:
有向图判环。实际考点:换行符linux下'\n',windows下'\r\n'。其实读入时判getchar()!=' '就可以了。
D1T3:
考虑每一个分部的贡献。设一个任务由$cnt$个分部接管,对于每个分部,从自己到总部共$cnt-1$次,从其他部到自己共$cnt-1$次,所以一个任务的总贡献为$(cnt-1)*\sum (dis[0][i]+dis[1][i])$,那么问题转化为:集合权值为总和$\times$大小,划分集合,使得集合权值和最小。对$dis[0][i]+dis[1][i]$从小到大排序,那么选一段连续区间一定最优。就有$dp:f[i][j]$表示第i个集合划分到了$j$处的最小费用。转移:$f[i][j]=f[i-1][k]+(j-k-1)*sum(k+1,j),k<j$。是$O(N^3)$的。但是考虑每一个集合前有一个系数,这个系数越大,后面的值应小一些才优。所以最终的集合划分一定是:$(dis[0]+dis[1])$越小的一段越长。我们已经排序,所以越靠前的集合越长。所以从上一层转移,上界$k$*段数应小于$j$,这样转移一层是$\sum \limits_{i=1}^N \frac{N}{i}$的,是$N \ln N$,总复杂度$O(N^2 \ln N)$。
D2T1:
面积一定,越圆的东西一定周长越小(应该是个事实吧)。正六边形是面积一定时最优的。任意一种方案都可以调整为六边形。先找到能围住$N$的最小正六边形,二分边长检验$3N*(N+1)+1>=N$,当然手解不等式应该可以$O(1)$。然后缩小正六边形,墙缩小一,容积缩小$len+1$(第一次缩),$len$(再缩),然后卡住$N$就行。$O(\log N)$。
D2T2:
对每一个商品向它的$f[i]$连边,边权为$d[f[i]]-c[i]$,如果为负就不连(稳亏不赚)。变成几个联通块,是基环树或树。对于树上的点,他自己的数量一定是全部被最大边的一头购买最优(它的贡献只能通过被弹出来实现)。而且对于树上的点,一定可以按拓扑序,所以不用考虑顺序。对于环上的点,由于购买一件物品时先检验本品是否为空所以我们先不买断,都留一个。最后考虑一下,如果没有树边,环上的点最终一定剩下一个不被弹出,但有树边的话还可以弹出。那么在环上枚举最后(将)被弹出的点,每一种方案的贡献为换上点贡献之和-这个点的贡献+(如果这个点连了树边)这个点被树上点弹出的最大贡献。枚举复杂度是边数$O(N)$的。
D2T3:
暴力做法:枚举子串$p$,$dfs$不断消去子串,直到最后为空。这样用$string$比$char[]$方便,但我并不太会$string$。趁此机会学了一下。
正解是$dp$。同样枚举$p$串,然后区间$dp$判断。$f[i][j]$表示$s$串$[i,j]$区间能否匹配p,匹配定义为:能消完,或者消到最后剩下$p$的前缀。转移分为两种:添一个字符,添一整$p$串。仅第一种是不全的,因为无法处理$p$串插入在中间的情况,所以还要整串转移一下。总复杂度$O(N^4)$?(我并没有记忆化所以较慢,但其实很难到上界)。
此外调试时注意到了三目运算符$:$的两边必须是严格相同类型的,左$void()$,右边也必须是,有时候不一样了编译不报错但会RE非常难受。
csp-s模拟测试112 & csp-s模拟测试113的更多相关文章
- Gremlins.js – 模拟用户随机操作的 JS 测试库
Gremlins.js 是基于 JavaScript 编写的 Monkey 测试库,支持 Node.js 平台和浏览器中使用.Gremlins.js 随机模拟用户操作:单击窗口中的任意位置,在表格中输 ...
- .net单元测试——常用测试方式(异常模拟、返回值测试、参数测试、数据库访问代码测试)
最近在看.net单元测试艺术,我也喜欢单元测试,今天介绍一下如何测试异常.如何测试返回值.如何测试模拟对象的参数传递.如何测试数据库访问代码.单元测试框架使用的是NUnit,模拟框架使用的是:Rhin ...
- 在线HTTP POST/GET模拟请求api接口http请求测试工具https://post.jsonin.com/
在线HTTP POST/GET模拟请求api接口http请求测试工具 在线POST/GET接口测试工具https://post.jsonin.com/ Json在线解析及格式化校验工具 https:/ ...
- Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率
测试 目前主流的就bdd和tdd,自己查一下差异 推荐 mocha和tape 另外Jasmine也挺有名,angularjs用它,不过挺麻烦的,还有一个选择是qunit,最初是为jquery测试写的, ...
- 专访|HPE测试中心总监徐盛:测试新思维-DevOps,持续测试,更敏捷,更快速
2016年7月22日,「HPE&msup软件技术开放日」将在上海浦东新区,张江高科技园区纳贤路799号科荣大厦小楼2楼举办,msup携手HPE揭秘全球测试中心背后的12条技术实践. 徐盛:HP ...
- APP测试基本流程以及APP测试要点
APP测试流程梳理 APP测试要点梳理 链接:http://pan.baidu.com/s/1gfaEZ1x 密码:07yt 1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开 ...
- Visual Studio进行负载测试,RIG和负载测试术语- Part II
对于一个多用户的应用程序,性能是非常重要的.性能不仅是执行的速度,它包括负载和并发方面.Visual Studio是可以用于性能测试的工具之一.Visual Studio Test版或Visual S ...
- Monkey (压力测试)-移动端手机压力测试工具 monkey以及monkeyrunner
4. Monkey (压力测试) 这个是Android提供的系统工具.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试.Monkey测试是一种 ...
- 测试者出的APP测试面试题
测试者出的APP测试面试题 一.开场问题:(自由发挥) 1.请自我介绍一下: 2.为什么离开上一个公司呢? 3.做测试多久了?以前做过哪些项目?你们以前测试的流程是怎样的?用过哪些测试工具? 4.你觉 ...
- 渗透测试流程——渗透测试的9个步骤(转)
目录 明确目标 分析风险,获得授权 信息收集 漏洞探测(手动&自动) 漏洞验证 信息分析 利用漏洞,获取数据 信息整理 形成报告 1.明确目标 1)确定范围:测试的范围,如:IP.域名.内外网 ...
随机推荐
- 适配方案(七)iPhone各种系统分辨率、屏幕分辨率
- HashSet和CopyOnWriteArraySet(转载)
前言 这篇文章的目的如下: HashSet是如何保证元素的不重复和无序 HashSet的增删(改查?)原理 CopyOnWriteArraySet支持并发的原理 CopyOnWriteArraySet ...
- sqlyog 如何导出建表语句
真傻了,这个问题弄了半天. 解决 点击表名后,在右侧的信息栏里面有啊: PS - 个人博客链接:sqlyog 如何导出建表语句
- MySQL 查询大于“时间字段”15分钟、1小时、1天的数据
以下代码中times为时间字段,类型为datetime 1.查询大于times十五分钟的数据 //大于号后面都是获取times十五分钟后的时间select*from table where now() ...
- 【问题】Difference between ">/dev/null 2>&1" and "2>&1 >/dev/null"
https://www.unix.com/shell-programming-and-scripting/125947-difference-between-dev-null-2-1-2-1-dev- ...
- PAT Basic 1070 结绳 (25 分)
给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连.每次串连后,原来两段绳子的长度 ...
- 当前form窗体随系统屏幕变化
private void 新建_Load(object sender, EventArgs e) { int DeskWidth = Screen.PrimaryScreen.WorkingArea. ...
- tensorflow几个常见错误
错误一:二分类,标签y ValueError: Cannot feed value of shape (128,1) for Tensor u'input_y_2:0', which has shap ...
- ndk学习之C语言基础复习----指针、函数、预处理器
指针: 指针乃C.C++的灵魂之所在,所以有必要好好的复习复习.什么是指针?一句话来概括:“指针是一个变量,它的值是一个地址.”,其中指针变量的声明有如下三种形式: 其中第一种是被推荐的写法. 其中还 ...
- Java abstract类的基本使用 和 [abstract类实现]打印1000以内的所有素数并输出时间
笔记: /** 关键字abstract ,实现抽象类,相当于给出类的大纲,子类只管继承,但抽象类不可被实例化! * 1.抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写所有的抽 ...