标签:Search ll arr CodeForces 1293D ans y0 x0 宝藏
作为DIV2的D题来讲,这个题目不算难。 题目大意:再规定的时间内寻找宝藏,第i个宝藏的位置为a*x(i-1)+b,a*y(i-1)+b。然后给出初始位置xs,ys和时间t让求再时间t内能够寻找到多少宝藏。
题解:
两相邻的宝藏的坐标差一定是最小的。所以答案一定是连续的一组坐标。注意数据范围x的范围是2e16,a最小是2,所以最多也就60多个宝藏,直接暴力起点终点就行。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll N=1E3+7; ll limit=2e16; struct stu{ ll x,y; }arr[N]; ll dis(ll x,ll y){ return (ll)abs(arr[x].x-arr[y].x)+(ll)abs(arr[x].y-arr[y].y); } int main() { ll x0,y0,a1,a2,b1,b2; cin>>x0>>y0>>a1>>a2>>b1>>b2; ll xs,ys,t; cin>>xs>>ys>>t; arr[0].x=x0; arr[0].y=y0; int pos=1; ll x=x0,y=y0; for(ll i=1;i<=100;i++){ x=x*a1+b1; y=y*a2+b2; if(x>=limit||y>=limit) break; arr[pos].x=x; arr[pos++].y=y; } ll ans=0; for(ll i=0;i<pos;i++){ for(ll j=0;j<pos;j++){ if(dis(i,j)+(ll)abs(xs-arr[i].x)+(ll)abs(ys-arr[i].y)<=t){ if(j>i) ans=max(ans,j-i+1); else ans=max(ans,i-j+1); } } } cout<<ans<<endl; return 0; }
标签:Search,ll,arr,CodeForces,1293D,ans,y0,x0,宝藏 来源: https://www.cnblogs.com/Accepting/p/12241352.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。