热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CodeforcesContest1073problemCVasyaandRobot——尺取

VasyahasgotarobotwhichissituatedonaninfiniteCartesianplane,initiallyinthecell(0,0).Robotca

Vasya has got a robot which is situated on an infinite Cartesian plane, initially in the cell (0,0). Robot can perform the following four kinds of operations:

U — move from (x,y) to (x,y+1);
D — move from (x,y) to (x,y−1);
L — move from (x,y) to (x−1,y);
R — move from (x,y) to (x+1,y).
Vasya also has got a sequence of n operations. Vasya wants to modify this sequence so after performing it the robot will end up in (x,y).

Vasya wants to change the sequence so the length of changed subsegment is minimum possible. This length can be calculated as follows: maxID−minID+1, where maxID is the maximum index of a changed operation, and minID is the minimum index of a changed operation. For example, if Vasya changes RRRRRRR to RLRRLRL, then the operations with indices 2, 5 and 7 are changed, so the length of changed subsegment is 7−2+1=6. Another example: if Vasya changes DDDD to DDRD, then the length of changed subsegment is 1.

If there are no changes, then the length of changed subsegment is 0. Changing an operation means replacing it with some operation (possibly the same); Vasya can’t insert new operations into the sequence or remove them.

Help Vasya! Tell him the minimum length of subsegment that he needs to change so that the robot will go from (0,0) to (x,y), or tell him that it’s impossible.

Input
The first line contains one integer number n (1≤n≤2⋅105) — the number of operations.

The second line contains the sequence of operations — a string of n characters. Each character is either U, D, L or R.

The third line contains two integers x,y (−109≤x,y≤109) — the coordinates of the cell where the robot should end its path.

Output
Print one integer — the minimum possible length of subsegment that can be changed so the resulting sequence of operations moves the robot from (0,0) to (x,y). If this change is impossible, print −1.

Examples
inputCopy
5
RURUU
-2 3
outputCopy
3
inputCopy
4
RULR
1 1
outputCopy
0
inputCopy
3
UUU
100 100
outputCopy
-1
Note
In the first example the sequence can be changed to LULUU. So the length of the changed subsegment is 3−1+1=3.

In the second example the given sequence already leads the robot to (x,y), so the length of the changed subsegment is 0.

In the third example the robot can’t end his path in the cell (x,y).

题意:

给你一个长度为n的串,仅含有4种字符
U — move from (x,y) to (x,y+1);
D — move from (x,y) to (x,y−1);
L — move from (x,y) to (x−1,y);
R — move from (x,y) to (x+1,y).
差不多这个意思,就是移动的位置。
起始位置是0,0,然后给你一个目标位置,问你不可以增加,不可以减小这个串的长度,仅可以在其中选一个区间修改内容,问你到目标位置最少需要改的长度是多少。

题解:

首先特判目标位置的x+y大于n和目标位置与初始到达的位置是一样的情况,之后就是尺取,以前我都是用while来做,但是听说for一遍r会更好一点?那就试试看。每一个r我们找最大的l,让(r-l+1)这个长度是能够从当前位置到达目标位置的长度,但是要判断这两个是否奇偶,举个例子:
6
RLRLRL
1 0
这种情况怎么样都不可能到达了,因为(r-l+1)与位置偏差大小不是同奇偶的。

#include
using namespace std;
const int N=2e5+5;
char s[N];
mapmp;
int main()
{int sx&#61;0,sy&#61;0;int n;scanf("%d",&n);scanf("%s",s&#43;1);int fx,fy;scanf("%d%d",&fx,&fy);if(abs(fx)&#43;abs(fy)>n)return 0*printf("-1\n");for(int i&#61;1;i<&#61;n;i&#43;&#43;){if(s[i]&#61;&#61;&#39;U&#39;)sy&#43;&#43;;else if(s[i]&#61;&#61;&#39;D&#39;)sy--;else if(s[i]&#61;&#61;&#39;L&#39;)sx--;elsesx&#43;&#43;;}if(sx&#61;&#61;fx&&sy&#61;&#61;fy)return 0*printf("0\n");int l&#61;1,minn&#61;n&#43;1;for(int r&#61;1;r<&#61;n;r&#43;&#43;){if(s[r]&#61;&#61;&#39;U&#39;)sy--;else if(s[r]&#61;&#61;&#39;D&#39;)sy&#43;&#43;;else if(s[r]&#61;&#61;&#39;L&#39;)sx&#43;&#43;;elsesx--;while(l<&#61;r&&abs(fx-sx)&#43;abs(fy-sy)<&#61;r-l&#43;1){if(((abs(fx-sx)&#43;abs(fy-sy)))%2&#61;&#61;(r-l&#43;1)%2)minn&#61;min(minn,r-l&#43;1);if(s[l]&#61;&#61;&#39;U&#39;)sy&#43;&#43;;else if(s[l]&#61;&#61;&#39;D&#39;)sy--;else if(s[l]&#61;&#61;&#39;L&#39;)sx--;elsesx&#43;&#43;;l&#43;&#43;;}}printf("%d\n",minn&#61;&#61;n&#43;1?-1:minn);return 0;
}


推荐阅读
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • Hanks博士是一位著名的生物技术专家,他的儿子Hankson对数学有着浓厚的兴趣。最近,Hankson遇到了一个有趣的数学问题,涉及求解特定条件下的正整数x,而不使用传统的辗转相除法。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 本文详细介绍了如何在循环双链表的指定位置插入新元素的方法,包括必要的步骤和代码示例。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 编码unicode解决了语言不通的问题.但是.unicode又有一个新问题.由于unicode是万国码.把所有国家的文字都编进去了.这就导致一个unicode占用的空间会很大.原来 ... [详细]
  • 本文探讨了一种常见的C++面试题目——实现自己的String类。通过此过程,不仅能够检验开发者对C++基础知识的掌握程度,还能加深对其高级特性的理解。文章详细介绍了如何实现基本的功能,如构造函数、析构函数、拷贝构造函数及赋值运算符重载等。 ... [详细]
  • 想把一组chara[4096]的数组拷贝到shortb[6][256]中,尝试过用循环移位的方式,还用中间变量shortc[2048]的方式。得出的结论:1.移位方式效率最低2. ... [详细]
  • 深入解析C语言中的关键字及其分类
    本文将全面介绍C语言中的关键字,并按照功能将其分为数据类型关键字、控制结构关键字、存储类别关键字和其他关键字四大类,旨在帮助读者更好地理解和运用这些基本元素。C语言中共有32个关键字。 ... [详细]
  • Irish budget airline Ryanair announced plans to significantly increase its route network from Frankfurt Airport, marking a direct challenge to Lufthansa, Germany's leading carrier. ... [详细]
  • mysql数据库json类型数据,sql server json数据类型
    mysql数据库json类型数据,sql server json数据类型 ... [详细]
  • 本文介绍了如何在 SQL Server 2005 中创建和使用数据库快照,包括创建数据库、数据表、插入数据、创建快照、查询快照数据以及使用快照进行数据恢复等操作。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有