【Codeforces 1117C】Magic Ship
【链接】 我是链接,点我呀:)
【题意】
题意
【题解】
我们可以把这个行船的过程分解成两个过程
1.船经过时间t被风吹到了某个地方
2.船用这t时间尝试到达终点(x2,y2)
会发现如果时间t能最终能到达(x2,y2)的话
对于任意的时间t1>t,t1也能到达。
因为对于t后面的时间,比如t+1,那么风最多把船往偏离终点x,y的方向吹了一下,这一下总是能让多出来的时间(1单位时间)补回来的。
那么t-(船被吹了之后的位置与(x2,y2)的曼哈顿距离)肯定会随着t的增大而不下降。所以总是能到达的
所以它总是有一个下界的时间t1的。
我们只要二分这个时间t1就好
按照上面的思路,二分,然后判断船被吹了以后,能否到达(x2,y2),如果不能到就增加时间
【代码】
#include <bits/stdc++.h>
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i>= b;i--)
#define ll long long
using namespace std;
const int N = 1e5;
ll x1,y1,x2,y2,n;
ll pre[N+10][2];
string s;
ll get_mhd(ll x1,ll y1,ll x2,ll y2){
return abs(x1-x2)+abs(y1-y2);
}
bool ok(ll t){
ll xx = t/n*pre[n][0] + pre[(long long)t%n][0];
ll yy = t/n*pre[n][1] + pre[(long long)t%n][1];
ll tx = x1 + xx,ty = y1 + yy;
ll temp = get_mhd(tx,ty,x2,y2);
if (temp<=t) return true;
return false;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0);
cin >> x1 >> y1 >> x2 >> y2;
cin >> n;
cin >> s;
rep1(i,0,(int)s.size()-1){
rep1(j,0,1) pre[i+1][j] = pre[i][j];
if (s[i]=='U'){
pre[i+1][1]++;
}
if (s[i]=='D'){
pre[i+1][1]--;
}
if (s[i]=='L'){
pre[i+1][0]--;
}
if (s[i]=='R'){
pre[i+1][0]++;
}
}
ll l = 1,r = 2e14,temp = -1;
while (l<=r){
ll mid = (l+r)>>1;
if (ok(mid)){
temp = mid;
r = mid - 1;
}else l = mid + 1;
}
cout<<temp<<endl;
return 0;
}
【Codeforces 1117C】Magic Ship的更多相关文章
- 【Codeforces 1110E】Magic Stones
Codeforces 1110 E 题意:给定两个数组,从第一个数组开始,每次可以挑选一个数,把它变化成左右两数之和减去原来的数,问是否可以将第一个数组转化成第二个. 思路: 结论:两个数组可以互相转 ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【codeforces 711B】Chris and Magic Square
[题目链接]:http://codeforces.com/contest/711/problem/B [题意] 让你在矩阵中一个空白的地方填上一个正数; 使得这个矩阵两个对角线上的和; 每一行的和,每 ...
- 【63.73%】【codeforces 560A】Currency System in Geraldion
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- 【codeforces 707C】Pythagorean Triples
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
- 【codeforces 709D】Recover the String
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
- 【codeforces 709B】Checkpoints
[题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...
- 【codeforces 709C】Letters Cyclic Shift
[题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...
随机推荐
- [POI2008]KUP
Description 给一个\(n\times n\)的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个\(n\times ...
- 题解报告:hdu 1230 火星A+B(字符串)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1230 Problem Description 读入两个不超过25位的火星正整数A和B,计算A+B.需要 ...
- java中实参与形参的概念
形参: public void fun(形参类型 形参名){ ... } 实参: public static void main(String[] args){ 类 对象名=new 类(); 对象名. ...
- UnixTime的时间戳的转换
public static string XConvertDateTime(double unixTime) { System.DateTime time = System.DateTime.MinV ...
- Vue.js学习笔记--4. 组件的基本使用
整理自官网教程 -- https://cn.vuejs.org/ 1. 所有Vue组件同时也都是Vue实例,分为全局组件和局部组件,注册方式如下. <div id="app" ...
- Objective-C 里面的类对象复用小结
OC 提供了单继承 (Inheritance), Category, Extension, Protocol 这几种基本的类与对象层面的复用机制,作一小结. 在这几个机制中,继承提供了纵向的复用,可以 ...
- getDate() 各种时间格式
Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVERT(varchar(100), GETDATE() ...
- 迅为iTOP-4418开发板串口虚拟控制台配置为普通串口
如何将 iTOP-4418 的串口控制台配置为普通串口.在最终的产品中,如果需要额外的串口,可以将调试用的控制台串口作为普通串口使用,因为交付给最终用户手中的产品,一般不需要调试串口.屏蔽串口控制台需 ...
- swift 多态函数方式
1.v-table: class 2.WitnessTable protocol 3.消息派发. @objc dynamic
- template or render function not defined.
template or render function not defined. H_婷 关注 2018.08.16 17:22 字数 106 阅读 3859评论 0喜欢 2 下午写 Vue $par ...