CF1073C Vasya and Robot
CF题目难度普遍偏高啊……
一个乱搞的做法。因为代价为最大下标减去最小的下标,那么可以看做一个区间的修改。我们枚举选取的区间的右端点,不难发现满足条件的左端点必然是不降的。那么用一个指针移一下就好了
注意特判无解和答案为\(0\)的情况,时间复杂度\(O(n)\)(然而因为人傻常数大所以还跑不过\(O(nlogn)\)的)
//minamoto
#include<bits/stdc++.h>
#define rint register int
#define GG return puts("-1"),0
using namespace std;
const int N=5e5+5;
struct node{
	int x,y;
	node(){}
	node(int x,int y):x(x),y(y){}
	inline node operator +(const int &b)const{
		switch(b){
			case 0:return node(x-1,y);break;
			case 1:return node(x+1,y);break;
			case 2:return node(x,y-1);break;
			case 3:return node(x,y+1);break;
		}
	}
	inline node operator +(const node &b)const{return node(x+b.x,y+b.y);}
	inline node operator -(const node &b)const{return node(x-b.x,y-b.y);}
}sum[N];
char s[N];int val[105],n,ans=0x3f3f3f3f,x,y;
inline int dis(int x,int y,int xx,int yy){return abs(x-xx)+abs(y-yy);}
bool check(int l,int r){
	node res=sum[n]-sum[r]+sum[l-1];
	return dis(res.x,res.y,x,y)<=r-l+1;
}
int main(){
//	freopen("testdata.in","r",stdin);
	scanf("%d%s%d%d",&n,s+1,&x,&y);
	val['L']=0,val['R']=1,val['D']=2,val['U']=3;
	if(dis(0,0,x,y)>n||((dis(0,0,x,y)&1)!=(n&1)))GG;
	for(rint i=1;i<=n;++i)sum[i]=sum[i-1]+val[s[i]];
	if(sum[n].x==x&&sum[n].y==y)return puts("0"),0;
	for(rint i=1,j=1;i<=n;++i){
		while(j<i&&check(j+1,i))++j;
		if(check(j,i))ans=min(ans,i-j+1);
	}printf("%d\n",ans);return 0;
}
CF1073C 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 【二分 + 尺取】
		任意门:http://codeforces.com/contest/1073/problem/C C. Vasya and Robot time limit per test 1 second mem ... 
- Codeforces 1073C:Vasya and Robot(二分)
		C. Vasya and Robot time limit per test: 1 secondmemory limit per test: 256 megabytesinput: standard ... 
- 【CF1073C】Vasya and Robot(二分,构造)
		题意:给定长为n的机器人行走路线,每个字符代表上下左右走,可以更改将一些字符改成另外三个字符,定义花费为更改的下标max-min+1, 问从(0,0)走到(X,Y)的最小花费,无解输出-1 n< ... 
- C. Vasya and Robot二分
		1.题目描述 Vasya has got a robot which is situated on an infinite Cartesian plane, initially in the cell ... 
- [CF355C]Vasya and Robot(思维,贪心)
		题目链接:http://codeforces.com/contest/355/problem/C 题意:1~n n个物品各重wi,现在有一个人可以从左边拿和从右边拿, 左边拿一个物品的花费是l*wi, ... 
- cf C. Vasya and Robot
		http://codeforces.com/contest/355/problem/C 枚举L和R相交的位置. #include <cstdio> #include <cstring ... 
- CodeForce  Educational round Div2 C - Vasya and Robot
		http://codeforces.com/contest/1073/problem/C 题意:给你长度为n的字符串,每个字符为L, R, U, D.给你终点位置(x, y).你每次出发的起点为( ... 
- Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot
		题意:给出一段操作序列 和目的地 问修改(只可以更改 不可以删除或添加)该序列使得最后到达终点时 所进行的修改代价最小是多少 其中代价的定义是 终点序号-起点序号-1 思路:因为代价是终点序号减去 ... 
随机推荐
- (C/C++学习)16.函数指针
			说明:函数指针,顾名思义就是指向函数的指针.C/C++中函数名的本质其实就是一段代码段空间的首地址. 1.定义 如下的 pf 就是一个函数指针,指向所有返回类型为 int,并带有两个 const in ... 
- unity问题笔记
			拖放在预制体中的图片等资源,他们的加载需要我们控制吗?我觉得不需要控制,但是如果按照现在的这种方式保存资源到非标准的resources文件下,那怎么加载?ulua的规则是这样查找资源的吗?猜想:客户端 ... 
- java一维数组的声明、初始化及排序
			public class TestArray { public static void main(String[] args) { /** 数组声明及动态初始化 int a[] = new int[a ... 
- 53.doc value机制内核级原理深入探秘
			主要知识点: doc value的原理 doc value性能优化 一.doc value原理 1. 生成时间:index-time生成 PUT/POST的时候,就会生成doc ... 
- unigui+fastreport 打印【4】
			1.建立一个uniForm,用于建立FastReport打印界面.在Form上增加uniFrame.和传统的的报表打印设计一样一样的. 2.在beofeShow事情中: procedure TUniF ... 
- 洛谷 P1877 BZOJ 2748 cogs 791 [HAOI2012]音量调节
			题目描述 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要改变一次音量.在演出开始之前,他已经做好一个列表,里面写着每首歌开始之前他想要改变的音量是多少. ... 
- node.js 利用流实现读写同步,边读边写
			//10个数 10个字节,每次读4b,写1b let fs=require("fs"); function pipe(source,target) { //先创建可读流,再创建可写 ... 
- C#: 旋转图片到正确位置
			当从iPhone等手机上传图片到服务器后,通常需要进行旋转处理,否则在进行图片压缩.缩放处理后会丢失正确的位置信息,导致显示的图片不处于正确的位置上. 处理的做法就是读取照片的Exif信息,并旋转到正 ... 
- 如何将PSD批量装换为JPG如何对PSD批量减小体积
			1 将PSD批量转换为JPG等格式图片方法(注意选中图片之后要点击Add或者Add all把他们放到下面的窗口) 2 转换完成效果如图所示 3 想要批量修改大小,就要使用ACDSee这个软件了 ... 
- Android首次启动时间长优化之预编译提取Odex
			提示!应用程序的安装有两种情况,第一:首次启动系统时安装.第二:系统启动完毕后安装. 本篇博文基于第一种安装场景.在系统首次启动的场景中,系统会对/system/app./system/pri ... 
