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) len≥abs(X−dx)+abs(Y−dy)
注意还需要特判 ( 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 (len−abs(X−dx)+abs(Y−dy))(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 二分 + 尺取