D. Aroma‘s Search(思维)

Problem - 1293D - Codeforces

KIVΛ & Nikki Simmons - Perspectives
有了新的身体,我们的偶像Aroma White(或者我们应该叫她Kaori Minamiya?)开始通过OS空间揭开她失去的过去。

这个空间可以被认为是一个二维平面,有无限多的数据节点,从0开始索引,其坐标定义如下。

第0个节点的坐标是(x0,y0)
对于i>0,第i个节点的坐标是(ax⋅xi-1+bx,ay⋅yi-1+by)
最初,Aroma站在(xs,ys)点上。她最多可以在OS空间停留t秒,因为过了这个时间,她就必须翘头回到现实世界。她不需要返回到入口点(xs,ys)来翘辫子回家。

在操作系统空间内,Aroma可以做以下动作。

从(x,y)点开始,Aroma可以移动到以下其中一个点:(x-1,y), (x+1,y), (x,y-1) 或 (x,y+1)。这个动作需要1秒钟。
如果在香香呆的地方有一个数据节点,她可以收集它。我们可以假设这个动作需要0秒。当然,每个数据节点最多可以被收集一次。
Aroma想在返回之前尽可能多地收集数据。你能帮她计算一下,她在t秒内最多可以收集多少个数据节点?

输入
第一行包含整数x0, y0, ax, ay, bx, by (1≤x0,y0≤1016, 2≤ax,ay≤100, 0≤bx,by≤1016),它们定义数据节点的坐标。

第二行包含整数xs, ys, t (1≤xs,ys,t≤1016) - 初始Aroma的坐标和可用的时间量。

输出
打印一个整数--Aroma在t秒内能收集的最大数据节点数。

例子
inputCopy
1 1 2 3 1 0
2 4 20
outputCopy
3
输入复制
1 1 2 3 1 0
15 27 26
输出拷贝
2
输入复制
1 1 2 3 1 0
2 2 1
输出拷贝
0
注意
在所有三个例子中,前5个数据节点的坐标是(1,1), (3,3), (7,9), (15,27)和(31,81)(记住,节点的编号是从0开始的)。

在第一个例子中,收集3个节点的最佳路线如下。

到坐标(3,3)处,收集第1个节点。这需要|3-2|+|3-4|=2秒。
到坐标(1,1)处,收集第0个节点。这需要|1-3|+|1-3|=4秒。
到坐标(7,9)处,收集第2个节点。这需要|7-1|+|9-1|=14秒。
在第二个例子中,收集2个节点的最佳路线如下。

收集第3个节点。这不需要秒。
到坐标(7,9)处,收集第2个节点。这需要|15-7|+|27-9|=26秒。
在第三个例子中,Aroma不能收集任何节点。她应该适当休息,而不是像这样冲进操作系统空间。

题意:给你一组的点

(ax⋅xi−1+bx,ay⋅yi−1+by),求初始点出发t秒内可以经历多少点

题解:从数据范围入手,t<=1e16,又因为ax<=100.bx<=10且都>=2,所以顶多60多个点就结束了,剩下的一定大于1e16

其次以上数据均为正数,所以越下一个点越在右上

根据曼哈顿距离

d[i,i+1] +d[i+1,i+2] = d[i,i+2]

所以枚举区间起点,终点即可

#include<iostream>
#include<cmath>
using namespace std;
long long a[100050];
long long b[100050];
int main()
{
	long long x0,y0,ax,ay,bx,by,xs,ys,t;
	cin>>x0>>y0>>ax>>ay>>bx>>by>>xs>>ys>>t;
	int s = 0;
	a[0] = x0;
	b[0] = y0;
	while(1)
	{
		s++;
		a[s] = a[s-1]*ax +bx;
		b[s] = b[s-1]*ay +by;
		if(a[s]-xs>t||b[s]-ys>t)
		break;
	}
	int ans = 0;
	for(int i = 0;i < s;i++)
	{
		for(int j = 0;j < s;j++)
		{
			if(fabs(a[i]-xs)+fabs(b[i]-ys)+fabs(a[j]-a[i])+fabs(b[j]-b[i])<=t)
			{
				ans = max(ans,abs(i-j)+1);
				
			}
		}
	}
	cout<<ans;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蝴蝶算法(Butterfly Algorithm)是一种启发式算法,用于求解优化问题。它模拟蝴蝶飞行过程中的搜索和调整策略,以快速找到全局最优解。而香气计算(Aroma Computing)是一种基于化学元素相互作用的计算模型,用于解决优化问题。 在Matlab中,可以使用以下代码实现蝴蝶算法和香气计算: ```matlab %蝴蝶算法 n = 30; %粒子数量 T = 1000; %迭代次数 lb = -10; %变量下界 ub = 10; %变量上界 dim = 2; %变量维数 %初始化粒子位置和速度 x = repmat((ub-lb)*rand(n,dim)+lb,n,1); v = zeros(n,dim); %循环迭代 for t=1:T %计算适应度值 f = fitness(x); %更新个体最优位置和适应度值 [fmin,idx] = min(f); pbestx = x; pbestf = f; pbestx(idx,:) = repmat(x(idx,:),n,1); pbestf(idx) = repmat(fmin,n,1); %更新全局最优位置和适应度值 [gbestf,idx] = min(pbestf); gbestx = pbestx(idx,:); %更新速度和位置 v = rand(n,dim).*v + rand(n,dim).*(pbestx-x) + rand(n,dim).*(repmat(gbestx,n,1)-x); x = x + v; %边界处理 x(x<lb) = lb; x(x>ub) = ub; end %香气计算 n = 30; %化学元素数量 T = 1000; %迭代次数 c = 0.5; %浓度常数 alpha = 0.1; %扩散常数 beta = 0.01; %挥发常数 lb = -10; %变量下界 ub = 10; %变量上界 dim = 2; %变量维数 %初始化化学元素位置和浓度 x = repmat((ub-lb)*rand(n,dim)+lb,n,1); s = ones(n,1); %循环迭代 for t=1:T %计算适应度值 f = fitness(x); %计算相互作用力和扩散速率 f_ij = repmat(f,1,n) + repmat(f',n,1); d_ij = pdist2(x,x); h_ij = c * exp(-d_ij.^2 ./ alpha); f_i = sum(h_ij .* (repmat(s,1,n) .* repmat(s',n,1)),2); s_i = (1-beta) .* s + beta .* f_i; %更新位置 x = x + s_i .* randn(n,dim); %边界处理 x(x<lb) = lb; x(x>ub) = ub; end ``` 其中fitness函数是自定义的适应度函数,用于计算每个粒子的适应度值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值