CF div2 994 (A~E)
VP赛时三题,自我感觉发挥不错,唯一不满意的地方在于D题完全没有思路。
A
答案最多为2,因为最坏情况即为先将整个区间合并为一个数,若这个数不是0,则再将这个数变为0。
所以3种情况分类讨论即可:
- 全是0,则不需要操作 -> \(0\)
- 只有一段非\(0\)连续区间 -> \(1\)
- 不止\(1\)个非\(0\)连续区间 -> \(2\)
B
首先,若只出现了一种字符,则一定可行,因为若只出现\(p\),则可令序列为\([1,2,...,n]\);若只出现\(s\)则可令序列为\([n,n-1,...,1]\)。
否则,两种字符一定都有。考虑任意一对\(p,s\):
设形成的前缀\((p)\)为\(1到k1\)的排列,后缀\((s)\)为\(1到k2\)的排列
易得前缀和后缀必然相互包含
所以检查是否有一对不相互包含的前后缀即可,实现不再赘述。
C
构造题
此题赛时的做法分讨得比较麻烦,但好在保证了正确性,还是官方题解的做法比较简洁。但感觉此题复盘的意义不大,故不再赘述。
D
\(dp\)
若没有对每一行循环左移操作,则就是一个普通的走迷宫\(dp\)。
由于每一行最多只会移动\(m - 1\)次,而\(n,m <= 200\),所以可以猜测是一个状态表示为\([行数][列数][对应行的移动次数]\)的\(dp\)。
状态表示:
\(g[i][j][k] :\) 从\((1,1)\)走到\((i,j)\),且第\(i\)行循环移动了\(k\)次,最小花费。
\(f[i][j] :\) 从\((1,1)\)走到\((i,j)\),最小花费。
考虑状态转移(此题重点):
由于每次只会向右或向下移动一格,所以\((i,j)\)的状态只会从\((i-1,j)\)和\((i,j-1)\)转移过来。
但由于引入了可对行循环左移的操作,使得这两种转移的方式并不一样:
1.\((i,j-1)\) -> \((i,j)\) : 由于题目明确要求必须在开始移动之前才能做循环左移操作,故对于行内的转移来说,必须要从当前行移动次数相同的状态转移过来。即:
g[i][j][k] <- g[i][j-1][k] + a[i][j`]
其中\(a[i][j`]\)表示第\(i\)行向左移动了\(k\)次后\((i,j)\)位置的数字
2.\((i-1,j)\) -> \((i,j)\) : 由于只能对行操作,因此行与行之间的转移其实是独立的。即从一行向下移动到另一行时,状态转移与当前行的循环移动次数是无关的。因此:
g[i][j][k] <- f[i-1][j] + k * w + a[i][j`]
而\(f\)的转移即为:
f[i][j] = min(g[i][j][0到m-1])
E
交互 + 二分,个人感觉非常不错的一道题。
首先要想明白一点:由于\(1\)的位置不确定,所以每一次询问的真假性也是不确定的。所以要想办法破掉这个牢笼,让每一次询问的真假性得以确定,从而获得有用信息。
假设这段区间中没有1,即为全\(0\)区间,则我们可以知道,0一定是真的回答,1一定是假的回答,因为所有区间的和均为0。这样区间长度与回答之间就具有了二段性:越长的区间回答越容易假,越短的区间回答越容易真。通过二分,就可以在\(O(logn)\)时间内确定出\(k\)。
所以可以考虑:确定出来\(1\)在哪个子区间内,这样其余的区间就全0了。可以利用上述方法确定\(k\)的值。
具体地,可以确定出\(1\)是在整个序列的前一半还是后一半:即为官方题解的做法,通过询问\(2\)次\(1/4\)长度区间方法确定出了\(1\)的分布,自己确实想不到qwq...
同样,对含有\(1\)的那一半区间再询问\(1\)次,即可以确定出\(k\)与\(n/2\)的大小关系。
这样,就将区间分为了两半:一半全\(0\),一半含有一个\(1\)。
此时又分为两种情况:
- \(k<=n/2\):直接对长度为\(n/2\)的全0区间二分,原理和上面说的一样。
- \(k>n/2\): 由于全\(0\)区间长只有\(n/2\),故只用全\(0\)区间时只能对\(k<=n/2\)的情况进行判断。那么\(k>n/2\)时怎么办呢?有个巧妙的办法:将另一半含1区间和该全0区间的子区间结合,这样构造的区间和一定为\(1\),并且区间长度范围是\([n/2+1,n]\)。这样就转化为了和上述一模一样的做法,同样具有二段性,二分即可。
CF div2 994 (A~E)的更多相关文章
- cf div2 234 D
D. Dima and Bacteria time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- 离线dfs CF div2 707 D
http://codeforces.com/contest/707/problem/D 先说一下离线和在线:在线的意思就是每一个询问单独处理复杂度O(多少多少),离线是指将所有的可能的询问先一次都处理 ...
- cf div2 239 D
D. Long Path time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- cf div2 236 D
D. Upgrading Array time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- cf div2 237 D
D. Minesweeper 1D time limit per test 2 seconds memory limit per test 512 megabytes input standard i ...
- cf div2 238 D
D. Toy Sum time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- cf div2 238 c
C. Unusual Product time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- cf div2 235 D
D. Roman and Numbers time limit per test 4 seconds memory limit per test 512 megabytes input standar ...
- cf div2 234 E
E. Inna and Binary Logic time limit per test 3 seconds memory limit per test 256 megabytes input sta ...
- CF div2 D BFS
http://codeforces.com/contest/676/problem/D 题目大意: 勇者去迷宫杀恶龙.迷宫是有n*m的方格子组成的.迷宫上有各种记号,这些记号表达着能走的方向.当且仅当 ...
随机推荐
- Selenium弹框处理
Selenium中有三种弹框,本文介绍了处理三种弹框的方法 一.Selenium三种弹框 alert:用来提示,显示一个带有指定消息和确认按钮的警告框 confirm:用于确认,显示一个带有指定消息和 ...
- 『玩转Streamlit』--文本与标题组件
本篇准备开始介绍Streamlit的组件. Streamlit的组件非常多,后续几篇打算按照用途的分类,介绍每个分类中最常用的组件. 本次从最简单的组件开始,介绍文本和标题相关的组件,也就是以下4个组 ...
- Air780E软件指南:UDP应用示例
一.UDP概述 UDP(用户数据报协议,UserDatagramProtocol)是一种无连接的.不可靠的传输层协议,主要用于实现网络中的快速通讯.以下是UDP通讯的主要特点: 1.1 无连接通讯: ...
- php 5.4 var_export的改进
用 var_export 来将数据存储到 php 配置文件里的时候,发现var_export转出来的变量定义还是 array()这种形式,不能转为[],所以自己写个函数来转换一下,代码如下: < ...
- java三次大作业的全面总结
一:前言 知识点总结: 数据结构:题目涉及到了字典或哈希表用于存储题目信息.试卷信息和学生信息:列表用于存储多个题目.试卷和学生的集合:对象用于封装题目.试卷.学生和答案的具体属性. 字符串解析:题目 ...
- Think in Java之构造器的真正调用顺序
构造器是OOP的重要组成部分,很多人认为它很容易.只不过是new了一个对象而已.而think in java的作者却告诉我们,其实这并不容易.先看下面这个例子.在你没看结果之前,你觉得你的答案是对的么 ...
- golang之异步队列Asynq
Asynq[1]是一个Go实现的分布式任务队列和异步处理库,基于redis,类似Ruby的sidekiq[2]和Python的celery[3].Go生态类似的还有machinery[4]和gowor ...
- python下的多线程与多进程
多进程: 进程我们可以理解为是一个可以独立运行的程序单位,比如打开一个浏览器,这就开启了一个浏览器进程:打开一个文本编辑器,这就开启了一个文本编辑器进程.但一个进程中是可以同时处理很多事情的,比如在浏 ...
- 前后端数据传递之form-data
前情 最近在项目开发中,跟服务端连调发现接口一直报错,服务端一直提示是数据没有传,而通过浏览器控制台发现数据是有传的. 坑 服务通过postman自测是OK的.经过和服务端一起定位发现服务端只接收以f ...
- OS之《内存管理》
程序装入方式 绝对装入:程序逻辑地址和物理地址是完全对应的.不现实 可重定位装入:装入的时候重新 计算内存地址.程序中的实际地址加上程序载入的起始地址:但是解决不了进程挂起 后重新唤醒的问题.唤醒的后 ...