【Educational Codeforces Round 53 (Rated for Div. 2) C】Vasya and Robot
2024-10-01 05:41:10
【链接】 我是链接,点我呀:)
【题意】
【题解】
如果|x|+|y|>n
显然。从(0,0)根本就没法到(x,y)
但|x|+|y|
【代码】
#include <bits/stdc++.h>
#define ll long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
using namespace std;
const int N = 2e5;
int n;
ll x,y;
ll px[N+10],py[N+10];
char s[N+10];
bool ok(int len){
rep1(i,1,n){
if (i+len-1>n) return 0;
ll x0 = px[i-1]-px[0],y0=py[i-1]-py[0];
x0+=px[n]-px[i+len-1];y0+=py[n]-py[i+len-1];
ll temp = abs(x-x0)+abs(y-y0);
if (temp<=len) return 1;
}
return 0;
}
int main(){
#ifdef ccy
freopen("rush.txt","r",stdin);
#endif
scanf("%d",&n);
scanf("%s",s+1);
scanf("%lld%lld",&x,&y);
ll temp = abs(x)+abs(y);
if (temp>n || ( (temp&1) != (n&1) ) ){
puts("-1");
return 0;
}
rep1(i,1,n){
px[i] = px[i-1];py[i] = py[i-1];
if (s[i]=='L') px[i]--;
if (s[i]=='R') px[i]++;
if (s[i]=='U') py[i]++;
if (s[i]=='D') py[i]--;
}
int l = 0,r = n,temp1 = -1;
while (l <= r){
int mid = (l+r)>>1;
if (ok(mid)){
temp1 = mid;
r = mid-1;
}else{
l = mid+1;
}
}
printf("%d\n",temp1);
return 0;
}
最新文章
- eclipse调试solr
- JVM垃圾回收机制总结:调优方法
- C#控件绑定数据源方式
- git使用详细介绍
- 根据关键词kill进程
- sheet目标数据插入函数主键模块
- 用Javascript弹出div定义的消息框并往块里面填写文字
- Linux Kernel CMPXCHG函数分析
- SoapUI命令行方式运行
- IC卡的逻辑卡号和市民卡卡号
- JUnit4简要说明
- 利用http实现文件的上传和下载
- tabbar加小红点
- HTML常用标签1
- 学习:java集合
- loopback文件系统
- .Net Core 全球化&;本地化的使用
- 关于syslog日志功能详解 事件日志分析、EventLog Analyzer
- [日常] PHP与Mysql测试kill慢查询并检验PDO的错误模式
- 【WPF】代码触发Button点击事件