首页 > 其他分享 >Aroma's Search

Aroma's Search

时间:2024-04-08 20:23:21浏览次数:23  
标签:Search 个点 point int tot Aroma cdot ys

Aroma's Seatch

题意简述

题目链接

一个二维平面内有无限个点,从 \(0\) 开始编号,编号为 \(0\) 的点的坐标为 \((x_{0} , y_{0})\)。对于一个编号为 \(i(i>0)\) 的点,它的坐标为 \((a_{x} \cdot x_{i-1}+b_{x},a_y \cdot y_{i-1}+b_{y})\)。Aroma 最开始在点 \((x_s,y_s)\) 处,她每秒钟可以向上、下、左、右移动一个单位长度,求 \(t\) 秒内她最多能经过几个点(重复经过只算一次)。

题目分析

观察题目,我们能发现几个性质:

  1. 点与点之间的距离随着编号的增加而增加,即点会变得越来越稀疏。

  2. 对于一个编号为 \(i(i>0)\) 的点,从第 \(0\) 个点出发走到第 \(i\) 个点所用的时间一定小于从第 \(i\) 个点出发走到第 \(i+1\) 个点的时间。

性质 \(1\) 比较显然,下面我们来证明性质 \(2\):

观察点与点之间的关系以及数据范围我们可以发现,当 \(a_{x}=2,b_{x}=0\) 时,点的分布是最密集的。这里我们以 \(x\) 坐标举例(以下,\(Xdist(A,B)\) 表示点 \(A\) 与点 \(B\) 之间在 \(x\) 坐标上的距离)。

\[Xdist(P_{i},P{i+1})=(a_{x} \cdot x_{i}+b_{x})-x_i=2 \cdot x_{i}-x_{i}=x_{i} \]

\[Xdist(P_0,P_i)=x_i-x_0 \]

因为 \(x_0 \geq 1\),所以 \(Xdist(P_i,P_{i+1}) > Xdist(p_i,0)\),在 \(y\) 坐标上也是一样。

于是我们可以想出一个贪心策略,枚举点 \(P_i\) 从起始点开始走到 \(P_i\),然后向靠近第 \(0\) 个点的方向走,如果已经走到了第 \(0\) 个点但是时间仍有剩余就原路返回向远离的 \(0\) 个点的方向走。

下面我们来证明贪心策略是正确的:

当我们从 \(p_i\) 开始向远离第 \(0\) 个点的方向走时,有

\[dist(P_i,P_{i+1})+dist(P_{i+1},p_{i+2})>2\cdot dist(0,p_i) \]

这意味着,如果向远离第 \(0\) 个点的方向走,经过了两个点时,如果向靠近第 \(0\) 个点的方向走就可以走一个来回,并经过了 \(i\) 个点。

Code

#include<bits/stdc++.h>
#define int long long
#define y1 yy
using namespace std;
int ax,ay,bx,by,xs,ys,t,tot,ans;
struct node{
	int x,y;
}point[100005];
inline int dis(int x1,int y1,int x2,int y2){
	return llabs(x1-x2)+llabs(y1-y2);
}
signed main(){
	cin>>point[0].x>>point[0].y>>ax>>ay>>bx>>by>>xs>>ys>>t;
	while(!(point[tot].x>xs && point[tot].y>ys && dis(xs,ys,point[tot].x,point[tot].y)>t)){
		point[++tot].x=point[tot-1].x*ax+bx;
		point[tot].y=point[tot-1].y*ay+by;
	}
	for(int i=0;i<=tot;i++){
		int sum=0,temp=t;
		if(dis(point[i].x,point[i].y,xs,ys)>temp) continue;
		else{
			temp-=dis(point[i].x,point[i].y,xs,ys);
			sum++;
		}
		for(int j=i;j>0;j--){
			if(dis(point[j].x,point[j].y,point[j-1].x,point[j-1].y)<=temp){
				temp-=dis(point[j].x,point[j].y,point[j-1].x,point[j-1].y);
				sum++;
			}
			else{
				break;
			}
		}
		for(int j=1;j<=tot;j++){
			if(dis(point[j].x,point[j].y,point[j-1].x,point[j-1].y)<=temp){
				temp-=dis(point[j].x,point[j].y,point[j-1].x,point[j-1].y);
				if(j>i) sum++;
			}
			else break;
		}
		ans=max(ans,sum);
	}
	cout<<ans;
	return 0;
}

标签:Search,个点,point,int,tot,Aroma,cdot,ys
From: https://www.cnblogs.com/ZnHF/p/18122440

相关文章

  • linux 环境下 elasticsearch 及 python 相关库的使用
    -elasticsearch是什么?elasticsearch简称es,是一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能。-安装1、下载官网下载地址2、解压tarzxvfelasticsearch-8.13.0-linux-x86_64.tar.gz-C/usr/local/3、解决JDK依赖问题新版本的es压缩......
  • elasticsearch-head的安装和使用
    一、elasticsearch-head插件介绍elasticsearch-head是elasticsearch的一款可视化工具,依赖于node.js,所以需要先安装node.js二、安装Node.js详情见文章nodejs安装和使用三、安装Grunt这一步可不做#Grunt是基于Node.js的项目构建工具。grunt作为一个前端构建工具,有资源......
  • 广度优先搜索 Breadth-First Search(BFS)
    问题引入​对于每一个问题,都会有相应的解,在之前的学习中求解的过程,都是以一条条线的形式产生可能解进行筛选验证是否正确。本章节我们来考虑另外一种思路,类似于洪水爆发,从一个源头开始逐渐蔓延开来,直到所有可达的区域都被洪水淹没,所以我们也把这种算法称之为洪泛法。洪泛法会......
  • Elasticsearch 配置与测试分析器 (2)
    一.配置文本分析器(Configuretextanalysis) 默认情况下,Elasticsearch使用standard分析器来进行文本分析,如果使用该分析器,则不用额外的配置。如果不满足,可以使用其它内置分析器,也可以创建自定义的分析器更好的控制,通常在生产实战中都是自定义分析器,方便更好扩展。 ......
  • Elasticsearch,使用scroll实现遍历(分页)查询
    为什么要使用scroll查询在使用es中,当某个index存贮的数据超过10000时,只能查询到10000的数据。因为index.max_result_window默认值是10000。并且使用游标查询可以在一次查询中获取大量文档,并且保持查询快照状态,允许用户多次检索数据而不影响其他并发请求。scroll查......
  • elasticsearch mapping
    1 概念:​ ES中的mapping有点类似与RDB中“表结构”的概念,在MySQL中,表结构里包含了字段名称,字段的类型还有索引信息等。在Mapping里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性,并且在ES中一个字段可以有对个类型。分词器、评分等概念在......
  • Elasticsearch 认识分词(1)
    一.概述分词是构建倒排索引的重要一环。根据语言不同可以分为英文分词、中文分词等;根据分词实现的不同又分为标准分词器、空格分词器、停用词分词器等。在传统的分词器不能解决特定业务场景的问题时,往往需要自定义分词器。1.1认识分词对于分词操作来说,英语单词......
  • Elasticsearch-定制分词器
    一、内置分词器分词步骤1).characterfilter:在一段文本进行分词之前,先进行预处理,eg:最常见的过滤html标签(hello->hello),&->and(I&you->Iandyou)2).tokenizer:分词,eg:helloyouandme->hello,you,and,me3).tokenfilter:一个个小单词标准化转换lower......
  • 使用阿里云试用Elasticsearch学习:1.1 基础入门——入门实践
    阿里云试用一个月:https://help.aliyun.com/search/?k=elastic&scene=all&page=1官网试用十五天:https://www.elastic.co/cn/cloud/cloud-trial-overviewElasticsearch中文文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_document_oriented.html控制台......
  • python 插值搜索-迭代与递归(Interpolation Search)
             给定一个由n个均匀分布值arr[]组成的排序数组,编写一个函数来搜索数组中的特定元素x。         线性搜索需要O(n)时间找到元素,跳转搜索需要O(?n)时间,二分搜索需要O(logn)时间。插值搜索是对实例二分搜索的改进,其中排序数组中的值是......