Codeforces Global Round 11 A~D题解
A.Avoiding Zero
题目链接:https://codeforces.ml/contest/1427
题目大意:给定一个数组a1,a2...,an,要求找出一个a重排后的数组b1,b2,...,bn使得对于任意k,b1+b2+...+bk!=0
题解:
令sum=a1+a2+...+an,
若sum=0,则显然无解
若sum>0,则不妨将>0的放在最前面,其次放<0,=0的不放在第一位即可
若sum<0,则不妨将<0的放在最前面,其次放>0,=0的不放在第一位即可
这样做可以确保b数组前缀和始终与sum正负性相同。
B. Chess Cheater
题目链接:https://codeforces.ml/contest/1427/problem/B
题目大意:给定一个长度为n的仅由'W'和'L'组成的字符串和一个整数k,最多可以更改k个'W'为'L'或者'L'为'W'。若一个'W'前面一个字符也是'W',则得2分,否则得1分(第一个字符为'W'时得1分),输出最大得分
题解:
这题是一道贪心题,首先将'W'改为'L'肯定不会更优,只会更劣,其次WLW改为WWW得分+3,WLLW改为WWLW得分+2,WLLLW改为WLWLW得分+1
那么不难发现将非连续的W块改成连续的W块每次可以+2分/3分,当且仅当两个非连续W块中间只有一个L时将其改成W后得分+3,因此得到我们的贪心思路:优先修改长度最小的连续L块
若存在至少一个W,那么每次答案至少+2,且+3的次数可以最大化。
1.若全是L则特判即可。
2.存在至少一个W时:
要注意的是对于左端点是1或者右端点是n的L块比较特殊,可以证明无论长度多小放在最后修改都会更优,为了方便后续计算答案不妨强制设置这两个块的大小为k+1。
最终答案:初始化ans为刚开始的答案,L块从小到大排序后依次处理,若当前L块大小x<=k,则k-=x,ans+=2*x+1,即将该L块全部变为W块的答案贡献值
若当前L块大小>k,则break,然后ans+=2*k即可。
C. The Hard Work of Paparazzi
题目链接:https://codeforces.ml/contest/1427/problem/C
题目大意:还是看原题题目吧qwq
题解:
令dp[i]表示ti时刻在(xi,yi)点时的最大答案,则dp[i]=max(dp[j])+1(其中t[j]+|x[i]-x[j]|+|y[i]-y[j]|<=t[i])
因为1≤xi,yi≤r≤500,则|x[i]-x[j]|+|y[i]-y[j]|<=(500-1)*2=998,且t是严格递增数列,那么最坏情况下有t[i-998]=t[i]-998+|x[i]-x[j]|+|y[i]-y[j]|<=t[i],所以不妨令DP=max(dp[j])+1(t[j]+998<=t[i])
则复杂度为O(n*r),时限2s可过。
D. Unshuffling a Deck
题目链接:https://codeforces.ml/contest/1427/problem/D
题目大意:给定一个1~n的排列,让你通过至多n次题目所给的重排方式将其排序。
题解:
套路题,这种操作限制次数题一般说来看操作限制的次数就能得到一个大致做法了,而且一般来说都会卡满这个操作限制次数
这题我考试时得想法是每次用两个操作使得第i小和第i大在对应位置。
假设第i小在当前排列位置为p,第i大为q
1.若p<q,不妨设原排列为A B p C q D E ,A为1~i-1,E为n-i+2~n
第一次选A Bp C qD E,则变为E qD C Bp A
第二次选E q D C B p A,则变为A p B C D q E
2.若p>q,不妨设原排列为A B q C p D E,A为1~i-1,E为n-i+2~n
第一次选A Bq C pD E,则变为E pD C Bq A
第二次选E pDCBq A,则变为A p D C B q E
最大操作次数为(n/2)*2次
PS:这题因为至少选择两个,所以要特判一下,就这里卡了我半个多小时,错了两次...
Codeforces Global Round 11 A~D题解的更多相关文章
- Codeforces Global Round 11 个人题解(B题)
Codeforces Global Round 11 1427A. Avoiding Zero 题目链接:click here 待补 1427B. Chess Cheater 题目链接:click h ...
- Codeforces Global Round 11【ABCD】
比赛链接:https://codeforces.com/contest/1427 A. Avoiding Zero 题意 将 \(n\) 个数重新排列使得不存在为 \(0\) 的前缀和. 题解 计算正 ...
- Codeforces Global Round 11 D. Unshuffling a Deck(构造/相邻逆序对)
题目链接:https://codeforces.com/contest/1427/problem/D 题意 给出一个大小为 \(n\) 的排列,每次操作可以将 \(n\) 个数分为 \(1 \sim ...
- Codeforces Global Round 11 C. The Hard Work of Paparazzi(dp/最长上升子序列)
题目链接:https://codeforces.com/contest/1427/problem/C 题意 \(r\) 行与 \(r\) 列相交形成了 \(r \times r\) 个点,初始时刻记者 ...
- Codeforces Global Round 11 B. Chess Cheater(贪心)
题目链接:https://codeforces.com/contest/1427/problem/B 题意 给出一个长为 \(n\) 由 W, L 组成的字符串,如果一个 W 左侧为 W,则它提供 2 ...
- Codeforces Global Round 11 A. Avoiding Zero(前缀和)
题目链接:https://codeforces.com/contest/1427/problem/A 题意 将 \(n\) 个数重新排列使得不存在为 \(0\) 的前缀和. 题解 计算正.负前缀和,如 ...
- Codeforces Global Round 11 C. The Hard Work of Paparazzi (DP)
题意:有\(r\)X\(r\)的网格图,有\(n\)位名人,会在\(t_i\)时出现在\((x_i,y_i)\),如果过了\(t_i\)名人就会消失,从某一点走到另外一点需要花费的时间是它们之间的曼哈 ...
- Codeforces Global Round 11 B. Chess Cheater (贪心,结构体排序)
题意:你和朋友进行了\(n\)个回合的棋艺切磋,没有平局,每次要么输要么赢,每次赢可以得一分,假如前一局也赢了,那么可以得两分,结果已成定局,但是你确可以作弊,最多修改\(k\)个回合的结果,问你作弊 ...
- Codeforces Global Round 2 题解
Codeforces Global Round 2 题目链接:https://codeforces.com/contest/1119 A. Ilya and a Colorful Walk 题意: 给 ...
随机推荐
- 避免nullpointer 空指针
来自知乎: 一般在服务器返回的数据上我们会做数据合法性检测,所以在api文档上需要注明字段的取值范围,然后客户端根据这个去做数据检测,缺段就直接走数据错误的流程,这个很大程度上避免了不少nullpoi ...
- [BUUOJ记录] [GYCTF]EasyThinking
主要考察ThinkPHP6.0的一个任意文件写入的CVE以及突破disable_function的方法. ThinkPHP6.0.0任意文件操作漏洞 理论分析 进入题目是一个简单的操作页面,dirma ...
- 一个后端开发的 Vue 笔记【入门级】
一 前言 最近找了些教程,顺带着趴在官网上,看了看 Vue 的一些内容,入门的一些概念,以及基础语法,还有一些常用的操作,瞄了一眼,通篇文字+贴了部分代码 9000 多字,入门语法什么的还是很好理解的 ...
- 小程序开发-Map地图组件
Map组件 是原生组件,使用时请注意相关限制.个性化地图能力可在小程序后台"设置-开发者工具-腾讯位置服务"申请开通. 设置subkey后,小程序内的地图组件均会使用该底图效果,底 ...
- bootstrap-table存在合并单元格怎么处理数据
效果如图: js文件如下: $(function () { initTable() $('#load_vip').change(function () { $ .ajax({ type: 'POST' ...
- 创建DBA用户luna
用system/pswd登陆sql plus,执行下面命令: 请输入用户名: system 输入口令: 连接到: Oracle Database 11g Enterprise Edition Rele ...
- 20190923-07Linux搜索查找类 000 015
find 查找文件或者目录 find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端. 1.基本语法 find [搜索范围] [选项] 2.选项说明 表1-27 选项 功能 -n ...
- 关于ES6的let、const那些事儿
Babel 转码器 Babel是广泛使用的一个ES6转换器,将ES6代码转换成ES5代码,从而实现在老版本的浏览器执行. let和const命令 let所声明的变量只在let命令所在的代码块内是有效的 ...
- Go Http包解析:为什么需要response.Body.Close()
简单来讲就是:为了提高效率,http.Get 等请求的 TCP 连接是不会关闭的(再次向同一个域名请求时,复用连接),所以必须要手动关闭. 2019-01-24 10:43:32 更新 不管是否使用 ...
- appium多线程自动化
基于上篇讲述的appium自动启动停止.测试服务.对controller文件进行相应的修改 1.首先对start_server函数,应采用多线程模式启动多个server,如下 其中启动的每个线程函数s ...