emmmmmmm……卡了好久啊……看着数据改了好久……
就……模拟……模拟……我的想法是把每次算来回两次的,这样最后一次的时候就需要特判一下……
emmmm然后WA了,然后发现,其实……还需要再加两个特判,k=1||k=2;
智商不够代码来凑的痛……其实好多情况可以合并的……有更简洁的方法的……QAQ
#include<iostream> #include<string> #include<string.h> #include<cmath> #include<algorithm> #include<map> using namespace std; typedef long long ll; ll a, b, f, k; int main() { while (cin >> a>>b>>f>>k) { int cnt = 0; if (b < f||b<a-f) //k==1 { cout << "-1" << endl; continue; } if (k == 1) { b -= f; if (b < (a - f)) cnt++; cout << cnt << endl; continue; } if (b < 2 * (a - f)) //k==2; { cout << "-1" << endl; continue; }int c = b,i; if (k == 2) { b -= f; if(b<2*(a-f)) { b = c; cnt++; } b -= 2 * (a - f); if (b < f) { cnt++; } cout << cnt << endl; continue; } if (b < 2 * f) { cout << "-1" << endl; continue; } b -= f; for(i=1;i<k-1;i+=2) { if (b < 2 * (a - f)) { b = c; cnt++; } b -= 2 * (a - f); if (b < 2 * f) { b = c; cnt++; } b -= 2 * f; } if (i==k) { if (b < a-f) cnt++; cout << cnt << endl; } else { if (b < 2 * (a - f)) { b = c; cnt++; } b -= 2 * (a - f); if (b < f) { b = c; cnt++; } cout << cnt << endl; } } return 0; }