【Codeforces1117C_CF1117C】Magic Ship(构造)
题目:
考的时候很困,开局半小时后才过A,只做出来AB,排名3000+,掉了119……半夜体验极差。
翻译:
你是一个船长。最初你在点 \((x_1,y_1)\) (显然,大海上的所有点都可以用平面直角坐标描述),你想去点 \((x_2,y_2)\) 。
你看了天气预报——一个长为 \(n\) 的字符串 \(s\),只包含字母 U, D, L 和 R 。这些字母表示风向。并且,这个天气预报是循环的。例如,第一天风向是 \(s_1\) ,第二天是 \(s_2\) ,第 \(n\) 天是 \(s_n\) ,则第 \(n+1\) 天又是 \(s_1\) ,以此类推。
船的坐标按照如下方式改变:
如果风向是 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)\) 。
你的任务是确定移动到 \((x_2,y_2)\) 所需的最少天数。
输入
第一行包含两个整数 \(x_1,y_1\ (0\leq x_1,y_1\leq 1e9)\) ——船的初始坐标。
第二行包含两个整数 \(x_2,y_2\ (0\leq x_2,y_2\leq 1e9)\) ——目的地的坐标。
保证初始坐标与目的地的坐标不同。
第三行包含一个整数 \(n\ (1\leq n \leq 10^5)\) ——字符串 \(s\) 的长度。
第四行包含字符串 \(s\) ,只包含字母 U, D, L 和 R 。
输出
输出一行,移动到 \((x_2,y_2)\) 所需的最少天数。
如果不可能输出 \(-1\) 。
分析:
(以下这些“显然”的结论我在考场上一个都没看出来……)
首先答案具有可二分性。因为到达终点后每天都往与当天风向相反的方向航行就可以停留在原地。
由于无论在什么地方,风的影响都是一样的。所以相当于先被风吹 \(t\) 天,然后再在无风的情况下航行不超过 \(t\) 天到终点。即,算出被风吹 \(t\) 天后的坐标,如果到终点的曼哈顿距离不超过 \(t\) ,说明 \(t\) 合法,向下二分,否则向上二分。
通过类似前缀和的方式算出前 \(i\ (1\leq i \leq n)\) 天在风的影响下两维坐标的改变量 \(sumx[i]\) 和 \(sumy[i]\) ,则 \(t\) 天后的坐标是 \((x_1+\lfloor\frac{t}{n}\rfloor sumx[n]+sumx[t\mod n],y_1+\lfloor\frac{t}{n}\rfloor sumy[n]+sumy[t\mod n])\) 。
代码:
二分上界记着开充分大……
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
namespace zyt
{
typedef long long ll;
const int N = 1e5 + 10;
int x1, y1, x2, y2, n;
char s[N];
int sumx[N], sumy[N];
inline ll abs(const ll x)
{
return x < 0 ? -x : x;
}
int work()
{
scanf("%d%d%d%d%d%s", &x1, &y1, &x2, &y2, &n, s + 1);
for (int i = 1; i <= n; i++)
{
sumx[i] = sumx[i - 1], sumy[i] = sumy[i - 1];
if (s[i] == 'U')
++sumy[i];
else if (s[i] == 'D')
--sumy[i];
else if (s[i] == 'L')
--sumx[i];
else
++sumx[i];
}
ll l = 1, r = 1e18, ans = -1;
while (l <= r)
{
ll mid = (l + r) >> 1;
if (abs(x1 + (ll)sumx[n] * (mid / n) + sumx[mid % n] - x2)
+ abs(y1 + (ll)sumy[n] * (mid / n) + sumy[mid % n] - y2) <= mid)
r = mid - 1, ans = mid;
else
l = mid + 1;
}
printf("%lld", ans);
return 0;
}
}
int main()
{
return zyt::work();
}
【Codeforces1117C_CF1117C】Magic Ship(构造)的更多相关文章
- 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 ...
- C. Magic Ship cf 二分
C. Magic Ship time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 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\}\) 表示风向(每轮上下左右),每轮你都会被风向吹走一格 ...
- C. Magic Grid 构造矩阵
C. Magic Grid time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- 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 ...
- CodeForces 1117C Magic Ship (循环节+二分答案)
<题目链接> 题目大意: 给定起点和终点,某艘船想从起点走到终点,但是海面上会周期性的刮风,船在任何时候都能够向四个方向走,或者选择不走,船的真正行走路线是船的行走和风的走向叠加的,求船从 ...
- C. Magic Ship (思维+二分)
https://codeforces.com/contest/1117/problem/C 你是一个船长.最初你在点 (x1,y1) (显然,大海上的所有点都可以用平面直角坐标描述),你想去点 (x2 ...
- 【Codeforces 1117C】Magic Ship
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 我们可以把这个行船的过程分解成两个过程 1.船经过时间t被风吹到了某个地方 2.船用这t时间尝试到达终点(x2,y2) 会发现如果时间t能最终 ...
随机推荐
- STM32F103移值FreeRtos笔记
RTOS版本:FreeRTOS_V8.2.2 一.下载FreeRTOS源文件 这个可以在百度上下载,或者在官网上面下载http://www.freertos.org/a00104.html ...
- [bzoj2141][排队] (分块大法好)
Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的 ...
- POJ 1226 Substrings
Substrings Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID: ...
- [bzoj2055]80人环游世界[网络流,上下界网络流]
手动画了整张图,,算是搞懂了吧,, #include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; templat ...
- [洛谷P1114] “非常男女”计划
题目描述 近来,初一年的XXX小朋友致力于研究班上同学的配对问题(别想太多,仅是舞伴),通过各种推理和实验,他掌握了大量的实战经验.例如,据他观察,身高相近的人似乎比较合得来. 万圣节来临之际,XXX ...
- 藏妹子之处(excel)
问题描述: 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件: (1)任意两个单元格都不在同 ...
- JAVA内存模型与线程以及volatile理解
Java内存模型是围绕在并发过程中如何处理原子性.可见性.有序性来建立的. 一.主内存与工作内存 Java内存模型主要目标是在虚拟机中将变量存储到内存和从内存中取出变量.这里的变量包括:实例字段.静态 ...
- HDU——1133 Buy the Ticket
Buy the Ticket Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- something interesting when read docs
When you kill a session with "ALTER SYSTEM KILL SESSION '' ". If the session is performin ...
- [Angular] New in V6.1
Router Scroll Position Restoration: remember and restore scroll position as the user navigates aroun ...