https://codeforces.com/contest/1117/problem/C

你是一个船长。最初你在点 (x1,y1) (显然,大海上的所有点都可以用平面直角坐标描述),你想去点 (x2,y2) 。

你看了天气预报——一个长为 n 的字符串 s,只包含字母 U, D, L 和 R 。这些字母表示风向。并且,这个天气预报是循环的。例如,第一天风向是 s1 ,第二天是 s2 ,第 n 天是 sn ,则第 n+1 天又是 s1 ,以此类推。

船的坐标按照如下方式改变:

如果风向是 U ,船从 (x,y) 到 (x,y+1) ;

如果风向是 D ,船从 (x,y) 到 (x,y−1) ;

如果风向是 L ,船从 (x,y) 到 (x−1,y) ;

如果风向是 R ,船从 (x,y) 到 (x+1,y) 。

每天,船也能自己向如上四个方向中的一个移动恰好 1 个单位或待在原地。船的位移与风向会相加。如果船待在原地,则只计算风向对船的影响。例如,如果风向是 U ,船向 L 移动,则它会从 (x,y) 移动到 (x−1,y+1) ;如果船向 U 移动,则它会移动到 (x,y+2) 。

你的任务是确定移动到 (x2,y2) 所需的最少天数。

输入
第一行包含两个整数 x1,y1 (0≤x1,y1≤1e9) ——船的初始坐标。

第二行包含两个整数 x2,y2 (0≤x2,y2≤1e9) ——目的地的坐标。

保证初始坐标与目的地的坐标不同。

第三行包含一个整数 n (1≤n≤105) ——字符串 s 的长度。

第四行包含字符串 s ,只包含字母 U, D, L 和 R 。

输出
输出一行,移动到 (x2,y2) 所需的最少天数。

如果不可能输出 −1 。

分析:这里有条不明显的递增规律 , 因为到达终点后每天都往与当天风向相反的方向航行就可以停留在原地,就是说可以第x天到达目的地 , 那还可以在比x天更小的天到达目的地。

所以我们可以二分mid天可以到达目的地 ; 现在再来考虑一个问题 , 我们怎么考虑风向的影响 , 既然我们是考虑是mid天到达目的地 ,那在这个mid天里面 , 无论是在那个位置受到的风向的价值都是一样的 ,不会改变 , 所以我们可以考虑 , 把风向的价值与人自己决定的价值分开来计算, 比如一开始我们先不人为走, 只让风吹你走 , 然后可以到达某个位置 , 在判断在这个位置可不可以小于等于mid 步到达 ;

注意:因为风向是周期性 的 , 所以需要一些前缀和操作来o(1) 找到价值

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n;
int stx,sty,enx,eny;
int dx[],dy[];
string str;
bool solve(ll mid)
{
ll a=mid/n;
ll b=mid%n; ll x=a*dx[n] + dx[b] + stx;///天气是循环的
ll y=a*dy[n] + dy[b] + sty;
ll res=abs(x-enx) + abs(y-eny);///曼哈顿距离求所够的天数
return res<=mid;
}
int main()
{
cin>>stx>>sty>>enx>>eny>>n>>str; for(int i= ; i< n; i ++)
{
dy[i+] = dy[i];
dx[i+] = dx[i]; if(str[i]=='U') dy[i+]++;
if(str[i]=='D') dy[i+]--;
if(str[i]=='L') dx[i+]--;
if(str[i]=='R') dx[i+]++;
}
ll head= , tail=1e18,ans=-,mid;
while(head<=tail)
{
mid=(head+tail) >>;
if(solve(mid))
{
tail=mid-;
ans=mid;
}
else
{
head=mid +;
}
}
printf("%lld\n",ans);
}

C. Magic Ship (思维+二分)的更多相关文章

  1. C. Magic Ship cf 二分

    C. Magic Ship time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  2. 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 ...

  3. CF1117C Magic Ship

    CF1117C Magic Ship 考虑到答案具单调性(若第 \(i\) 天能到达目的点,第 \(i+1\) 天只需向风向相反的方向航行),可以二分答案. 现在要考虑给出一个天数 \(m\) ,问 ...

  4. 题解-Magic Ship

    Magic Ship 你在 \((x_1,y_1)\),要到点 \((x_2,y_2)\).风向周期为 \(n\),一个字符串 \(s\{n\}\) 表示风向(每轮上下左右),每轮你都会被风向吹走一格 ...

  5. CodeForces 1117C Magic Ship (循环节+二分答案)

    <题目链接> 题目大意: 给定起点和终点,某艘船想从起点走到终点,但是海面上会周期性的刮风,船在任何时候都能够向四个方向走,或者选择不走,船的真正行走路线是船的行走和风的走向叠加的,求船从 ...

  6. Codeforces 1117C Magic Ship (二分)

    题意: 船在一个坐标,目的地在一个坐标,每天会有一个风向将船刮一个单位,船也可以移动一个单位或不动,问最少几天可以到目的地 思路: 二分天数,对于第k天 可以分解成船先被吹了k天,到达坐标(x1+su ...

  7. Educational Codeforces Round 60 C 思维 + 二分

    https://codeforces.com/contest/1117/problem/C 题意 在一个二维坐标轴上给你一个起点一个终点(x,y<=1e9),然后给你一串字符串代表每一秒的风向, ...

  8. 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 ...

  9. Codeforces Round #350 (Div. 2) D1. Magic Powder - 1 二分

    D1. Magic Powder - 1 题目连接: http://www.codeforces.com/contest/670/problem/D1 Description This problem ...

随机推荐

  1. 设置MongoDB课程环境

    Setting Up Your Course Environment This course is designed to be very hands on. Virtually all of the ...

  2. 17.SQL 约束

    约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). 我们将主要探讨以下几种约束: NOT ...

  3. KMP算法细讲(豁然开朗)

    一.KMP算法是如何针对传统算法修改的 用模式串P去匹配字符串S,在i=6,j=4时发生失配: ---------------------------------------------------- ...

  4. BBS后台发送邮件&修改文章

    一:Django发送邮件 在setting中配置 # EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST ...

  5. 学习如何用VS2010创建ocx控件

    1参考文章 (1)这一篇将使用vc创建ocx控件:http://blog.csdn.net/jiadelin/article/details/2917225 (2)这一篇文章有关vs2010创建act ...

  6. 如何恢复VS2013代码实时校验功能

      VS2013在某一天突然无法进行实时代码校验了,只有在编译的时候,错误列表才显示语法错误 怎么来解决这个问题呢?试试环境重置吧. 首先:打开工具菜单,选择“导入和导出设置”. 其次:可以先导出选定 ...

  7. fork()的写时复制技术(转载)

    本文转载自http://www.cnblogs.com/wuchanming/p/4495479.html,为了方便以后查看... 写时复制技术最初产生于Unix系统,用于实现一种傻瓜式的进程创建:当 ...

  8. Codeforces 12D Ball(线段树)

    N ladies attend the ball in the King's palace. Every lady can be described with three values: beauty ...

  9. CentOS 进程操作

    ps -ef:查看所有进程, ps -ef |grap firewalld 查看与firewalld相关的进程 which :查看进程:which firewalld kill 进程id:杀掉进程 k ...

  10. 以太坊系列之十三: evm指令集

    evm指令集手册 Opcodes 结果列为"-"表示没有运算结果(不会在栈上产生值),为"*"是特殊情况,其他都表示运算产生唯一值,并放在栈顶. mem[a.. ...