Codeforces 1073C Vasya and Robot 【二分】
<题目链接>
题目大意:
一个机器人从(0,0)出发,输入一段指令字符串,和机器人需要在指定步数后到达的终点,问如果机器人需要在指定步数内到达终点,那么需要对原指令字符串做出怎样的改变,假设改变 字符串的最大下标为maxindex,改变字符串的最小下标为minindex,输出最小的 maxindex-minindex+1,即,输出最小的改变字符串的区间长度(该区间内的字符不一定要全部发生改变)。
解题分析:
本题可用二分答案求解,先预处理得到x,y的前缀和,即原始指令字符串对x,y的改变所作出的贡献,然后就是二分答案了,二分最短区间的长度。当然,二分答案最重要的就是check()函数,枚举所有长度为mid的区间,利用前缀和计算出理论上该区间x,y恰好所需的改变,然后判断该区间是否能够符合,具体步骤见代码。
#include <bits/stdc++.h>
using namespace std;
const int N =1e6+;
int n,x,y;
char s[N];
int sx[N],sy[N]; bool check(int m){
for(int i=;i+m-<=n;i++){ //枚举所有长度为m的区间
int xx=sx[n]-sx[i+m-]+sx[i-];
int yy=sy[n]-sy[i+m-]+sy[i-];
//得到不需要改变的区间中,对x,y的数值所作出的贡献
int tx=x-xx;
int ty=y-yy;
//求出该需要改变的区间中,x和y想要到达终点,所需恰好作出的贡献
if(abs(tx)+abs(ty)<=m && (m-abs(tx)-abs(ty))%==) //(abs(tx)+abs(ty)位字符做出使该人刚好到达终点的贡献,剩下位的字符如果是偶数,那么就可以让其走的路程两两抵消,从而达到刚好到达终点的效果)
return true;
}
return false;
}
int main(){
scanf("%d",&n);
scanf("%s",s+);
scanf("%d%d",&x,&y);
sx[]=;sy[]=;
for(int i=;i<=n;i++){
sx[i] = sx[i - ] + (s[i] == 'L' ? - : (s[i] == 'R' ? : ));
sy[i] = sy[i - ] + (s[i] == 'D' ? - : (s[i] == 'U' ? : ));
}
//求出按照原始序列走,x和y的前缀和
int l=,r=n;
int ans=-;
while(l<=r){ //二分答案,枚举需要改变的最短区间长度
int mid=(l+r)>>;
if(check(mid))ans=mid,r=mid-; //如果该区间长度符合,就继续二分,看更短的区间是否符合
else l=mid+;
}
if(ans==-)puts("-1");
else printf("%d\n",ans);
return ;
}
2018-10-27
Codeforces 1073C Vasya and Robot 【二分】的更多相关文章
- CF 1073C Vasya and Robot(二分答案)
C. Vasya and Robot time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- Educational Codeforces Round 53 (Rated for Div. 2) C Vasya and Robot 二分
题目:题目链接 思路:对于x方向距离与y方向距离之和大于n的情况是肯定不能到达的,另外,如果n比abs(x) + abs(y)大,那么我们总可以用UD或者LR来抵消多余的大小,所以只要abs(x) + ...
- C. Vasya and Robot二分
1.题目描述 Vasya has got a robot which is situated on an infinite Cartesian plane, initially in the cell ...
- codeforces 355C - Vasya and Robot
因为在允许的情况下,必然是左右手交替进行,这样不会增加多余的无谓的能量. 然后根据不同的分界点,肯定会产生左手或右手重复使用的情况,这是就要加上Qr/Ql * 次数. 一开始的想法,很直接,枚举每个分 ...
- Codeforces 1073C:Vasya and Robot(二分)
C. Vasya and Robot time limit per test: 1 secondmemory limit per test: 256 megabytesinput: standard ...
- Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot 【二分 + 尺取】
任意门:http://codeforces.com/contest/1073/problem/C C. Vasya and Robot time limit per test 1 second mem ...
- Codeforces Round #115 A. Robot Bicorn Attack 暴力
A. Robot Bicorn Attack Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/17 ...
- CodeForces - 837E - Vasya's Function | Educational Codeforces Round 26
/* CodeForces - 837E - Vasya's Function [ 数论 ] | Educational Codeforces Round 26 题意: f(a, 0) = 0; f( ...
- Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot(二分或者尺取)
题目哦 题意:给出一个序列,序列有四个字母组成,U:y+1,D:y-1 , L:x-1 , R:x+1; 这是规则 . 给出(x,y) 问可不可以经过最小的变化这个序列可以由(0,0) 变到(x, ...
随机推荐
- Oracle12c安装和卸载图文教程
注:本文来源于:<Oracle12c安装和卸载图文教程> 一.安装 1.去官网下载相应的版本 2.下载好的两个压缩文件压缩到一个文件夹中 3.打开上个步骤的文件夹,运行stepup,显示如 ...
- Confluence 6 导入模板的步骤
第一步:检查你 Confluence 站点中安装的模板组件 查看当前已经导入到你 Confluence 站点中可用的模板组件: 以系统管理员或者 Confluence 管理员权限登录 Confluen ...
- windows与mac下安装nginx
window下 下载链接,自己选一个版本下载 nginx官网下载 本人放在D盘: 启动nginx 有很多种方法启动nginx (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过 (2)打开 ...
- python使用 HTMLTestRunner.py生成测试报告
HTMLTestRunner.py python 2版本 下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 使用时,先建立一个”PyDe ...
- 【python】内存调试
全文拷贝自:http://blog.csdn.net/BaishanCloud/article/details/76422782 问题定位过程解读 gdb-python:搞清楚python程序在做什么 ...
- 如何编辑PDF文件,怎么使用PDF裁剪页面工具
在编辑PDF文件的时候,往往会有很多的小技巧可以使用,在编辑PDF文件的时候,怎么对文件的页面进行裁剪呢,不会的话,看看下面的文章吧,小编已经为大家整理好了哦. 1.打开运行PDF编辑器,在编辑器中打 ...
- cf1144E 假高精度平均数
/* 先一轮求和,再一轮做除法 */ #include<bits/stdc++.h> using namespace std; ],s2[]; ],n; int main(){ cin&g ...
- lightoj 1282 取对数的操作
/* 前三位 len=log10n^k(乘积的长度) len=klog10n n^k=x*10^(len-1) x=n^k/10^(len-1) log10x = k*log10n - (len-1) ...
- Nginx详解一:Nginx基础篇之环境准备
环境确认: 1.确认系统网络可用 2.确认yum源可用 3.确认关闭iptabkes规则 查看是否有iptabkes规则:iptables -L 如果有的话:iptables -F关闭 保险起见也看看 ...
- WebStorm中常用的快捷键及使用技巧
------------------------------------- 近期整理了如下个人觉得比较常用的快捷键,也请前辈给予补充.多多指教. --------------------------- ...