Codeforce Round #438 C.Bus(贪心)

来源:互联网 发布:数控车g76编程实例 编辑:程序博客网 时间:2024/06/05 03:49

题目链接:Bus

#include <iostream>#include <cstdio>#include <fstream>#include <algorithm>#include <cmath>#include <deque>#include <vector>#include <queue>#include <string>#include <cstring>#include <map>#include <stack>#include <set>#define Max(a,b) a>b?a:b#define Min(a,b) a>b?b:a#define mem(a,b) memset(a,b,sizeof(a))using namespace std;typedef long long ll;int dir[4][2]= {{1,0},{-1,0},{0,1},{0,-1}};const double eps = 1e-6;const double Pi = acos(-1.0);const int INF=0x3f3f3f3f;ll fuel[10010];ll a,b,f,k;ll dis,ans;ll ind,now;bool flag;int main(){    while(~scanf("%lld%lld%lld%lld",&a,&b,&f,&k)){        mem(fuel,0);        flag = true;        fuel[0] = 0;        for(int i = 1; i <= k; i++){            if(i&1) fuel[i] = a*i - (a-f);            else fuel[i] = a*i - f;        }        fuel[k+1] = a*k;        dis = 0,ans = 0,now = 0;        while(dis < a*k){            ind = lower_bound(fuel,fuel+k+2,dis+b) - fuel;            if(fuel[ind] != dis+b){                ind = ind - 1;            }            if(ind == now){                flag = false; break;            }            now = ind;            dis = fuel[now];            ans++;        }        if(flag) printf("%lld\n",ans-1);        else printf("-1\n");    }    return 0;}