这题就是确定一个点,然后去找能够实现最短距离的点且距离最远的点,因为题目要求点最少。在查找时,如果从最后的点开始枚举,找到的第一个满足距离最短的点一定是最远点,但是查找的复杂度是O(n),共有n次查找,O(n^2)的复杂度题目数据无法承受,因此可以考虑二分查找,以起点的下一个点直到最后一个点的区间作为查找对象,每次选取中点作为更新区间的上限和下限的标准,如果中点到起点是最短距离就更新下限为中点,否则上限是中点,推出的时候处理一下就行。之所以能够这样更新区间是因为,如果有一个点不能满足最短距离,那么在它后面的点也无法满足最短距离。

AC代码:

#include<cstdio>
const int maxn=2e5+5;
char s[maxn];
struct node{
	int x,y;
	node(){}
	node(int x,int y):x(x),y(y){
	}
}p[maxn];
int abs(int a){
	return a<0?(-a):a;
}
int bound(int x,int y){
	int z=x-1;
	while(x<y){
		int k=(x+y)/2;
		int d=abs(p[k].x-p[z].x)+abs(p[k].y-p[z].y);
		int h=k-z;
		if(d==h) x=k;
		else if(d<h) y=k;
		if(x==y-1) break;
	}
	return x;
}
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		scanf("%s",s);
		int x=0,y=0;
		p[0]=node(0,0);
		for(int i=1;i<=n;++i){
			if(s[i-1]=='R') ++y;
			else if(s[i-1]=='L') --y;
			else if(s[i-1]=='U') --x;
			else ++x;
			p[i]=node(x,y);
		}
		int ans=0;
		for(int i=0;i<n;){
		//利用二分查找实现快速查找  否则会超时
			i=bound(i+1,n+1);
			++ans;
		}
		printf("%d\n",ans);
	}
	return 0;
}

如有不当之处欢迎指出!



CodeForces-748C的更多相关文章

  1. CodeForces 748C Santa Claus and Robot (思维)

    题意:给定一个机器人的行走路线,求最少的点能使得机器人可以走这样的路线. 析:每次行走,记录一个方向向量,每次只有是相反方向时,才会增加一个点,最后再加上最后一个点即可. 代码如下: #pragma ...

  2. CodeForces - 748C Santa Claus and Robot

    题意:机器人在网格线上行走,从p1点开始,沿最短路径到p2,再沿最短路径到p3,依此类推.在此过程中留下了行走的运动轨迹,由“RLDU”表示.问若只给出运动轨迹,求最少的pi点的个数. 分析:pi到p ...

  3. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  4. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  5. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  6. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  7. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  8. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  9. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  10. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

随机推荐

  1. Python 中if的使用

    reference  : https://docs.python.org/3/reference/expressions.html#conditional-expressions 6.11. Cond ...

  2. cursor的moveToNext()与moveToFirst()

    String sql = "select count(*) as c from sqlite_master where type ='table' and name ='" + t ...

  3. Git分支管理[三]

    标签(linux): git 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 git分支管理命令 git branch #创建分支 git branch -v # ...

  4. Eclipse使用EGit,commit之后仍显示NO HEAD的解决方法

    由于以前做的项目一直用的都是svn,想试一下git尝尝鲜,遇见点问题.记录下来防止以后再出现这种情况,同时希望能帮助到和我一样的初学者. 问题描述: 右键项目-->team-->commi ...

  5. JDK安装及Tomcat安装

    JDK安装及Tomcat安装 JDK 解压JDK到常用盘符 D为例 Tomcat安装 将tomcat.zip解压到常用的根目录下,我这里以D盘为例.这样就算安装好了! 接下来开始配置环境变量,打开环境 ...

  6. WPF中获取系统本身自带的控件模板(XAML)

    每个控件都有自己默认的模板,这是MS本身就编写好的,如果我们能够得到这些模板的XAML代码,那么它将是学习模板的最好的示例,要想获得某个控件ctrl的默认模板,请调用以下方法: string GetT ...

  7. JAVA 调用 R 语言之升华篇

    由于项目的需要,最近做了一个javaWeb调用R的组件,在这里,我把自己走的一些弯路给大家总结一下: 一.选取什么插件作为java和R之间的通信? 1. 在传统的方式中,大致可以分为两类:一类是JRI ...

  8. javascript中的字符串对象和数组对象

    1.javascript的对象的概念 在javascript中,除了null和undefined以处,其他的数据类型都被定义成了对象 也可以用创建对象的方法定义变量,string,math,array ...

  9. Spring mybatis源码学习指引目录

    前言: 分析了很多方面的mybatis的源码以及与spring结合的源码,但是难免出现错综的现象,为了使源码陶冶更为有序化.清晰化,特作此随笔归纳下分析过的内容.博主也为mybatis官方提供过pul ...

  10. Linux根据UUID自动挂载磁盘分区

    一般服务器都有多个硬盘分区,在重启后,这些分区的逻辑位置加载时可能会发生变动,如果使用传统的设备名称(例如:/dev/sda)方式挂载磁盘,就可能因为磁盘顺序变化而造成混乱. Linux环境中每个Bl ...