首页 > 其他分享 >CF1292B 题解

CF1292B 题解

时间:2024-04-08 17:13:18浏览次数:32  
标签:个点 point int 题解 tot cdot ys CF1292B

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;
}

标签:个点,point,int,题解,tot,cdot,ys,CF1292B
From: https://www.cnblogs.com/ZnHF/p/18121744

相关文章

  • CF1744F MEX vs MED 题解
    题目传送门题目大意给定一个数列,求满足\(\operatorname{mex}(a_l\sima_r)>\operatorname{med}(a_l\sima_r)\)的区间\([l,r]\)的个数。解题思路记\(p_i\)为\(i\)出现的位置。我们可以枚举\(d\),先确定\(\operatorname{mex}(a_l\sima_r)>d\)的区间。由于数列是\(......
  • CF1951E No Palindromes 题解
    题目大意给出一个字符串sss,要求将sss分为若干个非回文子串,输出......
  • 谢启鸿高等代数第四版习题7.7部分习题解析part2.以及部分第7章复习题
    7.7部分定理:以为特征值的K阶若当块个数为11.设n阶矩阵A的特征值全为1,求证:对任意的正整数K,与A相似。证明:=(易证故此处不再证明)而且的特征值全为1。的特征值为1的k阶若当块的个数为接下来只需证明相似于即可;即证明两者有相同的约当标准型.由书上7.8节的数学归纳可以知道......
  • Unity编辑器中运行正常,发布后报shader为null异常问题解决方案
    在Unity中,Shader是从代码中进行加载的,编辑器中并没有引用。在编辑器中运行项目没有问题,但当项目发布到移动平台,如ios、android、UWP之后,游戏中并不能找到对应的shader。因为Shader在场景中并未被引用,所以没有被打包。解决办法1在ProjectSettings里面的Graphics,添加上修改的打包......
  • P4462 题解
    题目传送门请确保您接触过莫队再阅读此文:对于所有询问,和普通莫队一样的分块然后排序。在这里只讨论add和del操作的具体实现。题目中需要求一段区间的异或值,所以我们可以预处理序列\(a\)的“前缀异或值”pre_xor,题目中的\(a_x\bigoplusa_{x+1}\bigoplus\dots\bigopl......
  • ABC348G题解
    令\(f_i\)为当\(k=i\)时的答案。令\(g_i\)为\(f_i+\max\limits_{j\inS}b_j\)。也就是不减去\(b\)的最大值的结果。直接做是\(O(n^2)\)的,考虑分治,令两个子问题的\(f,g\)分别为\(fl,gl\)和\(fr,gr\)。合并的时候做一个\[f_i=\max(\max\limits_{c+d=i}(gl_c+fr......
  • 蓝桥杯嵌入式2023年第十四届省赛主观题解析
    1 题目2 代码/*Includes------------------------------------------------------------------*/#include"main.h"#include"adc.h"#include"rtc.h"#include"tim.h"#include"gpio.h"/*Privateinclud......
  • Hetao P1178 冒险者 题解 [ 绿 ][ 最短路 ][ 线性 dp ]
    原题题解本蒟蒻采用的和大部分人解法不同,是根据当前标记值的总和跑最短路的一种解法。思路30min,调代码2h的我太蒻了首先观察题面可以发现本题求的是最少操作数,由于要求最小且有变化的过程,所以可以使用dp求解,也可以使用最短路算法求解,本篇先介绍最短路的算法。其实......
  • ABC218E Destruction题解
    ABC218EDestruction题解题意给你一个\(n\)个点\(m\)条边的带权无向联通图,你可以删去任意条边,要求保证图联通的情况下删去边的权值和最大。\((n\le2\cdot10^5\,\m\le2\cdot10^5\,\-10^9\lee_i\le10^9)\)(\(e_i\)为边权)分析首先我们考虑边权全为正的情况,那么我们删......
  • 【解题报告】RbOI Round 1,A&D题解
    【RbOIR1】A&D题解其他题题解请移步B、C点击图片跳转比赛:A.AnxiousRobin从左到右扫一遍,按照题意模拟即可。这里解释一下我的代码:因为只判断了六种字母,所以遇到-会直接过滤,无需特判。展开代码#include<bits/stdc++.h>#definelllonglong#defineMyWifeCrista......