CF1073C Vasya and Robot(前缀和&二分)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1073C Vasya and Robot(前缀和&二分)相关的知识,希望对你有一定的参考价值。

CF1073C Vasya and Robot(前缀和&二分)

1.二分答案

2.对于当前答案长度 l e n len len,预处理出 x , Y x,Y x,Y的前缀和,求出除了 [ l , r ] [l,r] [l,r]的两端的操作得到的坐标,然后我们特判 l e n ≥ a b s ( X − d x ) + a b s ( Y − d y ) len\\ge abs(X-dx)+abs(Y-dy) lenabs(Xdx)+abs(Ydy)

注意还需要特判 ( l e n − a b s ( X − d x ) + a b s ( Y − d y ) ) ( m o d 2 ) = 0 (len-abs(X-dx)+abs(Y-dy))\\pmod{2}=0 (lenabs(Xdx)+abs(Ydy))(mod2)=0

因为多余的部分需要来回走使其不移动。

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)

// Problem: CF1073C Vasya and Robot
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/CF1073C
// Memory Limit: 250 MB
// Time Limit: 1000 ms
// Date: 2021-05-11 10:59:17
// --------by Herio--------

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull; 
const int N=2e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define ios ios::sync_with_stdio(false),cin.tie(0) 
void Print(int *a,int n){
	for(int i=1;i<n;i++)
		printf("%d ",a[i]);
	printf("%d\\n",a[n]); 
}
int n;
char a[N];
int X,Y;
int x[N],y[N];
bool ck(int len){
	for(int l=1,r=len;r<=n;l++,r++){
		int dx = x[n] - (x[r]-x[l-1]);
		int dy = y[n] - (y[r]-y[l-1]);
		dx= abs(dx-X);
		dy= abs(dy-Y);
		if(len>=dx+dy&&(len-dx-dy)%2==0) return true;
	}
	return false;
}
int main(){
	scanf("%d%s",&n,a+1);
	scanf("%d%d",&X,&Y);
	for(int i=1;i<=n;i++){
		int dx=0,dy=0;
		if(a[i]=='R') dx=1;
		else if(a[i]=='L') dx=-1;
		else if(a[i]=='U') dy=1;
		else dy=-1;
	 	x[i]=x[i-1]+dx,y[i]=y[i-1]+dy; 
	}
	int l=0,r=n;int ans=-1;
	while(l<=r){
		int m=l+r>>1;
		if(ck(m)) ans=m,r=m-1;
		else l=m+1;
	}
	printf("%d\\n",ans);
	return 0;
}

以上是关于CF1073C Vasya and Robot(前缀和&二分)的主要内容,如果未能解决你的问题,请参考以下文章

[CF1073C] Vasya and Robot - 尺取法

CF1073C Vasya and Robot(前缀和&二分)

CF1093F Vasya and Array [DP+容斥]

CodeForce Educational round Div2 C - Vasya and Robot

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

[CF1065A]Vasya and Chocolate