码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-01-20 09:50:33      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:http   枚举   span   include   clu   开始   i+1   syn   abs   

原题题面:https://codeforces.com/contest/1293/problem/D

 

题目大意:

Aroma想要找数据
第0个数据再x0,y0这个点
其后所有数据所在的坐标点满足
x[i]=x[i-1]*ax+bx
y[i]=y[i-1]*ay+by
Aroma一开始在点(xs,ys),她最多只能走t步
两点间的距离用Δx+Δy表示
问Aroma最多能走到多少个点(找到多少个数据)?

 

解题思路:
因为ax和ay是大于等于2的整数
所以序号越大点越离散
所以最多只有log1e16约等于60个点
贪心枚举第一步要去的点i,然后从i开始先往点的序号小的点走 i-1, i-2 ,... 0
如果步数t还有剩余再烤炉i+1以上的点
记录每次枚举可以到达的点的个数,取最大输出

 1 /*
 2 Written By. StelaYuri
 3 On 2020/01/19
 4 */
 5 #include<bits/stdc++.h>
 6 using namespace std;
 7 typedef long long ll;
 8 const ll e16=1e16;
 9 ll x[150],y[150];
10 void solve(){
11     ll x0,y0,ax,ay,bx,by,xs,ys,t;
12     cin>>x0>>y0>>ax>>ay>>bx>>by>>xs>>ys>>t;
13     x[0]=x0;
14     y[0]=y0;
15     ll i,j,mxn,ans,ansd,td;
16     for(i=1;x[i-1]<=e16&&y[i-1]<=e16;i++){
17         x[i]=x[i-1]*ax+bx;
18         y[i]=y[i-1]*ay+by;
19     }
20     mxn=i-1;
21     ans=0;
22     for(i=0;i<=mxn;i++){
23         ansd=0;
24         td=t;
25         if((td=td-abs(xs-x[i])-abs(ys-y[i]))>=0)
26             ansd++;
27         for(j=i-1;j>=0&&td>0;j--){
28             if((td=td-abs(x[j+1]-x[j])-abs(y[j+1]-y[j]))>=0)
29                 ansd++;
30         }
31         if(td>0&&(td=td-abs(x[i+1]-x[0])-abs(y[i+1]-y[0]))>=0)
32             ansd++;
33         for(j=i+2;j<=mxn&&td>0;j++){
34             if((td=td-abs(x[j]-x[j-1])-abs(y[j]-y[j-1]))>=0)
35                 ansd++;
36         }
37         ans=max(ans,ansd);
38     }
39     cout<<ans<<endl;
40 }
41 int main(){
42     ios::sync_with_stdio(0);
43     cin.tie(0);cout.tie(0);
44     solve();
45     
46     return 0;
47 }

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

标签:http   枚举   span   include   clu   开始   i+1   syn   abs   

原文地址:https://www.cnblogs.com/stelayuri/p/12216186.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!