Здравствуйте, Кодт:
| Еще одна попытка |
| #include <stdio.h>
#include <vector>
#include <math.h>
using namespace std;
typedef double minutes;
minutes F(minutes w);
int cnt(0);
int n;
int vmax, d;
vector<double> x;
vector<double> t;
int main()
{
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
scanf("%d%d%d", &vmax, &d, &n);
if(n==0)
{
printf("00:00\n");
return 0;
}
x.assign(n,0.0);
t.assign(n,0.0);
int hh, mm;
for(int i=0; i<n; ++i) {
scanf("%lf %d:%d", &x[i], &hh, &mm);
t[i]=hh*60.0+mm;
}
int s = x[n-1];
for(int i=1; i<n; i++) x[i] -= x[i-1];//x[i] - расстояния между цветами
minutes time;
minutes tlast = t[n-1];
minutes wmin = 0.0, wmax = tlast;
const minutes epsilon = 0.1;
while(wmax-wmin > epsilon) {
minutes wmed = (wmin+wmax)/2.0;
time = F(wmed);
if (time >= tlast)
wmax = wmed;
else
wmin = wmed;
}
int iS = ceil(s*1.0/vmax);
time += (n-cnt-1)*d+iS;
int itime = ceil(time);
int x2=itime/60;
int y2=itime%60;
printf("%02d:%02d\n", x2, y2);
return 0;
}
minutes F(minutes w) {
cnt=0;//количество съеденных цветов для попытки w
for (int i=0; i<n; ++i) {
if (t[i] < w+x[i]/vmax){
w += x[i]/vmax+d;// = время марш-броска до цветка + время поедания цветка
cnt++;
}
}
return w;
}
|
| |
Всё так же "Неправильный ответ" за исключением 2ух тестов (предполагаю, что для єтих двух тестов n=0)