【链接】 我是链接,点我呀:)

【题意】

【题解】

如果|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;
}

最新文章

  1. eclipse调试solr
  2. JVM垃圾回收机制总结:调优方法
  3. C#控件绑定数据源方式
  4. git使用详细介绍
  5. 根据关键词kill进程
  6. sheet目标数据插入函数主键模块
  7. 用Javascript弹出div定义的消息框并往块里面填写文字
  8. Linux Kernel CMPXCHG函数分析
  9. SoapUI命令行方式运行
  10. IC卡的逻辑卡号和市民卡卡号
  11. JUnit4简要说明
  12. 利用http实现文件的上传和下载
  13. tabbar加小红点
  14. HTML常用标签1
  15. 学习:java集合
  16. loopback文件系统
  17. .Net Core 全球化&amp;本地化的使用
  18. 关于syslog日志功能详解 事件日志分析、EventLog Analyzer
  19. [日常] PHP与Mysql测试kill慢查询并检验PDO的错误模式
  20. 【WPF】代码触发Button点击事件

热门文章

  1. axis2的wsdl无法使用eclipse axis1插件来生成client--解决方法
  2. Cuckoo for Hashing
  3. Spring MVC中传递json数据时显示415错误解决方法
  4. input点击修改样式
  5. layui日期输入框
  6. golang单点推送
  7. POJ 3481 set水过
  8. MemcachedClient 使用说明
  9. layui 时间前后节点验证
  10. APP开发中的弹窗体系,UI设计师不能忽视的地方