标签:continue mat i++ 多少 题意 需要 code cin turn
题意:
告诉一个点的位置,之后的点按照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 (暴力+思维)
标签:continue mat i++ 多少 题意 需要 code cin turn
原文地址:https://www.cnblogs.com/overrate-wsj/p/12293603.html