Re[13]: Время черепахи
От: olimp_20  
Дата: 03.07.15 12:43
Оценка:
Здравствуйте, Кодт:

  Еще одна попытка
#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)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.