C
题意:给定路程为a,油量为b,加油站为f,进行k次路程,问进行k次路程需要加几次油。
题解:先要判断下第一次和最后一次,然后根据f*2和(a-f)*2判断x有没有大于它,再根据奇数次还是偶数次用f*2和a-f*2判断。
代码:
#include<stdio.h> #include<iostream> #include<string.h> #include<string> #include<algorithm> #include<queue> #include<functional> typedef long long LL; #define maxn 300005 using namespace std; vector<int>arr[maxn]; LL n, a, b, k, f,flag,ans,d1,d2,mark,now; int main() { cin >> a >> b >> f >> k; d1 = f, d2 = a - f; mark = 1; now = b; while (k&&!flag) { if (mark%2) { if (now < d1) { flag = 1; break; } else { now -= d1; if (now < 2 * d2&&k!=1) { if (b < d2) { flag = 1; break; } else { now = b - d2; ans++; } } else if (k == 1) { if (now < d2) { if (b < d2) { flag = 1; break; } else { ans++; } } } else if (now >= d2*2) { now -= d2; } } } else { if (now < d2) { flag = 1; break; } else { now -= d2; if (now < d1 * 2 && k != 1) { if (b < d1) { flag = 1; break; } else { ans++; now = b - d1; } } else if (k == 1) { if (now < d1) { if (b < d1) { flag = 1; break; } else { ans++; } } } else if (now >= 2 * d1) { now -= d1; } } } mark++; k--; } if (!flag) cout << ans << endl; else cout << -1 << endl; return 0; }