Codeforces Round #614 (Div. 2) D - Aroma's Search(暴力)

在这里插入图片描述
在这里插入图片描述
题意:给定初始的坐标(x0,y0),后面的(x1,y1),(x2,y2)…(xn,yn)将有这个递推式求出(axXi-1+bx,ayYi-1+by)得出,这些坐标表示作者想吃的坐标,作者一开始坐标在(xs,ys),每次上下左右移动都会花费1s,问在t秒内作者能吃的点的做大数目。
思路:其实胆子大一点暴力就行了。。。因为这个递推式可以得出可以吃的点是连续的,而且数目也不会很多,直接递推求就行了,至于吃哪些点的话暴力一个个枚举求就行了。

#include <bits/stdc++.h>
const int maxn=1e5+1;
using namespace std;
typedef long long ll;
const ll inf=1e16+1;
int main()
{
	ll x[maxn],y[maxn],ax,bx,ay,by,xs,ys,cnt=0,tot;
	int ans=0;
	scanf("%lld %lld %lld %lld %lld %lld",&x[0],&y[0],&ax,&ay,&bx,&by);
	while(x[cnt]<inf&&y[cnt]<inf)
	{
		cnt++;
		x[cnt]=ax*x[cnt-1]+bx;
		y[cnt]=ay*y[cnt-1]+by;
	}
	scanf("%lld %lld %lld",&xs,&ys,&tot);
	for(int i=0;i<=cnt;++i)
	for(int j=i;j<=cnt;++j)
	{
		ll t=min(abs(xs-x[i])+abs(ys-y[i]),abs(xs-x[j])+abs(ys-y[j]));
		t+=(abs(x[j]-x[i])+abs(y[j]-y[i]));
		if(t<=tot) ans=max(ans,(j-i+1));
	}
	printf("%d\n",ans);
}
发布了39 篇原创文章 · 获赞 0 · 访问量 1075

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/104062169