C. Magic Ship cf 二分
2 seconds
256 megabytes
standard input
standard output
You a captain of a ship. Initially you are standing in a point (x1,y1)(x1,y1) (obviously, all positions in the sea can be described by cartesian plane) and you want to travel to a point (x2,y2)(x2,y2) .
You know the weather forecast — the string ss of length nn , consisting only of letters U, D, L and R. The letter corresponds to a direction of wind. Moreover, the forecast is periodic, e.g. the first day wind blows to the side s1s1 , the second day — s2s2 , the nn -th day — snsn and (n+1)(n+1) -th day — s1s1 again and so on.
Ship coordinates change the following way:
- if wind blows the direction U, then the ship moves from (x,y)(x,y) to (x,y+1)(x,y+1) ;
- if wind blows the direction D, then the ship moves from (x,y)(x,y) to (x,y−1)(x,y−1) ;
- if wind blows the direction L, then the ship moves from (x,y)(x,y) to (x−1,y)(x−1,y) ;
- if wind blows the direction R, then the ship moves from (x,y)(x,y) to (x+1,y)(x+1,y) .
The ship can also either go one of the four directions or stay in place each day. If it goes then it's exactly 1 unit of distance. Transpositions of the ship and the wind add up. If the ship stays in place, then only the direction of wind counts. For example, if wind blows the direction U and the ship moves the direction L, then from point (x,y)(x,y) it will move to the point (x−1,y+1)(x−1,y+1) , and if it goes the direction U, then it will move to the point (x,y+2)(x,y+2) .
You task is to determine the minimal number of days required for the ship to reach the point (x2,y2)(x2,y2) .
The first line contains two integers x1,y1x1,y1 (0≤x1,y1≤1090≤x1,y1≤109 ) — the initial coordinates of the ship.
The second line contains two integers x2,y2x2,y2 (0≤x2,y2≤1090≤x2,y2≤109 ) — the coordinates of the destination point.
It is guaranteed that the initial coordinates and destination point coordinates are different.
The third line contains a single integer nn (1≤n≤1051≤n≤105 ) — the length of the string ss .
The fourth line contains the string ss itself, consisting only of letters U, D, L and R.
The only line should contain the minimal number of days required for the ship to reach the point (x2,y2)(x2,y2) .
If it's impossible then print "-1".
0 0
4 6
3
UUU
5
0 3
0 0
3
UDD
3
0 0
0 1
1
L
-1
In the first example the ship should perform the following sequence of moves: "RRRRU". Then its coordinates will change accordingly: (0,0)(0,0) →→ (1,1)(1,1) →→ (2,2)(2,2) →→ (3,3)(3,3) →→ (4,4)(4,4) →→ (4,6)(4,6) .
In the second example the ship should perform the following sequence of moves: "DD" (the third day it should stay in place). Then its coordinates will change accordingly: (0,3)(0,3) →→ (0,3)(0,3) →→ (0,1)(0,1) →→ (0,0)(0,0) .
In the third example the ship can never reach the point (0,1)(0,1) .
思路:
先对前面n天进行计算用dx,dy数组来记录风让船走的距离。然后进行二分,对这一天设为x进行判断,在第x天船随着风走了一个新的位置,这个位置横纵坐标和终点进行绝对值求和为sum(这个sum可以直接理解为人工操作的步数,也就是天数)
如果sum<=x,说明x太大了,r=x-1;....
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e5+19;
char s[maxn];
ll sx,sy,gx,gy,n;
ll dx[maxn],dy[maxn]; int check(ll x)
{
ll ex=(x/n)*dx[n]+dx[x%n];
ll ey=(x/n)*dy[n]+dy[x%n]; if(abs(sx+ex-gx)+abs(sy+ey-gy)<=x) return 1;//船随着风走了这么久之后,如果接下来的路程步数小于x(即人走),那就说明天数过大。
return 0;
} int main()
{
scanf("%I64d%I64d",&sx,&sy);
scanf("%I64d%I64d",&gx,&gy);
scanf("%d%s",&n,s+1);
for(int i=1;i<=n;i++)
{
dx[i]=dx[i-1];
dy[i]=dy[i-1];
if(s[i]=='U') dy[i]++;
if(s[i]=='D') dy[i]--;
if(s[i]=='L') dx[i]--;
if(s[i]=='R') dx[i]++;
}
ll l=0,r=1e18,ans=-1;
while(r>=l)
{
ll mid=(l+r)/2;
if(check(mid))
{
r=mid-1;
ans=mid;
}
else l=mid+1;
}
printf("%I64d\n",ans);
return 0;
}
C. Magic Ship cf 二分的更多相关文章
- Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship
Problem Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...
- CF1117C Magic Ship
CF1117C Magic Ship 考虑到答案具单调性(若第 \(i\) 天能到达目的点,第 \(i+1\) 天只需向风向相反的方向航行),可以二分答案. 现在要考虑给出一个天数 \(m\) ,问 ...
- 题解-Magic Ship
Magic Ship 你在 \((x_1,y_1)\),要到点 \((x_2,y_2)\).风向周期为 \(n\),一个字符串 \(s\{n\}\) 表示风向(每轮上下左右),每轮你都会被风向吹走一格 ...
- CodeForces 1117C Magic Ship (循环节+二分答案)
<题目链接> 题目大意: 给定起点和终点,某艘船想从起点走到终点,但是海面上会周期性的刮风,船在任何时候都能够向四个方向走,或者选择不走,船的真正行走路线是船的行走和风的走向叠加的,求船从 ...
- C. Magic Ship (思维+二分)
https://codeforces.com/contest/1117/problem/C 你是一个船长.最初你在点 (x1,y1) (显然,大海上的所有点都可以用平面直角坐标描述),你想去点 (x2 ...
- Codeforces 1117C Magic Ship (二分)
题意: 船在一个坐标,目的地在一个坐标,每天会有一个风向将船刮一个单位,船也可以移动一个单位或不动,问最少几天可以到目的地 思路: 二分天数,对于第k天 可以分解成船先被吹了k天,到达坐标(x1+su ...
- codeforces 350 div2 D Magic Powder - 2 二分
D2. Magic Powder - 2 time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #350 (Div. 2) D1. Magic Powder - 1 二分
D1. Magic Powder - 1 题目连接: http://www.codeforces.com/contest/670/problem/D1 Description This problem ...
- Educational Codeforces Round 60 (Rated for Div. 2) 即Codeforces Round 1117 C题 Magic Ship
time limit per test 2 second memory limit per test 256 megabytes input standard inputoutput standard ...
随机推荐
- [angularjs] angularjs系列笔记(八)事件
AngularJs有自己的HTML事件 ng-click指令 ng-click指令定义了AngularJs点击事件 当点击按钮的时候,赋值count变量并且给count变量加1,显示出count变量 ...
- 1.shell学习之常用语句
本章学习内容: 1.常见符号 2.命令分隔符-分号";" 3.双分号 ";;" 4. '单引号和"双引号 5.`反引号和$() 6.${}和$ 7.冒 ...
- 【MAC】安装神器brew
安装方法:命令行输入 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ma ...
- springboot最新版本自定义日志注解和AOP
LogAspectAnnotation @ControllerLogAspectAnnotation /** * * Define a log facet annotation * @author s ...
- 解决PHP Redis扩展无法加载的问题(zend_new_interned_string in Unknown on line 0)
出错代码如下 PHP Warning: PHP Startup: Unable to load 最近在工作中需要使用PHP访问Redis,从https://github.com/phpredis/ph ...
- mybatis 通过实体类进行查询
如果使用实体类进行查询, 不管会不会使用到 主键, 都必须设置主键, 才能查询 <select id="selectByAppidAndServerCode" resultM ...
- C#字典Dictionay多线程读是否是安全的
答案:是线程安全的,只读不写多线程下,完全不需要加锁! 测试代码: using System; using System.Diagnostics; using System.Threading; us ...
- Windows系统java下载与安装
Windows系统java下载与安装 一.前言 作者:深圳-风尘 联系方式:QQ群[585499566] 博客:https://www.cnblogs.com/1fengchen1/ 能读懂本文档人: ...
- Testlink1.9.17使用方法( 第三章 初始配置[配置用户、产品] )
第三章 初始配置(配置用户.产品) 一. 设置用户 QQ交流群:585499566 在TestLink系统中,每个用户都可以维护自己的私有信息.admin可以创建用户,但不能看到其它用户的密码.在用户 ...
- java面试整理(会持续更新..)
本人出道至今,经历了大大小小百余场战斗,,,下面整理的面试题有些有答案,有些没答案,那个谁说过:"要抱着怀疑的态度去编程,所以,即便有答案,也不一定正确,即便我本地正确,但是由于屏幕前的你和 ...