Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2013, 11:18   #1
yutr777
Новичок
Джуниор
 
Аватар для yutr777
 
Регистрация: 26.07.2013
Сообщений: 2
По умолчанию Реализация. Строки. ACMP

Добрый вечер, форумчане!
Вот столкнулся с такой задачей:http://acmp.ru/index.asp?main=task&id_task=184
Рабочее время
( Время: 1 сек. Память: 16 Мб Сложность: 26%)


Помогите Ивану Ивановичу найти его суммарные затраты времени за год.

Входные данные

Входной файл INPUT.TXT содержит в первой строке число листочков K, (K – четное число, не большее 5000). Далее записаны K строк с данными на листочках в формате DD.MM. hh:mm, где DD – число, MM – номер месяца, hh – часы и mm – минуты.

Выходные данные

Выходной файл OUTPUT.TXT должен содержать запись вида h:mm – количество часов и минут, отработанных Иваном Ивановичем. При этом число h >= 0 выводится без ведущих нулей, а число 0 <= mm <= 59 выводится с ведущими нулями.

Реализация...не более того...но как бы там ни было...не могу ничего довести до конца
Часов 7 пытаюсь решить её...но все безуспешно.
Вот два варианта решения...оба валятся на втором тесте.
1)
Код:
type pair=record
        x,y:longint;
     end;
var  date:array[1..5001]of pair;
     time:array[1..5001]of pair;
     days:array[1..12]of byte;
     u,n,i,j,ans,m1,m2,ch1,ch2,ch,min,d1,d2,mn1,mn2,code,d,m,otime,rx,w,ww:longint;
     s,s1,s2:string;
procedure swap(var a,b:longint);
var c:longint;
begin
c:=a;
a:=b;
b:=c;
end;
begin
assign(input,'input.txt');
assign(output,'output.txt');
reset(input);
rewrite(output);
readln(n);
for i:=1 to n do
  begin
    readln(s);
    s1:=s[1]+s[2];
    s2:=s[4]+s[5];
    val(s1,d,code);
    val(s2,m,code);
    date[i].x:=d;
    date[i].y:=m;
    s1:=s[8]+s[9];
    s2:=s[11]+s[12];
    val(s1,d,code);
    val(s2,m,code);
    time[i].x:=d;
    time[i].y:=m;
  end;
days[1]:=31;
days[2]:=28;
days[3]:=31;
days[4]:=30;
days[5]:=31;
days[6]:=30;
days[7]:=31;
days[8]:=31;
days[9]:=30;
days[10]:=31;
days[11]:=30;
days[12]:=31;
ans:=0;
i:=1;j:=2;
while true do
  begin
    if j>n then break;
    d1:=date[i].x;
    d2:=date[j].x;
    m1:=date[i].y;
    m2:=date[j].y;
    ch1:=time[i].x;
    ch2:=time[j].x;
    mn1:=time[i].y;
    mn2:=time[j].y;
    if (m1>m2) then
      begin
        swap(m1,m2);
        swap(d1,d2);
        swap(mn1,mn2);
        swap(ch1,ch2);
      end;
    if (m1=m2) and (d1>d2) then
      begin
        swap(d1,d2);
        swap(mn1,mn2);
        swap(ch1,ch2);
      end;
    if (m1=m2) and (d1=d2) and (ch1>ch2) then
      begin
        swap(ch1,ch2);
        swap(mn1,mn2);
      end;
    if (m1=m2) and (d1=d2) and (ch1=ch2) and (mn1>mn2) then swap(mn1,mn2);
    otime:=0;
    code:=0;
    rx:=0;w:=0;ww:=0;
    if (m1=m2) then rx:=d2-d1-1
    else
      begin
        rx:=days[m1]-d1;
        inc(m1);
        for u:=m1 to m2-1 do
          inc(rx,days[u]);
        rx:=rx+d2-1;
      end;
    if rx<0 then rx:=0;
    rx:=rx*480;
    ww:=ch2*60+mn2;
    ww:=ww-600;
    if ww=0 then ww:=1;
    w:=ch1*60+mn1;
    w:=1080-w;
    if (d1=d2) and (m1<>m2) or (d1<>d2) then inc(w);
    otime:=rx+w+ww;
    inc(ans,otime);
    //dec(ans,code);
    i:=i+2;
    j:=j+2;
  end;
min:=ans mod 60;
ch:=ans div 60;
if (ch<9) then write('0',ch)
else write(ch);
write(':');
if min<9 then write('0',min)
else write(min);
close(input);
close(output);
end.
2)
Код:
type pair = record //тип записей
          d,ms,h,mn:integer;//день, месяц, час, минута
          end;

const dm:array[1..12] of integer=(0,31,59,90,120,151,181,212,242,273,303,334);
var v:array[1..5000] of longint;//массив минут с начала года
    s:array[1..2000] of string[50];//это массив для примера
    s1:string;
    n,a,c,i,j,m:integer;
    x,rv,h,min,ch,ans:longint;
begin
assign(input,'input.txt');
assign(output,'output.txt');
reset(input);
rewrite(output);
readln(n);
for i:=1 to n do
  readln(s[i]);
for i:=1 to n do
 begin
  s1:=s[i][1]+s[i][2];
  val(s1,a,c);
  v[i]:=(a-1)*480;
  s1:=s[i][4]+s[i][5];
  val(s1,a,c);
  v[i]:=v[i]+dm[a]*480;
  s1:=s[i][8]+s[i][9];
  val(s1,a,c);
  v[i]:=v[i]+a*60;
  s1:=s[i][11]+s[i][12];
  val(s1,a,c);
  v[i]:=v[i]+a;
  if i mod 2=1 then dec(v[i])
 end;
i:=0;
for i:=1 to n do
  for j:=i to n do
    if v[i]>v[j] then
      begin
        c:=v[i];
        v[i]:=v[j];
        v[j]:=c;
      end;
i:=0;
while true do
  begin
    ans:=ans+abs(v[i+2]-v[i+1]);
    i:=i+2;
    if i>n then break;
  end;
min:=ans mod 60;
ch:=ans div 60;
if (ch<9) then write('0',ch)
else write(ch);
write(':');
if min<9 then write('0',min)
else write(min);
end.
В первом просто считаю, во втором моделирую...но есть где-то косяк.
Я уверен, это все из-за непонятных единичный минут...в обсуждениях по этому поводу два КОНТРПРИМЕРА, проходят на ура. Но проблема скорее всего в этом.
Пожалуйста, помогите!
Заранее спасибо!


_____
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 02.08.2013 в 11:34.
yutr777 вне форума Ответить с цитированием
Старый 02.08.2013, 16:35   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Иван Иванович ходит на работу каждый день и его рабочий день продолжается с 10:00 до 18:00. Таким образом, пара листочков «18.11. 15:13» — «20.11. 10:27» была написана при начале и окончании дела длительностью 11ч.15м.
Не вижу отражения сего условия в коде...
Somebody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Stack overflow (C++) (Задача с acmp №9) Ghost3 Помощь студентам 4 15.04.2013 18:41
Олимпиадные Задачи (с acmp.ru) Poma][a Паскаль, Turbo Pascal, PascalABC.NET 7 20.12.2012 07:44
Реализация коммандной строки Shub_Niggurath Общие вопросы C/C++ 5 02.12.2010 00:46
С++. Строки. Собственная реализация стандартной функции itoa. |arch| Помощь студентам 0 25.11.2009 00:04