Блог пользователя 6ejibiu

Автор 6ejibiu, 12 лет назад, По-русски

В сегоднешнем соревновании(Codeforces Round #111 (Div. 2)) отправил задачу (А близнецы), На тестах показала ошибку, а на домашнем машине показывает правельный ответ, пишу в Delphi, чья это вина?

код: program Project3;

{$APPTYPE CONSOLE} var i,n: integer; s,sum,min:longint; a:array of integer;

function Part(l, r: integer):integer; var v, i, j, b: integer; begin V:=a[r]; I:=l-1; j:=r; repeat repeat dec(j) until (a[j]<=v) or (j=i+1); repeat inc(i) until (a[i]>=v) or (i=j-1); b:=a[i]; a[i]:=a[j]; a[j]:=b; until i>=j; a[j]:=a[i]; a[i]:= a[r]; a[r]:=b; part:=i; end; procedure QuickSort(l, t: integer); var i: integer; begin if l<t then begin i:=part(l, t); QuickSort(l,i-1); QuickSort(i+1,t); end; end; begin

readln(n);
 SetLength(a,n+1);
 for I := 1 to n do begin
   read(a[i]);
   s:=s+a[i];
 end;
  QuickSort(1,n);
 for I := n downto 1 do begin
   sum:=sum+a[i];
   s:=s-a[i];
   inc(min);
   if sum>s then Break;

 end;

writeln(min); end. Кто желает попробовать проверить моё решение, то на 7-ом тесте оно валится 7-ой тест 2 2 1 Ответ: 1 У меня же на сервере: 2 на моём ПК: 1

  • Проголосовать: нравится
  • +5
  • Проголосовать: не нравится

»
12 лет назад, # |
  Проголосовать: нравится +17 Проголосовать: не нравится

попробуй "s" и "sum" инициализировать..

»
12 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Когда ты не инициализируешь и запускаешь у себя на компьютере ты запускаешь в дебуг режиме, а там по умолчанию переменным присваивается 0. На сервере решение запускается как релиз и там по умолчанию ничем не заполняются переменными (что раньше лежало в оперативе, то и лежит, или как -то так). Так что (и это просто правильней) нужно все переменные до их использования инициализировать (записывать в них какие-то значения). В данном случае просто обнулить.

»
12 лет назад, # |
  Проголосовать: нравится -31 Проголосовать: не нравится

Ну разве можно это считать ошибкой? Да, согласен, это недочёт, но не ошибка, думаю, у когото может "прокатить" такой вариант, а когото нет(

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +12 Проголосовать: не нравится

    То что нужно инициализировать переменные это один из самых основных уроков. Это не недочёт это ошибка. много раз на этом вспоткнувшись привыкнете. Есть более странные вещи, уж поверьте.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +6 Проголосовать: не нравится

      У нас это называлось "обряд инициализации", который должна пройти любая переменная ;)

»
12 лет назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

В данном контексте удивительно что прошло 7 тестов.

»
12 лет назад, # |
  Проголосовать: нравится +22 Проголосовать: не нравится

На ошибках учаться, теперь буду знать, надеюсь что и остальные не допустят такие же ошибки, всем спасибо!

»
12 лет назад, # |
Rev. 2   Проголосовать: нравится +7 Проголосовать: не нравится

Детская задачка: Буратино дали 4 яблока. 2 яблока он отдал Мальвине. Сколько у него осталось яблок?
Ответ: 282137918
Комментарий: Надо инициализировать переменные :)