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

Онлайн всього: 1
Гостей: 1
Користувачів: 0
Форма входу
 Кращі розв'язки
Задача A. Robot
Шевчук Олександр
var k,q,i,j,n,c:integer;
    s,ss:set of 1..10;
    a:array[0..20,0..20]of integer;
    x,y:array[0..10]of integer;
procedure robot(z,cc:integer);
var l:integer;
 begin
  ss:=ss+[z];
  if cc+a[z,0]<c then
   begin
    if ss=s then begin if cc+a[z,0]<c then c:=cc+a[z,0] end else
     begin
      for l:=1 to n do
       begin
        if not(l in ss) then begin robot(l,cc+a[z,l]); end;
       end;
     end;
   end;
  ss:=ss-[z];
 end;
begin
 read(k);
 for q:=1 to k do
  begin
   read(x[0],y[0]);
   read(n);
   s:=[0];
   ss:=[];
   c:=1000;
   for i:=1 to n do
    begin
     read(x[i],y[i]);
     s:=s+[i];
    end;
   for i:=0 to n do
    for j:=0 to n do
     a[i,j]:=abs(x[j]-x[i])+abs(y[j]-y[i]);
   robot(0,0);
   writeln(c);
  end;
end.


Задача B. Robot-2
Березін Дмитро
Var kilt:longint;
    test:longint;
    n:longint;
    s:string;
    l,i:longint;
    rez:longint;
    z:boolean;

Procedure ask;
Var j:longint;
Begin
l:=0;
for j:=1 to length(s) do l:=l*10+byte(s[j])-48;
end;
Begin
Readln(kilt);
for test:=1 to kilt do begin
Readln(n); z:=false;
rez:=0; l:=0;
for i:=1 to n do Begin
Readln(s);
if s='HALT' then z:=true;
if z=false then begin
if s='LEFT' then  rez:=rez-90;
if s='RIGHT' then rez:=rez+90;
if s='TURN AROUND' then rez:=rez+180;
if pos('LEFT ',s)>0 then begin delete(s,1,pos(' ',s)); ask; rez:=rez-l; end;
if pos('RIGHT ',s)>0 then begin delete(s,1,pos(' ',s));ask; rez:=rez+l; end;
if rez<0 then rez:=rez+360;
if rez>=360 then rez:=rez-360;
end;
end;
Writeln(rez);
end;
End.



Задача C. Hacker vs Olympians
Франчук Роман

#include <iostream>
#include <vector>
#include <set>
using namespace std;
vector<vector<int> > g, g_t;
vector<bool> used;
vector<int> order, c, c_cnt, cc_res;
int cnum = 0;
void dfs1(int v)
{
    used[v] = true;
    for (int i = 0; i < g[v].size(); ++i)
        if(!used[g[v][i]])
            dfs1(g[v][i]);
    order.push_back (v);
}
void dfs2(int v)
{
    used[v] = true;
    for (int i = 0; i < g_t[v].size(); ++i)
        if(!used[g_t[v][i]])
            dfs2(g_t[v][i]);
    c[v] = cnum;
    c_cnt[cnum]++;
}
vector<set<int> > gc;
int dfs3(int v)
{
    int r = c_cnt[v];
    used[v] = true;
    for(set<int>::iterator i = gc[v].begin(); i != gc[v].end(); i++)
    {
        if(!used[*i])
            r += dfs3(*i);
    }
    return r;
}
int main()
{
    int n, m;
    cin >> n >> m;
    g.resize(n);
    g_t.resize(n);
    c.resize(n);
    for(int i = 0; i < m; i++)
    {
        int a, b;
        cin >> a >> b;
        a--;
        b--;
        g[b].push_back(a);
        g_t[a].push_back(b);
    }
    used.resize(n);
    for(int i = 0; i < n; i++)
        if(!used[i])dfs1(i);
    used.assign(n, false);
    for(int i = 0; i < n; i++)
    {
        int v = order[n - i - 1];
        if(!used[v])
        {
            c_cnt.resize(cnum + 1);
            dfs2(v);
            cnum++;
        }
    }
    gc.resize(cnum);
    for(int i = 0; i < n; i++)
        for(int j = 0; j < g[i].size(); j++)
            if(c[i] != c[g[i][j]])
                gc[c[i]].insert(c[g[i][j]]);
//*******************************************
    cc_res.resize(cnum, 0);
    int m_val = -1;
    for(int i = 0; i < cnum; i++)
    {
        used.assign(cnum, false);
        cc_res[i] = dfs3(i) - 1;
        m_val = max(m_val, cc_res[i]);
    }
    vector<bool> t(cnum);
    for(int i = 0; i < cnum; i++)
        if(cc_res[i] == m_val)t[i]=true;
    bool fst = true;
    for(int i = 0; i < n; i++)
        if(t[c[i]])
        {
            if(fst)
                fst = false;
            else
                cout << " ";
            cout << i + 1;
        }
    cout << "\n";
    return 0;
}
Copyright MyCorp © 2017
Пошук
Календар
«  Листопад 2017  »
ПнВтСрЧтПтСбНд
  12345
6789101112
13141516171819
20212223242526
27282930
Архів записів
Друзі сайту
Обдаровані діти

Хмельницькі олімпіади

НМЦ ІКТ і ДН

Портал ХОІППО