Четвер, 23.11.2017, 09:35
Головна Реєстрація Вхід
Вітаю Вас, Гість · RSS
Меню сайту
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0
Форма входу
 Кращі розв'язки
Задача А-Податковий інспектор
Нагін Сергій

uses sysutils;
var
a,j1,n,t,ii,i,j:longint;
g:array[0..1000,0..1000]of longint;
i1:array[0..1000]of longint;
 begin
  read(t);
  fillchar(g,sizeof(g),0);
  for ii:=1 to t do
    begin
     read(n);
     fillchar(i1,sizeof(i1),0);
     for i:=1 to n do
      begin
       j1:=0;
       for j:=1 to n do
        begin
         read(a);
         a:=a mod 2;
         i1[j]:=(i1[j]+a)mod 2;
         j1:=(j1+a)mod 2;
         if ((not odd(i1[j])) and (g[i,j-1]=0))
          or ((not odd(j1)) and (g[i-1,j]=0))then g[i,j]:=1
              else g[i,j]:=0;
        end;
       end;
     writeln(g[n,n]);
    end;
 end.


Задача B-Обласна олімпіада
Савчук Владислав

Var a,b:array[1..100,1..100] of longint;
    ki,no:array[1..100] of longint;
    fl:array[1..100] of boolean;
    d,di,dj,j,i,n,max,mini,nom,sum:longint;
Begin
     Readln(n); max:=0;
     For i:=1 to n do Begin
      For j:=1 to n do Begin Read(a[i,j]);
       if a[i,j]>max then max:=a[i,j] end; Readln end;
     For i:=1 to n do
      For j:=1 to n do b[i,j]:=max-a[i,j];
     For i:=1 to n do Begin mini:=1;
      For j:=2 to n do if b[i,j]<b[i,mini] then mini:=j;
      inc(ki[mini]); no[i]:=mini;
     end;
     For nom:=1 to n do if ki[nom]>1 then break;
     While ki[nom]<>1 do Begin fl[nom]:=true; d:=maxlongint div 3;
      For i:=1 to n do if fl[no[i]] then
       For j:=1 to n do if not fl[j] and (b[i,j]-b[i,no[i]]<d) then Begin
        d:=b[i,j]-b[i,no[i]]; di:=i; dj:=j;
       end;
      if d<>0 then
       For j:=1 to n do if fl[j] then
        For i:=1 to n do inc(b[i,j],d);
      inc(ki[dj]); dec(ki[no[di]]); no[di]:=dj;
      For nom:=1 to n do if ki[nom]>1 then break;
      if ki[dj]>1 then nom:=dj else For i:=1 to n do fl[i]:=false;
      if ki[nom]=1 Then Break;
      sum:=0;
     end;
     For i:=1 to n do sum:=sum+a[i,no[i]];
     Writeln(sum);
End.

Задача C-Кодекс
Оришин Сергій

{$M 1000000,0,1000000}
uses math;
type pp=record
         x,y,p:longint;
        end;
var ans,n,m,i,x,y,l:longint;
    p,a,b,k:array[0..10001] of longint;
    q:array[0..20001] of pp;
procedure tt(x,pred:longint);
var l,u,g,t:longint;
 begin
  if (k[x]=1) and
     (x<>1) then begin
                  b[x]:=1;
                  a[x]:=0;
                 end
            else begin
                   { a }
                  g:=p[x];
                  while q[g].x<>0 do
                   begin
                    if q[g].y<>pred then tt(q[g].y,x);
                    g:=q[g].p;
                   end;
                  l:=0;
                  g:=p[x];
                  while q[g].x<>0 do
                   begin
                    if q[g].y<>pred then begin
                                          if (k[q[g].y]=1) and
                                             (q[g].y<>1) then l:=l+1
                                                         else l:=l+min(a[q[g].y],b[q[g].y]);
                                         end;
                    g:=q[g].p;
                   end;
                  g:=p[x];
                  while q[g].x<>0 do
                   begin
                    if q[g].y<>pred then begin
                                          if (k[q[g].y]>1) or
                                             (q[g].y=1) then a[x]:=min(a[x],l-min(a[q[g].y],b[q[g].y])+b[q[g].y])
                                                        else a[x]:=min(a[x],l);
                                         end;
                    g:=q[g].p;
                   end;
                   { b }
                  l:=0;
                  g:=p[x];
                  b[x]:=1;
                  while q[g].x>0 do
                   begin
                    if q[g].y<>pred then begin
                                          l:=0;
                                          t:=p[q[g].y];
                                          while q[t].x>0 do
                                           begin
                                            if q[t].y<>x then begin
                                                               if (k[q[t].y]=1) and
                                                                  (q[t].y<>1) then l:=l+1
                                                                              else l:=l+a[q[t].y];
                                                              end;
                                            t:=q[t].p;
                                           end;
                                          u:=min(a[q[g].y],b[q[g].y]);
                                          b[x]:=b[x]+min(u,l);
                                         end;
                    g:=q[g].p;
                   end;
                 end;
 end;
 begin
  read(n,m);
  for i:=1 to m do
   begin
    read(x,y);
    inc(l);
    q[l].x:=x;
    q[l].y:=y;
    q[l].p:=p[x];
    p[x]:=l;
    inc(l);
    q[l].x:=y;
    q[l].y:=x;
    q[l].p:=p[y];
    p[y]:=l;
    inc(k[x]);
    inc(k[y]);
   end;
  for i:=1 to n do
   a[i]:=n;
  fillchar(b,sizeof(b),0);
  tt(1,0);
  ans:=min(a[1],b[1]);
  writeln(ans);
 end.

Copyright MyCorp © 2017
Пошук
Календар
«  Листопад 2017  »
ПнВтСрЧтПтСбНд
  12345
6789101112
13141516171819
20212223242526
27282930
Архів записів
Друзі сайту
Обдаровані діти

Step by Step - Школа олімпійського резерву

Відділ інформаційних технологій та дистанційного навчання ХОІППО