Codeforces Round #621 (Div. 1 + Div. 2)B Cow and Friend
Posted wyh447154317
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #621 (Div. 1 + Div. 2)B Cow and Friend相关的知识,希望对你有一定的参考价值。
第一感觉最小步数只和移动距离的最大值有关
对于任一移动距离a,水平移动距离范围0~a 而跳两步水平移动距离范围0~2a 且两步对称 就能回到x轴 这样就和纵坐标无关了
贪心策略:水平跳动amax,直到剩下距离amax<res<2amax或为0,显然可以两步到达
证明:水平跳动显然amax最优,对于剩下的距离只用amax需要两步 其他移动距离或组合也至少需要两步 因为amax<res<2amax 而amax又是最大移动距离
此时答案$max(2,ceil(frac{a}{b}))$ 当然还存在一些可行解对于前一部分采取的策略可能是水平跳动其他距离或组合 代入前面的式子 显然不会比amax更优
注意:需要特判一步就能到的
官方:
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=105; int a[N]; int main(){ int T; ios::sync_with_stdio(false);cin.tie(0); cin>>T; while(T--){ int n,d; cin>>n>>d; for(int i=1;i<=n;i++)cin>>a[i]; int ans=a[1]; for(int i=2;i<=n;i++) if((i-1)*a[i]<=d){ d-=(i-1)*a[i]; ans+=a[i]; } else{ ans+=d/(i-1);break; } cout<<ans<<endl; } return 0; }
以上是关于Codeforces Round #621 (Div. 1 + Div. 2)B Cow and Friend的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #621 (Div. 1 + Div. 2) 题解
Codeforces Round #621 (Div. 1 + Div. 2)D dij(思维)
Codeforces Round #621 (Div. 1 + Div. 2)A-C简单记录
Codeforces Round #621 (Div. 1 + Div. 2) D