akaGM
Platinum Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору {$APPTYPE CONSOLE} const MAX_STATIONS = 100; MAX_TRAINS = 100; MAX_MINUTES = 1440; BAD_MINUTES = MAX_MINUTES + 1; type TTRAINS = array[1..MAX_TRAINS] of integer; TSTATION = record // data elapsedMinutes: integer; // <=1440 = 24 hours ntrains: integer; // per day hOrigin, mOrigin: TTRAINS; // "from" time // calculated hArriving, mArriving: TTRAINS; // "to current" time totMinutes: TTRAINS; // -"- tot minutes minMinutes: TTRAINS; // -"- tot minutes candidate end; TSTATIONS = array[1..MAX_STATIONS] of TSTATION; var resultMin: integer = BAD_MINUTES; nstations: integer = 0; stations: TSTATIONS; // [1..nstations] hBasil, mBasil, BasilTime: integer; // Basil arriving fp: text; fname: string; strOrigin: string; //-remove procedure runtask; var ns, nt: integer; begin // calc for ns := 1 to nstations do with stations[ns] do for nt := 1 to ntrains do begin hArriving[nt] := hOrigin[nt]; mArriving[nt] := mOrigin[nt] + elapsedMinutes; if (mArriving[nt] > 60) then begin mArriving[nt] := mArriving[nt] - 60; inc(hArriving[nt]); if (hArriving[nt] > 24) then hArriving[nt] := hArriving[nt] - 24; end; totMinutes[nt] := 60*hArriving[nt] + mArriving[nt]; minMinutes[nt] := BAD_MINUTES; // fill end;//nt // convert to minutes BasilTime := 60*hBasil + mBasil; // find... for ns := 1 to nstations do with stations[ns] do for nt := 1 to ntrains do begin if (hBasil < hArriving[nt]) then minMinutes[nt] := totMinutes[nt] - BasilTime else if (hBasil = hArriving[nt]) then begin if (mBasil <= mArriving[nt]) then minMinutes[nt] := mArriving[nt] - mBasil; end //???????????????????? else begin // hBasil > hArriving[nt] over day ? minMinutes[nt] := MAX_MINUTES - 60*(hBasil - hArriving[nt]); if (mBasil < mArriving[nt]) then minMinutes[nt] := minMinutes[nt] + (mArriving[nt] - mBasil) else if (mBasil > mArriving[nt]) then minMinutes[nt] := minMinutes[nt] - (mBasil - mArriving[nt]); end; //???????????????????? end;//nt // get min from... for ns := 1 to nstations do with stations[ns] do for nt := 1 to ntrains do if (resultMin >= minMinutes[nt]) then resultMin := minMinutes[nt]; end;//runtask procedure getdata; var ns, nt: integer; begin fname := paramstr(1); //-??? assignfile(fp, fname); reset(fp); readln(fp, hBasil, mBasil); readln(fp, nstations); for ns := 1 to nstations do with stations[ns] do begin readln(fp, elapsedMinutes); readln(fp, ntrains); for nt := 1 to ntrains do readln(fp, hOrigin[nt], mOrigin[nt]); end; readln(fp, strOrigin); //-remove closefile(fp); end;//getdata procedure outdata; begin writeln(strOrigin); //-remove writeln(resultMin); end;//outdata begin getdata; runtask; outdata; end. | Всего записей: 24127 | Зарегистр. 06-12-2002 | Отправлено: 16:58 28-12-2008 | Исправлено: akaGM, 20:00 28-12-2008 |
|