Vasya and Robot
http://codeforces.com/problemset/problem/1073/C
题意:起始点为(0,0),给一段n长度的操作序列,求出在这序列中最小的需要改变的区间长度,能使它从(0,0)到(x,y)。
题解:先对x,y都做一下预处理求前缀和,即原始指令字符串对x,y的改变所作出的贡献。二分区间长度,并检查这个长度是否能够满足题意,利用前缀和计算出理论上该区间x,y恰好所需的改变,然后怎样算满足题意呢?首先需要理论上所需的贡献值小于等于这个区间的长度,其次,区间t=长度-理论值应该是个偶数,因为t显然是多余的,所以剩下位的字符如果是偶数,那么就可以让其走的路程两两抵消,从而达到刚好到达终点的效果。
/*
*@Author: STZG
*@Language: C++
*/
#include <bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<vector>
#include<bitset>
#include<queue>
#include<deque>
#include<stack>
#include<cmath>
#include<list>
#include<map>
#include<set>
//#define DEBUG
#define RI register int
#define endl "\n"
using namespace std;
typedef long long ll;
//typedef __int128 lll;
const int N=200000+10;
const int M=100000+10;
const int MOD=1e9+7;
const double PI = acos(-1.0);
const double EXP = 1E-8;
const int INF = 0x3f3f3f3f;
int t,n,m,k,p,x,y,l,r;
int ans,cnt,flag,temp,sum;
int a[2][N];
char str[N];
struct node{};
bool sloved(int mid){for(int i=1;i+mid-1<=n;i++){int l=i;int r=i+mid-1;int curx=a[0][l-1]+a[0][n]-a[0][r];int cury=a[1][l-1]+a[1][n]-a[1][r];int delta=abs(curx-y)+abs(cury-x);if(delta<=mid&&(mid-delta)%2==0)return true;}return false;
}
int main()
{
#ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout);
#endif//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);//scanf("%d",&t);//while(t--){scanf("%d",&n);scanf("%s",str+1);scanf("%d%d",&x,&y);if(n<abs(x)+abs(y)){cout<<-1<<endl;return 0;}for(int i=1;i<=n;i++){a[0][i]=a[0][i-1];a[1][i]=a[1][i-1];if(str[i]=='U')a[0][i]++;if(str[i]=='D')a[0][i]--;if(str[i]=='L')a[1][i]--;if(str[i]=='R')a[1][i]++;}l=0;r=n;ans=-1;while(l<=r){int mid=(l+r)>>1;if(sloved(mid)){ans=mid;r=mid-1;}else{l=mid+1;}}cout<<ans<<endl;//}#ifdef DEBUGprintf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC);
#endif//cout << "Hello world!" << endl;return 0;
}
Vasya and Robot相关推荐
- codeforce1073 C. Vasya and Robot 二分
codeforce1073 C. Vasya and Robot 给定N个操作和一个终止点(x,y)求改变最小的区间操作区间R-L+1,使N个操作之后到达终止节点 二分区间长度mid,预处理区间位置偏 ...
- cf Educational Codeforces Round 133 C. Robot in a Hallway
原题: There is a grid, consisting of 2 rows and m columns. The rows are numbered from 1 to 2 from top ...
- Robot Framework(十八) 支持工具
5支持工具 5.1库文档工具(libdoc) libdoc是一种用于为HTML和XML格式的测试库和资源文件生成关键字文档的工具.前一种格式适用于人类,后者适用于RIDE和其他工具.Libdoc也没有 ...
- Java Robot对象实现服务器屏幕远程监视
Java Robot对象实现服务器屏幕远程监视2006-01-16 17:33 作者: xiepan110 出处: BLOG 责任编辑:方舟 摘要: 有时候,在Java应用程序开发中,如:远程监控或远 ...
- java robot类自动截屏
直接上代码: package robot; import java.awt.Rectangle; import java.awt.Robot; import java.awt.event.InputE ...
- robot framework安装问题排查
现象:小朋友电脑启动ride总会报错 探讨方向:重新安装ride 对应包无法解决 解决思路: 1.完全卸载python及对应库 2.安装RFS 64对应文件,发现安装各种库都报错,最后得到提示pip版 ...
- java robot 控制鼠标_Java-探索Robot类:[2]自动控制鼠标
Robot系列的上一篇经验我介绍了一下Robot类的基本情况与使用,以及运用Robot类对屏幕进行截图操作.这一篇经验我将介绍如果用Robot类模拟鼠标操作. 1.Robot类的4个基本鼠标操作函数 ...
- Codewars Vasya - Clerk--6 kyu--Python解法
Codewars Vasya - Clerk–6 kyu–Python解法 Codewars 是一个跟LeetCode类似的结题网站. Codewars题解专栏:Codewars题解 题目地址:Tra ...
- LeetCode 489. Robot Room Cleaner--C++,Python解法
题目地址:Robot Room Cleaner - LeetCode Given a robot cleaner in a room modeled as a grid. Each cell in t ...
最新文章
- 安装server 2012 时提示输入的密码不满足网络或组管理员设置的密码复杂度
- 对字符串数组排序,使所有变位词都相邻(C++)
- Mac 如何恢复出厂设置
- jvm调优:能生成的线程数
- 使用ADF绑定创建视图对象行CreateInsert操作
- 【OpenCV】OpenCV函数精讲之 -- 颜色空间缩减及LUT函数
- 动态规划uva1347
- plc有与计算机的通讯请求时,OMRON PLC网络Ethernet网_OMRON PLC与上位计算机之间的通信_OMRON PLC与上位计算机通信程序-维库电子通...
- oracle列转行wm_concat,Oracle列转行函数wm_concat版本不兼容解决方案
- 神经网络测试集loss不变_神经网络训练过程中不收敛或者训练失败的原因
- typora html代码无效,Typora优化-适合不懂CSS代码的小白
- 轻松学会分布式事务算法
- 清理电脑C盘空间的脚本
- 我的世界java版是免费,我的世界Java版
- IDM下载器的安装与使用
- Go C画图 CSP-J CSP-S NOIP 信息学奥赛 2023.01.30 测试题
- jupyter notebooks打开的是百度网盘
- GARCH-QR非线性回归(GQNR)交易模型(初稿)
- Ubuntu截图软件flameshot命令行下载
- 小红书入驻,小红书商家如何入驻,小红书入驻需要的细节
热门文章
- pwm一个时间单位_解读:什么是PWM“死区”?
- springaop实现原理_spring AOP的实现原理
- linux下运行hadoop,Linux环境下hadoop运行平台的搭建
- combus通讯_Vue兄弟组件通信Bus传值--小案例
- mysql2008r1_mysql8 参考手册-分区修剪
- linux 5005端口,Linux配置防火墙端口 8080端口
- mysql事务变量_mysql学习四之事务、变量、触发器、函数、存储过程
- shell中正则表达式详解_【转】【shell】正则表达式使用详解(一)
- 查询jsp servelet mysql_JSP + Servlet + JDBC + Mysql 实现增删改查 课程管理系统(示例代码)...
- 一、搭建Python环境和安装Pycharm