CodeForces - 1292B。Aroma's Search (暴力+思维)

Posted overrate-wsj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces - 1292B。Aroma's Search (暴力+思维)相关的知识,希望对你有一定的参考价值。

题意:

告诉一个点的位置,之后的点按照x[i]=x[i-1]*ax+bx;,y[i]=y[i-1]*ay+by的规律分布,初始时你站在一个位置,每秒可以往四个方向移动,问你在t内最多能走过多少个点

思路:

通过数据我们可以发现,在264就已经超过了1e16也就是t的范围了,因此地图内最多只有64个点

所以我们只需要暴力求出每一个点的坐标,再枚举你所走的点的起点与终点(只往一个方向走连续的点肯定是最优)

判断距离(从初始位置走到起点的距离再加上起点到终点的距离)是否小于t即可,求出一个最大值就是答案啊

#include<iostream>
#include<algorithm>
#include<cmath>
 using namespace std;
 typedef long long ll;
 ll x[70],y[70];
 ll dis(ll x1,ll y1,ll x2,ll y2)
 {
     return abs(x1-x2)+abs(y1-y2);
 }
 int main()
 {
     ll ax,ay,bx,by,xs,ys,t;
     int cnt=0;
     cin>>x[0]>>y[0]>>ax>>ay>>bx>>by;
     cin>>xs>>ys>>t;
     while(x[cnt]-xs<t&&y[cnt]-ys<t){
         cnt++;
         x[cnt]=x[cnt-1]*ax+bx;
         y[cnt]=y[cnt-1]*ay+by;
     }
    int ans=0;
    for(int i=0;i<=cnt;i++){
        for(int j=i;j<=cnt;j++){
            if(j-i+1<=ans) continue;
            ll temp=min(dis(x[i],y[i],xs,ys),dis(x[j],y[j],xs,ys));
            temp+=dis(x[i],y[i],x[j],y[j]);
            if(temp<=t) ans=j-i+1;
        }
    }
    cout<<ans<<endl;
    return 0;
 }

 

以上是关于CodeForces - 1292B。Aroma's Search (暴力+思维)的主要内容,如果未能解决你的问题,请参考以下文章

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

Aroma's Search CodeForces

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

N - Aroma's Search CodeForces - 1293D

暴力,贪心——cf1292B

CF1293D - Aroma's Search 思维