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

題意:ios

告訴一個點的位置,以後的點按照x[i]=x[i-1]*ax+bx;,y[i]=y[i-1]*ay+by的規律分佈,初始時你站在一個位置,每秒能夠往四個方向移動,問你在t內最多能走過多少個點
spa

思路:code

經過數據咱們能夠發現,在264就已經超過了1e16也就是t的範圍了,所以地圖內最多隻有64個點blog

因此咱們只須要暴力求出每個點的座標,再枚舉你所走的點的起點與終點(只往一個方向走連續的點確定是最優)token

判斷距離(從初始位置走到起點的距離再加上起點到終點的距離)是否小於t便可,求出一個最大值就是答案啊ci

#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;
 }
相關文章
相關標籤/搜索