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相关推荐

  1. codeforce1073 C. Vasya and Robot 二分

    codeforce1073 C. Vasya and Robot 给定N个操作和一个终止点(x,y)求改变最小的区间操作区间R-L+1,使N个操作之后到达终止节点 二分区间长度mid,预处理区间位置偏 ...

  2. 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 ...

  3. Robot Framework(十八) 支持工具

    5支持工具 5.1库文档工具(libdoc) libdoc是一种用于为HTML和XML格式的测试库和资源文件生成关键字文档的工具.前一种格式适用于人类,后者适用于RIDE和其他工具.Libdoc也没有 ...

  4. Java Robot对象实现服务器屏幕远程监视

    Java Robot对象实现服务器屏幕远程监视2006-01-16 17:33 作者: xiepan110 出处: BLOG 责任编辑:方舟 摘要: 有时候,在Java应用程序开发中,如:远程监控或远 ...

  5. java robot类自动截屏

    直接上代码: package robot; import java.awt.Rectangle; import java.awt.Robot; import java.awt.event.InputE ...

  6. robot framework安装问题排查

    现象:小朋友电脑启动ride总会报错 探讨方向:重新安装ride 对应包无法解决 解决思路: 1.完全卸载python及对应库 2.安装RFS 64对应文件,发现安装各种库都报错,最后得到提示pip版 ...

  7. java robot 控制鼠标_Java-探索Robot类:[2]自动控制鼠标

    Robot系列的上一篇经验我介绍了一下Robot类的基本情况与使用,以及运用Robot类对屏幕进行截图操作.这一篇经验我将介绍如果用Robot类模拟鼠标操作. 1.Robot类的4个基本鼠标操作函数 ...

  8. Codewars Vasya - Clerk--6 kyu--Python解法

    Codewars Vasya - Clerk–6 kyu–Python解法 Codewars 是一个跟LeetCode类似的结题网站. Codewars题解专栏:Codewars题解 题目地址:Tra ...

  9. 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 ...

最新文章

  1. 安装server 2012 时提示输入的密码不满足网络或组管理员设置的密码复杂度
  2. 对字符串数组排序,使所有变位词都相邻(C++)
  3. Mac 如何恢复出厂设置
  4. jvm调优:能生成的线程数
  5. 使用ADF绑定创建视图对象行CreateInsert操作
  6. 【OpenCV】OpenCV函数精讲之 -- 颜色空间缩减及LUT函数
  7. 动态规划uva1347
  8. plc有与计算机的通讯请求时,OMRON PLC网络Ethernet网_OMRON PLC与上位计算机之间的通信_OMRON PLC与上位计算机通信程序-维库电子通...
  9. oracle列转行wm_concat,Oracle列转行函数wm_concat版本不兼容解决方案
  10. 神经网络测试集loss不变_神经网络训练过程中不收敛或者训练失败的原因
  11. typora html代码无效,Typora优化-适合不懂CSS代码的小白
  12. 轻松学会分布式事务算法
  13. 清理电脑C盘空间的脚本
  14. 我的世界java版是免费,我的世界Java版
  15. IDM下载器的安装与使用
  16. Go C画图 CSP-J CSP-S NOIP 信息学奥赛 2023.01.30 测试题
  17. jupyter notebooks打开的是百度网盘
  18. GARCH-QR非线性回归(GQNR)交易模型(初稿)
  19. Ubuntu截图软件flameshot命令行下载
  20. 小红书入驻,小红书商家如何入驻,小红书入驻需要的细节

热门文章

  1. pwm一个时间单位_解读:什么是PWM“死区”?
  2. springaop实现原理_spring AOP的实现原理
  3. linux下运行hadoop,Linux环境下hadoop运行平台的搭建
  4. combus通讯_Vue兄弟组件通信Bus传值--小案例
  5. mysql2008r1_mysql8 参考手册-分区修剪
  6. linux 5005端口,Linux配置防火墙端口 8080端口
  7. mysql事务变量_mysql学习四之事务、变量、触发器、函数、存储过程
  8. shell中正则表达式详解_【转】【shell】正则表达式使用详解(一)
  9. 查询jsp servelet mysql_JSP + Servlet + JDBC + Mysql 实现增删改查 课程管理系统(示例代码)...
  10. 一、搭建Python环境和安装Pycharm