题意:给出一段操作序列 和目的地 问修改(只可以更改 不可以删除或添加)该序列使得最后到达终点时  所进行的修改代价最小是多少

其中代价的定义是  终点序号-起点序号-1

思路:因为代价是终点序号减去起点序号 所以  在终点和起点之前 可以任意变换  则如果  x+y 和序列长度n的奇偶性相同 就一定可以到达

可以使用二分(二分好容易写炸啊!)  把(以1为起点) 【1,i】U[【i+len,n】最后到达的点记为x0,y0  而中间缺的就是可以修改的区间

这里不必要判断奇偶性  因为如果x0,y0是 和为奇的点,n总数为奇数 那目的地是奇点   则剩下的步数是偶点(因为x0,y0为奇点,走了奇数步)

奇数点到奇数点只需要偶数步数  所以奇偶性是一致的,不用判断 奇偶  其他情况同理    故只需要判断步数是否足够到达   也就是

abs(x-x0)+abs(y-y0)<=可修改区间长度 这就是剩余步数可以到达的充要条件

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=200000+10;
char s[maxn];
int dx[maxn],dy[maxn];
int main(){
int n,x,y;
cin>>n>>s>>x>>y;
if(n<abs(x)+abs(y)||(n&1)!=((abs(x+y))&1)){
cout<<-1;return 0;
}
for(int i=0;i<n;i++){//预处理以计算x0,y0
dx[i+1]=dx[i];
dy[i+1]=dy[i];
if(s[i]=='U'){
dy[i+1]++;
}
if(s[i]=='D'){
dy[i+1]--;
}
if(s[i]=='L'){
dx[i+1]--;
}
if(s[i]=='R'){
dx[i+1]++;
}
}
int ans=INT_MAX;
for(int i=0;i<=n;i++){//枚举开始修改的起点
int start=i+1,end=n+2;
while(start!=end){
int mid=(start+end)/2;
int tempx=dx[i]+(dx[n]-dx[mid-1]),tempy=dy[i]+(dy[n]-dy[mid-1]);//计算到达的x0,y0
if(abs(tempx-x)+abs(tempy-y)<=mid-i-1)
end=mid;
else start=mid+1;
}
if(start!=n+2){
ans=min(ans,start-i-1);
}
}
cout<<ans<<endl; }

  

Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot的更多相关文章

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

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

  3. Educational Codeforces Round 53 (Rated for Div. 2) C Vasya and Robot 二分

    题目:题目链接 思路:对于x方向距离与y方向距离之和大于n的情况是肯定不能到达的,另外,如果n比abs(x) + abs(y)大,那么我们总可以用UD或者LR来抵消多余的大小,所以只要abs(x) + ...

  4. Educational Codeforces Round 53 (Rated for Div. 2) (前五题题解)

    这场比赛没有打,后来补了一下,第五题数位dp好不容易才搞出来(我太菜啊). 比赛传送门:http://codeforces.com/contest/1073 A. Diverse Substring ...

  5. Educational Codeforces Round 53 (Rated for Div. 2)

    http://codeforces.com/contest/1073 A. Diverse Substring #include <bits/stdc++.h> using namespa ...

  6. Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum (数位dp求和)

    题目链接:https://codeforces.com/contest/1073/problem/E 题目大意:给定一个区间[l,r],需要求出区间[l,r]内符合数位上的不同数字个数不超过k个的数的 ...

  7. [codeforces][Educational Codeforces Round 53 (Rated for Div. 2)D. Berland Fair]

    http://codeforces.com/problemset/problem/1073/D 题目大意:有n个物品(n<2e5)围成一个圈,你有t(t<1e18)元,每次经过物品i,如果 ...

  8. Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum

    https://codeforces.com/contest/1073/problem/E 题意 求出l到r之间的符合要求的数之和,结果取模998244353 要求:组成数的数位所用的数字种类不超过k ...

  9. Educational Codeforces Round 53 (Rated for Div. 2)G. Yet Another LCP Problem

    题意:给串s,每次询问k个数a,l个数b,问a和b作为后缀的lcp的综合 题解:和bzoj3879类似,反向sam日神仙...lcp就是fail树上的lca.把点抠出来建虚树,然后在上面dp即可.(感 ...

随机推荐

  1. 【C#复习总结】dynamic

    介绍 C# 4 引入了一个新类型 dynamic. 该类型是一种静态类型,但类型为 dynamic 的对象会跳过静态类型检查. 大多数情况下,该对象就像具有类型 object 一样. 在编译时,将假定 ...

  2. 将 ASP.NET Core 2.0 项目升级至 ASP.NET Core 2.1.3X

    在上一篇文章ASP.Net Core 运行错误 Http Error 502.5 解决办法的最后有提到说,最推荐的升级办法是从2.0升级到2.1X版本. 操作如下 项目的例子直接使用https://g ...

  3. Linux 命令(二)

    man help:线上查询及帮助命令 命令  --help:简单帮助 help  cd:查看一些Linux命令行的一些内置命令 文件和目操作命令(19个) ls  cd  cp  find  mkdi ...

  4. 什么是CLOS架构?

    Clos架构,诞生于1952年,是由一位叫Charles Clos的人提出的,所以它并不是一个新的概念. 这个架构主要描述了一种多级电路交换网络的结构.Clos最大的优点就是对Crossbar结构的改 ...

  5. Leetcode -- 258 数位相加

    258. Given a non-negative integer num, repeatedly add all its digits until the result has only one d ...

  6. Python-生成器_监听文件输入的例子_37

    def tail(filename): f = open(filename,encoding='utf-8') while True: line = f.readline() if line.stri ...

  7. 如何使用 Docker 来限制 CPU、内存和 IO等资源?

    如何使用 Docker 来限制 CPU.内存和 IO等资源?http://www.sohu.com/a/165506573_609513

  8. [转帖]PAT 计算机程序设计能力考试

    PAT 计算机程序设计能力考试 https://blog.csdn.net/bat67/article/details/52134211 [官方简介] 计算机程序设计能力考试(Programming ...

  9. RDD

    scala> val rdd1=sc.parallelize(Array("coffe","coffe","hellp"," ...

  10. socket FTP-1

    基于socket实现文件的传输以及md5验证 server: import socket import os import hashlib server=socket.socket() server. ...