infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Mircea Pasoi din Februarie 21, 2005, 20:21:53



Titlul: 049 Barbar
Scris de: Mircea Pasoi din Februarie 21, 2005, 20:21:53
Aici puteţi discuta despre problema Barbar (http://infoarena.ro/problema/barbar).


Titlul: 049 Barbar
Scris de: Chris din Martie 09, 2005, 11:01:43
Hi!

 E un caz mai special la testul 1 ??? Ca-mi da wrong answer la el (am luat 90 de puncte pe problema).


Titlul: 049 Barbar
Scris de: Mircea Pasoi din Martie 09, 2005, 16:38:02
Citat din mesajul lui: Chris
Hi!

 E un caz mai special la testul 1 ??? Ca-mi da wrong answer la el (am luat 90 de puncte pe problema).


Nu, nu are nimic special.


Titlul: 049 Barbar
Scris de: Kelemen Stelian din Martie 18, 2005, 13:34:08
mie imi da  batai de cap   testul  9 ,  tot  TLE iau     nush ce sa mai fac  ](*,)


Titlul: 049 Barbar
Scris de: Ionel Corneliu Gog din Martie 18, 2005, 16:11:55
Nu mai stiu,in testul 9 sau 10, Paftenie nu poate iesi din inchisoare... Si raspunsul este -1.


Titlul: 049 Barbar
Scris de: Kelemen Stelian din Martie 18, 2005, 17:00:21
this is a briliant idea :)      ai   afisat  -1  si ai vazut care  teste le-ai luat  :)
in sursa nu pot  scrie  "  if ( testu 9 || testu 10 ) fout << "-1\n"; "
ar fi si culmea   :shock:     oricum voi mai incerca ceva optimizari


Titlul: 049 Barbar
Scris de: Tiberiu-Lucian Florea din Martie 18, 2005, 17:14:55
:roll: Ai grija sa tratezi cazul cand nu e solutie!!!!!  :roll:

Asta era ideea, nu sa ``furi''.


Titlul: 049 Barbar
Scris de: Ionel Corneliu Gog din Martie 18, 2005, 18:44:21
Matrix.. pacat..pacat... Nu acuza daca nu sti. Eu am spus sa verifici, nu doar sa afisezi -1 pentru testul 9.


Titlul: 049 Barbar
Scris de: Kelemen Stelian din Martie 18, 2005, 22:13:59
pacat...pacat...mare pacat    eu am scris mai sus ca iau TLE,  nu WA -> deci nu e din cauza lui "-1"


Titlul: 049 Barbar
Scris de: Tiberiu-Lucian Florea din Martie 18, 2005, 22:22:26
Daca nu tratezi cazul ala ca lumea si iti cicleaza... la asta m-am gandit.

Altceva ce poate fi? Daca ai facut cautare binara sau Dijkstra ar trebui sa mearga fara probleme.....


Titlul: 049 Barbar
Scris de: Bogdan-Cristian Tataroiu din Aprilie 30, 2005, 10:43:27
Poate cineva sa-mi spuna de ce nu merge algoritmul urmator pe testele 6 si 7?
Cod:
    bfs();
    long bl=0,br=r*c,bm;
    while (br-bl>1)
    {
        bm=(bl+br)>>1;
        if (bfs(bm)) bl=bm;
        else br=bm;
    }
    if (bl) printf("%ld\n",bl);
    else printf("-1\n");

bfs() e pentru determinarea intr-o matrice a distantelor minime pana la dragoni
bfs(bm) intoarce 1 daca se poate ajunge de la I la D in matrice mergand numai pe casute pentru care distanta cea mai mica pana la un dragon e mai mare sau egala cu bm.


Titlul: 049 Barbar
Scris de: cristi8 din Aprilie 30, 2005, 11:24:15
din cate mai tin eu minte, trebuia sa afisezi 0 daca trebuia sa treci printr-un dragon ca sa ajungi la iesire. -1 era doar daca nu puteai sa ajungi din cauza zidurilor.


Titlul: 049 Barbar
Scris de: Bogdan-Cristian Tataroiu din Aprilie 30, 2005, 11:55:41
Mersi. Credeam ca daca era un dragon intr-o celula atunci ea era ocupata si nu puteai sa treci. Am modificat asta si inca ceva si acum am 90 puncte ( nu merge testu 7 ) :(

Later edit: Gata am luat 100  \:D/


Titlul: 049 Barbar
Scris de: Cristian Strat din Aprilie 30, 2005, 15:05:49
Citat din mesajul lui: bogdan2412
Mersi. Credeam ca daca era un dragon intr-o celula atunci ea era ocupata si nu puteai sa treci.

ce dubios suna replicile astea rupte din context ...  :roll:


Titlul: 049 Barbar
Scris de: Alb Gabriel din Iunie 28, 2005, 01:05:06
imi puteti da va rog testu 1 ? Am luat 90 de pct pe prb si nu imi gasesc deloc greseala.


Titlul: 90 pcte
Scris de: Iorgulescu Calin din Iulie 08, 2005, 10:28:30
Salut. Am implementat si eu problema, dar din pacate, nu merge testul 7 -> WA. Am observat ca au mai fost persoane care au avut probleme la acest test. Daca puteti  sa-mi dati vreun sfat... Mentionez ca am tratat(corect sper eu) si cazurile cu -1 sau 0.  Mersi.


Titlul: 049 Barbar
Scris de: Bogdan-Cristian Tataroiu din Iulie 09, 2005, 08:35:06
Eu am avut probleme cu testul 7, nu-mi mergea pe teste de genu:
Cod:
...O..
......
...I..
......
......
...D..


Titlul: 049 Barbar
Scris de: Iorgulescu Calin din Iulie 21, 2005, 22:50:17
Gata. Am luat 100!  \:D/
Multumesc mult tuturor pentru ajutor si pentru idei!


Titlul: 049 Barbar
Scris de: u-92 din Septembrie 23, 2005, 10:27:19
nici mie nu-mi iese.. iau doar 30.. pe testul postat anterior imi da 3..
fac o cautare binara + bfs(d) unde bag in coada doar pozitiile la dist >= d..
verific inclusiv daca pot obtine 0.. nustiu ce sa mai fac


Titlul: 049 Barbar
Scris de: VladS din Septembrie 23, 2005, 14:20:01
Vezi poate citesti gresit. Si eu pateam la fel.


Titlul: 049 Barbar
Scris de: u-92 din Septembrie 23, 2005, 15:33:27
nu cred.. citesc R linii si C coloane


Titlul: 049 Barbar
Scris de: Bogdan-Alexandru Stoica din Septembrie 27, 2005, 10:26:57
Care este solutia corecta pentru testul :
Cod:
7 5
..D..
.....
*****
.....
.....
.....
I...O


Titlul: 049 Barbar
Scris de: Adrian Vladu din Septembrie 27, 2005, 13:11:35
infinit  :D
Nu-ti face griji, nu exista astfel de teste.
Thanks for the correction anyway  ](*,)

"Se garanteaza ca in temnita exista cel putin un dragon" ar trebui schimbat in "Se garanteaza ca in temnita exista cel putin un dragon la care se poate ajunge din punctul de plecare"


Titlul: 049 Barbar
Scris de: u-92 din Noiembrie 26, 2005, 01:01:50
ceva e extrem de dubios la problema asta. aveam citirea ceva de genul:
Cod:
for(i = 1; i <= R; i++)
{
 for(j = 1; j <= C; j++)
    c = getc(stdin);
 c = getc(stdin);
}

si luam 30 de puncte, exact acele 3 teste pt care R == C (am modificat sursa si mi-am dat seama).
Apoi am schimbat citirea cam asa:
Cod:
for(i = 0; i < R; i++)
   scanf("%s\n", &s); // prelucreaza s ..

si iau 70
voi de exemplu cum ati citit datele de intrare? :)


Titlul: 049 Barbar
Scris de: Iorgulescu Calin din Noiembrie 26, 2005, 10:05:08
Pai.. eu am citit "babeste" caracter cu caracter. Citirea mea e ceva de genu:
Cod:
scanf("%d %d\n",&R,&C);
for(int i=1;i<=R;i++) {
 for(int j=1;j<=C;j++)
  scanf("%c ",&map[i][j]);
 scanf("\n");
}

Unde map[j] e de tipul char... si intra in timp... dar cred ca se poate si direct cu  %s. Oricum, bafta!  :wink:


Titlul: 049 Barbar
Scris de: u-92 din Noiembrie 26, 2005, 10:34:09
](*,)  tot 70.. WA pe 1,2 si 5  ](*,)


Titlul: 049 Barbar
Scris de: Bogdan-Alexandru Stoica din Noiembrie 28, 2005, 14:03:30
In primu rand tu iei WA nu TLE, dar am "masurat" citirea ta pe un Celeron la 2.40 GHz si 256 MB RAM si dureaza, pentru testul, maxim 0.14. Mai testeaza-ti solutia. Uite, incearca p'astea :

Cod:
3 3
***
IDO
***

Cod:
4 4
....
....
IDO.
....


Pentru primu test raspunsul este 0, iar pentru al doilea raspunsul este 1.

Good luck. :D


Titlul: 049 Barbar
Scris de: u-92 din Noiembrie 28, 2005, 16:09:26
pe primul imi da 0, pe al doilea 1.. si n-am zis ca iau TLE, insa cu prima citire caracter cu caracter luam 30 si daca citeam tot sirul luam 70 de asta am zis eu ca mi se pare dubios


Titlul: 049 Barbar
Scris de: Bogdan-Alexandru Stoica din Noiembrie 29, 2005, 10:41:05
:? Asta chiar e dubios rau... eu am incercat sa citesc caracter cu caracter si am luat 100. Daca vrei (doar daca nu te deranjeaza), da-mi solutia ta pe mail si ma uit peste ea ([email protected]).


Titlul: 049 Barbar
Scris de: u-92 din Noiembrie 29, 2005, 17:04:14
nu ma deranjeaza deloc, o s-o pun aici poate mai are cineva de postat o idee
[ am scos sursa ... ]

daca scot alea din comentariu de la citire, iau 20 (am vazut acum).. totusi cele doua chestii nu sunt echivalente?

mersi.


Titlul: 049 Barbar
Scris de: Bogdan-Alexandru Stoica din Noiembrie 29, 2005, 23:28:16
in functia bf, in loc de :
Cod:
c[++sf].x = i + dx[k];
c[sf].y = j + dy[k];

pune
Cod:
c[sf].x = i + dx[k];
c[sf++].y = j + dy[k];


prima daca cand intra in "if", variabila "sf" este 1. tu mai introduci in coada (c[1]) pozitia (0, 0) ca vecin al lui (i, j) si acest lucru nu e intodeanuna adevarat.

uite testu pe care te-am prins  :P :
Cod:
6 5
...I.
.....
...O.
..***
...D.


tie iti da 3, iar corect este 6.
acum iei 100  :winner1:  si ai grija pe viitor, ca asa ceva te poate costa mult mai mult de 30 de puncte.


Titlul: 049 Barbar
Scris de: u-92 din Noiembrie 29, 2005, 23:33:45
ca sa vezi ce greseam.. bug`urile astea..
mersi mah, sa traiesti  \:D/


Titlul: 049 Barbar
Scris de: Bogdan-Alexandru Stoica din Noiembrie 29, 2005, 23:36:50
n-ai pentru ce :)
tu esti Astronomy ?


Titlul: 049 Barbar
Scris de: u-92 din Noiembrie 29, 2005, 23:39:37
na ca mi s-a dezvaluit identitatea  :D


Titlul: 049 Barbar
Scris de: Bogdan-Alexandru Stoica din Noiembrie 29, 2005, 23:40:34
:D


Titlul: Raspuns: 049 Barbar
Scris de: Prigoana Alexandru din Aprilie 03, 2006, 22:04:54
nu ma prind de problema .... ma gandesc ca trebuie construit un graf dar nam cum sa iau R*C noduri nu ? ... ma ajuta cineva ?


Titlul: Re: 049 Barbar
Scris de: Sima Mihai Cotizo -vechi din Iulie 29, 2006, 17:33:44
OK ... ignorand multe WA ca stiu ca nu prea mi-am dat interesu sa o fac din prima bine... stit de la ce pot lua SIGABRT??? ( abort parca da doar userul daca vrea :-' altfel e sigint)


Titlul: Raspuns: Re: 049 Barbar
Scris de: Marius Stroe din Iulie 29, 2006, 17:54:25
OK ... ignorand multe WA ca stiu ca nu prea mi-am dat interesu sa o fac din prima bine... stit de la ce pot lua SIGABRT??? ( abort parca da doar userul daca vrea :-' altfel e sigint)

http://infoarena.devnet.ro/forum/index.php/topic,846.0.html (http://infoarena.devnet.ro/forum/index.php/topic,846.0.html)

Eu am depasit memoria. Cred ca si tu ai facut acelasi lucru.


Titlul: Re: 049 Barbar
Scris de: Adrian Vladu din Iulie 30, 2006, 20:51:07
Eu primeam SIGABRT cand accesam elemente negative ale unui vector si citeam/scriam in afara zonei de memorie alocata programului.


Titlul: Re: 049 Barbar
Scris de: Sima Mihai Cotizo -vechi din Iulie 31, 2006, 08:23:51
OK ... ignorand multe WA ca stiu ca nu prea mi-am dat interesu sa o fac din prima bine... stit de la ce pot lua SIGABRT??? ( abort parca da doar userul daca vrea :-' altfel e sigint)

http://infoarena.devnet.ro/forum/index.php/topic,846.0.html (http://infoarena.devnet.ro/forum/index.php/topic,846.0.html)

Eu am depasit memoria. Cred ca si tu ai facut acelasi lucru.
am uitat de pagina asta :-' sorry  :oops:

Cod:
struct point
{
        long x, y, v;
};

long R, C;
char A[MAX][MAX];
long V[MAX][MAX];
long B[MAX][MAX];

point mv[4] = {{-1,0},{1,0},{0,1},{0,-1}}; // vector of moves
queue <point> D;
point I, O;
long answer=0;

singura cu dimensiune variabila este coada... deci din pricina ei sa nu imi intre??? 


Titlul: Raspuns: 049 Barbar
Scris de: Bondane Cosmin din Iulie 31, 2006, 08:40:55
nush daca ii de la asta ... da intra si in int nu trebuie folosit long


Titlul: Re: 049 Barbar
Scris de: Sima Mihai Cotizo -vechi din Iulie 31, 2006, 09:17:57
din cate stiu pe compilatoarele de 32 de biti, int == long... asa cum pe alea de 64 int == long long, nu?


Titlul: Raspuns: Re: 049 Barbar
Scris de: Marius Stroe din Iulie 31, 2006, 14:47:41
din cate stiu pe compilatoarele de 32 de biti, int == long... asa cum pe alea de 64 int == long long, nu?

Da. Eu folosesc Visual C++ si are compilator pe 32 de biti iar int == long. Cred ca e valabil si pentru cel de 64.

am uitat de pagina asta :-' sorry  :oops:

Mi-a fost lene sa explic din nou si ti-am dat un link.


Titlul: Răspuns: 049 Barbar
Scris de: Ionescu Robert Marius din Februarie 11, 2008, 21:42:17
care e faza cu ultimul test..am vazut ca este cu -1 ..insa nu vad ce gresesc..am pus conditia daca nu poate sa ajunga la final sa afiseze -1 ..si tot iau incorect :((

Gata m rezolvat 100 <:-P ,ms Marius ;)


Titlul: Răspuns: 049 Barbar
Scris de: Andrei Misarca din Aprilie 08, 2008, 10:38:56
Flacarile dragonilor pot trece prin zid? Adica daca am ceva de genu
Cod:
D*.
Distana pana la celula libera e 2 sau e data de distanta pana la un alt dragon?

L.E. : mi-am dat seama ca dragonii nu-s destul de puternici ca sa trimita flacari prin zid :)


Titlul: Răspuns: 049 Barbar
Scris de: Cosmin-Mihai Tutunaru din Aprilie 14, 2008, 17:04:41
Am si eu o problema cu testele 7 si 9.
La 7 primesc Wrong answer!, iar la 9 Killed by signal 11(SIGSEGV).
As vrea si eu cele doua teste daca se poate :)
stocarul [at] yahoo.com
Multumesc:)

Am pus aici si sursa:
Cod:
#include <fstream>
using namespace std;
fstream in,out;
const int dx[] = {0,0,1,-1};
const int dy[] = {1,-1,0,0};
long r,c;
long i,j,k;
long m[1001][1001];
long b[1001][1001];
long di[1000001],dj[1000001],ds[1000001];
long d=0,t;
long x,y,x1,y1;
long l,h,ma;
long suma;
char v[1001];

int nr_max(long i,long j)
  {
  long x=0;
  x=m[i][j];
  for(int k=0;k<4;k++)
    if(0<i+dx[k]<=r && 0<j+dy[k]<=c && m[i+dx[k]][j+dy[k]]>x)
      x=m[i+dx[k]][j+dy[k]];
  return x;
  }
int nr_min(long x,long y)
  {
  if(x>y) return y;
  else return x;
  }
void umple(long i,long j,long x)
  {
  for(int k=0;k<4;k++)
    if(0<i+dx[k]<=r && 0<j+dy[k]<=c && m[i+dx[k]][j+dy[k]]>=x && b[i+dx[k]][j+dy[k]]==0)
      {
      b[i+dx[k]][j+dy[k]] = 1;
      umple(i+dx[k],j+dy[k],x);
      }
  }
void goleste()
  {
  long i,j;
  for(i=1;i<=r;i++)
    for(j=1;j<=c;j++)
      b[i][j]=0;
  }

int main()
{
in.open("barbar.in",ios::in);
out.open("barbar.out",ios::out);
in>>r>>c;
in.get();
for(i=1;i<=r;i++)
  {
  in.getline(v,c+2,'\n');
  for(j=0;j<c;j++)
    {
    if(v[j]=='.') m[i][j+1]=3000000;
    else if(v[j]=='*') m[i][j+1]=-1;
    else if(v[j]=='D')
      {
      m[i][j+1]=0;
      d++;
      di[d]=i;
      dj[d]=j+1;
      }
    else if(v[j]=='I')
      {
      m[i][j+1]=3000000;
      x=i;
      y=j+1;
      }
    else
      {
      m[i][j+1]=3000000;
      x1=i;
      y1=j+1;
      }
    }
  }
in.close();
t=d;
for(i=1;i<=t;i++)
  {
  suma = m[di[i]][dj[i]]+1;
  for(j=0;j<4;j++)
    if(0<di[i]+dx[j]<=r && 0<dj[i]+dy[j]<=c && m[di[i]+dx[j]][dj[i]+dy[j]]>suma)
      {
      m[di[i]+dx[j]][dj[i]+dy[j]] = suma;
      t++;
      di[t]=di[i]+dx[j];
      dj[t]=dj[i]+dy[j];
      }
  }

h=nr_min(nr_max(x,y),nr_max(x1,y1));
k=-1;
l=0;
while(l<=h)
  {
  if(l>0 || h>0) ma=(l+h)/2;
    else ma=0;
  umple(x,y,ma);
  if(b[x1][y1]==1)
    {
    k=ma;
    l=ma+1;
    }
  else
    h=ma-1;
  goleste();
  }
out<<k<<endl;
out.close();
return 0;
}



Titlul: Răspuns: 049 Barbar
Scris de: Andrei Misarca din Aprilie 14, 2008, 17:22:42
In conditiile in care sursele nu se fac publice sansa sa le primesti e destul de mica ;) dar ai grija la program sa nu in vre-un ciclu infinit(o data am primit park Killed by signal 11 pt asta)

L.E. : Nu am avut destula rabdare sa urmaresc sursa, dar am un sfat: knd faci o parcurgere in latime(i se mai zice si algorimul lui lee), foloseste un sir de constante pentru directii(e mai usor de scris si de urmarit)
Cod:
const int dx[] = {-1, 1, 0, 0},
          dy[] = { 0, 0, 1,-1};

Asa se declara, iar cand vrei sa vezi toti vecinii unui element faci
Cod:
for(int k=0; k<4; k++)
{
  ivec = iact + dx[k];
  jvec = jact + dy[k];
...
}

unde iact si jact sunt indicii elementului curent(caruia vrei sai afli vecinii), iar ivec si jvec sunt indicii elementelor vecine


Titlul: Răspuns: 049 Barbar
Scris de: Bogdan-Alexandru Stoica din Aprilie 14, 2008, 18:49:24
[...]
L.E. : Nu am avut destula rabdare sa urmaresc sursa, dar am un sfat: knd faci o parcurgere in latime(i se mai zice si algorimul lui lee), foloseste un sir de constante pentru directii(e mai usor de scris si de urmarit)
[...]

nu se numeste algoritmul lui Lee (cum apare gresit in unele manuale de informatica), ci Breadth-first search :).


Titlul: Răspuns: 049 Barbar
Scris de: Andrei Misarca din Aprilie 14, 2008, 18:53:47
Pai am scris k i se mai zice algoritmul lui Lee (in mod gresit, in manualele de info), n-am zis k asa se si numeste  :)


Titlul: Răspuns: 049 Barbar
Scris de: Cosmin-Mihai Tutunaru din Aprilie 14, 2008, 19:05:56
In conditiile in care sursele nu se fac publice sansa sa le primesti e destul de mica ;) dar ai grija la program sa nu in vre-un ciclu infinit(o data am primit park Killed by signal 11 pt asta)

L.E. : Nu am avut destula rabdare sa urmaresc sursa, dar am un sfat: knd faci o parcurgere in latime(i se mai zice si algorimul lui lee), foloseste un sir de constante pentru directii(e mai usor de scris si de urmarit)
Cod:
const int dx[] = {-1, 1, 0, 0},
          dy[] = { 0, 0, 1,-1};

Asa se declara, iar cand vrei sa vezi toti vecinii unui element faci
Cod:
for(int k=0; k<4; k++)
{
  ivec = iact + dx[k];
  jvec = jact + dy[k];
...
}

unde iact si jact sunt indicii elementului curent(caruia vrei sai afli vecinii), iar ivec si jvec sunt indicii elementelor vecine
Multumesc mult pentru aceasta idee. Nu m-am gandit ca se poate scrie si asa, si intradevar e mult mai usor de scris algoritmul. Multumesc inca o data :yahoo:

p.s. Si totusi, de ce i-au doar 80 pct?


Titlul: Răspuns: 049 Barbar
Scris de: Farcasanu Alexandru Ciprian din Mai 25, 2008, 09:06:39
Daca avem
Cod:
5 5
I....
*....
D....
.....
...0.
at distanta minima este 2? Sau zidul "blocheaza" dragonul?


Titlul: Răspuns: 049 Barbar
Scris de: Popescu Marius din Mai 25, 2008, 09:23:34
Distanta minima nu este 2 deoarece dragonu nu poate arunca flacari prin zid ( zidu "blocheaza" dragonu ) deci in cazul asta distanta minima este 3 .


Titlul: Răspuns: 049 Barbar
Scris de: Farcasanu Alexandru Ciprian din Mai 25, 2008, 09:29:48
Deci dragonul nu poate da cu flacari decat in S,N,E,V ,corect?. deci daca am avea
Cod:
5 5
0....
..I..
...D.
.....
.....
atunci distanta ar fi infinit.... pt ca paftenie nu interactioneaza cu dragonul...nu?, in cazul acesta ce afisez?


Titlul: Răspuns: 049 Barbar
Scris de: Popescu Marius din Mai 25, 2008, 09:42:23
"minima din distantele pana la cel mai apropiat dragon din fiecare din celulele traseului sau sa fie maxim)." deci tu trebuie sa iti alegi un traseu a. i . distanta pana la cel mai apropiat dragon sa fie maximia , in cazul asta tu trebuie sa afisezi 3 pentru ca traseul tau este  (2,2)-(2,1)-(1,1) iar distanta pana la (2,2) este 3 obtinandu-se astfel : (3,3)-(3,2)-(2,2)


Titlul: Răspuns: 049 Barbar
Scris de: Farcasanu Alexandru Ciprian din Mai 25, 2008, 09:51:31
deci pt exemplul de la problema as obtine ceva de genu
Cod:
5 4 3 4 3 2 1 2 3 4 
4 3 2 3 2 1 0 1 2 3
3 2 1 2 3 2 1 2 3 4
2 1 0 1 2 1 0 1 2 3
1 -1 1 2 2 2 1 2 3 4
0 -1 2 2 1 2 2 3 4 5
-1 3 2 1 0 1 2 3 4 5
5 4 -1 -1 -1 -1 3 4 5 6
6 5 6 7 6 5 4 5 6 7
7 6 7 8 7 6 5 6 7 8
unde a(i,j) = dist minima pana la cel mai apropiat dragon. iar a(i)(j)=-1 unde avem zid
e corect?


Titlul: Răspuns: 049 Barbar
Scris de: Popescu Marius din Mai 25, 2008, 12:18:22
da e corect practic tu trebuie sa faci un BFS iar in coada bagi pozitiile dragonilor apoi sa alegi un traseu care sa contina elemente cat mai mari


Titlul: Răspuns: 049 Barbar
Scris de: Farcasanu Alexandru Ciprian din Mai 25, 2008, 17:38:18
asa am si facut...dar iau 80 de pcte....am incercat toate testele de pe forum si tot nu gasesc buba....imi puteti da cateva teste dificile?
LE: am scos 90
Am si eu probleme cu testul 7...


Titlul: Răspuns: 049 Barbar
Scris de: Pripoae Teodor Anton din Mai 25, 2008, 19:24:04
@ciprian
incearca sa maresti coada (sau mai bine implementeaz-o circular)


Titlul: Răspuns: 049 Barbar
Scris de: Serban Andrei Stan din Mai 25, 2008, 19:52:42
Sincer si eu am avut probleme cu testul 7.

Incearca testele de pe forum (primul test de pe prima pagina are raspunsul 3), s-ar putea sa analizezi gresit cazul cand flacara dragonului loveste punctul "I" in cazul de drum minim.  :thumbup:

Daca ai formatia

Cod:
...
.*.
.D.

Dragonul poate arunca foc(F) si in urmatorul fel:

Cod:
...
F*F
FDF

Nu e foarte clar exprimat in enunt, dar cam asta e. Focul poate s-o ia si "pe langa" zid.


Titlul: Răspuns: 049 Barbar
Scris de: Farcasanu Alexandru Ciprian din Mai 25, 2008, 20:28:59
pf, ms savime, eu incercasem testul dar credeam ca raspunsul e 4, adica ma gandeam ca trebuie sa gasesc acel drum , dar fara pozitia de plecare..


Titlul: Răspuns: 049 Barbar
Scris de: Popescu Marius din Iunie 26, 2008, 08:07:07
Eu iau pe ultimul test "wrong answer" , ma poate ajuta cineva ? Presupun ca imi intra in memorie din moment ce iau  "wrong answer". Am incercat toate testele de pe formun si imi merg.


LE: Am luat 100 era cazul cand nu aveam solutie si trebuia sa afisez -1 .


Titlul: Răspuns: 049 Barbar
Scris de: Pavel Razvan din Decembrie 03, 2009, 21:08:08
Pentru exemplul
Cod:
6 6
...O..
......
...I..
......
......
...D..


rezultatul e 4 ?


Titlul: Răspuns: 049 Barbar
Scris de: Dragos Oprica din Decembrie 03, 2009, 23:27:09
Pentru exemplul
Cod:
6 6
...O..
......
...I..
......
......
...D..


rezultatul e 4 ?

Raspunsul nu este 4, ci 3.


Titlul: Răspuns: 049 Barbar
Scris de: Pavel Razvan din Decembrie 07, 2009, 18:27:40
Multumesc
Am luat suta  \:D/


Titlul: Răspuns: 049 Barbar
Scris de: Stoianovici Horatiu Andrei din Februarie 19, 2010, 10:36:48
Imi poate trimite cineva daca se poate testul 3 si 9 pe [email protected] ? La testul 3 primesc TLE cred ca din cauza unui ciclu infinit, iar la 9 primesc killed by signal 11... si nu imi dau seama de ce :annoyed:...


Titlul: Răspuns: 049 Barbar
Scris de: Savin Tiberiu din Februarie 19, 2010, 10:38:33
Testele din arhiva de probleme nu se fac publice.


Titlul: Răspuns: 049 Barbar
Scris de: Alexandru-Iancu Caragicu din Februarie 28, 2010, 10:58:15
O sa sune cam aiurea mesajul asta, dar am o sugestie de propozitie de adaugat la cerinta: "Lui Paftenie ii plac provocarile, asa ca doreste el sa gaseasca singur drumul. Asa ca va cere sa-i spuneti doar distanta minima posibila, ca sa incerce sa o obtina."


Titlul: Răspuns: 049 Barbar
Scris de: Teodor Plop din Martie 10, 2010, 13:10:50
iau 90 puncte cu WA pe testul 3.ca timp de executie are 4 ms,deci ar trebui sa fie un test mic.
aveti vreo idee?:D


Titlul: Răspuns: 049 Barbar
Scris de: Chibici Tiberiu din Martie 18, 2011, 12:01:44
Am o intrebare.
Daca drumul arata asa:
Cod:
..o...
ooo...
...D..

Cat e distanta?
In mod normal ar fi sqrt(2);
Dragonii pot arunca flacari si pe diagonale? Sau pe linii frante???


Titlul: Răspuns: 049 Barbar
Scris de: Eugenie Daniel Posdarascu din Martie 18, 2011, 13:48:35
Am o intrebare.
Daca drumul arata asa:
Cod:
..o...
ooo...
...D..

Cat e distanta?
In mod normal ar fi sqrt(2);
Dragonii pot arunca flacari si pe diagonale? Sau pe linii frante???

Nu, nu pot nici pe diagonala si nici prin pereti.


Titlul: Răspuns: 049 Barbar
Scris de: Chibici Tiberiu din Martie 18, 2011, 16:30:18
Aha, dar care e distanta in cazul asta?


Titlul: Răspuns: 049 Barbar
Scris de: George Marcus din Martie 18, 2011, 17:02:04
2


Titlul: Răspuns: 049 Barbar
Scris de: Chibici Tiberiu din Martie 18, 2011, 22:11:45
Aha, merci. Cred ca am inteles acum  :banana:.


Titlul: Răspuns: 049 Barbar
Scris de: Andrei Ilisei din Martie 30, 2011, 11:47:29
se poate lua 100 pe problema si fara cautare binara (sau testele nu sunt indeajuns de stricte), folosind o matrice in care in v [ x ] [ y ] se tine minte valoarea minim de pe drumul pana in punctul de coordonate x si y :-?


Titlul: Răspuns: 049 Barbar
Scris de: George Marcus din Martie 30, 2011, 19:28:08
Merge cu doua parcurgeri in latime.


Titlul: Răspuns: 049 Barbar
Scris de: Andrei Constantinescu din Ianuarie 04, 2013, 13:22:42
Poate cineva sa imi spuna ce mai poate insemna SIGSEGV? Caci nu imi pot da seama de ce il primesc pe atat de multe teste.  ](*,) Nu cred ca ies din memorie, dar cine stie? Sursa este job #847696.

Foarte multe multumiri.

PS: Nici testul 3 nu stiu ce are mai special. Toate testele postate aici merg.


Titlul: Răspuns: 049 Barbar
Scris de: Adrian Craciun din Ianuarie 04, 2013, 13:49:12
SIGSEGV primesti atunci cand ai probleme cu memoria. Deobicei e vorba ca ai iesit din limitele unui vector etc.


Titlul: Răspuns: 049 Barbar
Scris de: Andrei Constantinescu din Ianuarie 04, 2013, 15:05:07
Asta deja stiam. Doar ca nu ies din vector. Din acest motiv am postat si numarul sursei. :-k


Titlul: Răspuns: 049 Barbar
Scris de: George Marcus din Ianuarie 04, 2013, 15:20:40
Iti iese din coada fiindca e posibil sa bagi de mai multe ori aceeasi celula. Problema e ca tu marchezi celula ca vizitata doar cand ai ajuns la ea cu capul si ar trebui sa o marchezi imediat dupa ce o bagi in coada. Gandeste-te ce se intampla daca ai in coada (1,2) si (2,1). De la amandoua vei baga in coada (2,2).


Titlul: Răspuns: 049 Barbar
Scris de: Andrei Constantinescu din Ianuarie 04, 2013, 17:29:03
Multumesc foarte mult lui George Marcus :thumbup:, chiar am invatat ceva din asta. (sa marchez nodul imediat ce a ajuns in coada). Acum insa, ce o avea testul 3 mai special, ca am facut teste mai speciale si merge programul pe ele. In plus oare iau TLE de la citirea caracter cu caracter?
Noua sursa este #847853.

Andrei


Titlul: Răspuns: 049 Barbar
Scris de: George Marcus din Ianuarie 04, 2013, 17:45:48
Incearca cu citirea din C (fgets).
P.S.: Nu are rost sa pui id-ul sursei fiindca nu ne ajuta cu nimic. Mai bine pui tot linkul de la sursa. Eu personal am intrat pe profilul tau si m-am uitat la ultima problema trimisa.


Titlul: Răspuns: 049 Barbar
Scris de: Andrei Constantinescu din Ianuarie 04, 2013, 17:48:36
O sa incerc. :ok: Insa ceea ce chiar ma preocupa este de ce nu merge testul 3?


Titlul: Răspuns: 049 Barbar
Scris de: George Marcus din Ianuarie 04, 2013, 18:09:31
Un alt lucru ce poate fi imbunatatit este prima parcurgere. Tu faci cate o parcurgere pentru fiecare dragon, insa e mai bine sa faci parcurgerea incepand paralel din toti dragonii (ii bagi in coada). Testul 3 nu stiu de ce il cazi, e un bug. Verifica atent codul.


Titlul: Răspuns: 049 Barbar
Scris de: Andrei Constantinescu din Ianuarie 04, 2013, 19:10:32
Fac mai multe parcurgeri doar ca un dragon faca update si continua parcurgerea numai daca are rost (ar da  pericole mai mici).


Titlul: Răspuns: 049 Barbar
Scris de: George Marcus din Ianuarie 04, 2013, 21:57:47
Gandeste-te ca ai un dragon la (1,1) si unul la (1000,1000). Faci parcurgerea din primul pe toata harta. Apoi vei face si din al doilea pana la jumatatea hartii. Daca mai ai doi dragoni in celelalte colturi vei mai face inca doua sferturi de harta. Si tot asa :)


Titlul: Răspuns: 049 Barbar
Scris de: sebi nechita din Octombrie 02, 2013, 20:51:56
Imi pica testul 3....cu Killed by signal....nu am folosit memorie prea putina ca i-am dat limitele matricei si la 2000 :annoyed:...nu stiu ce ar putea merge gresit pt ca imi merge pe toate celelalte...90 de puncte :fool:...stie careva ce ar trebui sa modific?


Titlul: Răspuns: 049 Barbar
Scris de: Matei Vlad din Noiembrie 17, 2013, 21:25:30
Cred ca am o problema cu interpretarea enuntului. In exemplu, daca el tb sa o ia "astfel incat minima din distantele pana la cel mai apropiat dragon din fiecare din celulele traseului sau sa fie maxim" de ce o ia la dreapta? celula din stanga si de deasupra nu sunt la o dist mai mare?


Titlul: Răspuns: 049 Barbar
Scris de: Puscas Sergiu din Noiembrie 17, 2013, 21:34:46
Pentru fiecare drum posibil de la sursa la destinatie, se ia in considerare punctul de pe traseu in care distanta dintre barbar si un dragon oarecare este minima.
Trebuie gasit un drum care maximizeaza distanta asta.

Pentru exemplu, chiar daca la inceput mergi in stanga sau in sus, oricum ai continua traseul pana la destinatie, tot te apropii la cel putin 2 unitati fata de un dragon.

Nu exista niciun drum in care sa fii permanent la o distanta >= 3 fata de orice dragon, deci solutia optima e 2.


Titlul: Răspuns: 049 Barbar
Scris de: Matei Vlad din Noiembrie 17, 2013, 21:45:46
Gata, am priceput. Dar nu vad cum m-ar ajuta cautarea binara.


Titlul: Răspuns: 049 Barbar
Scris de: Puscas Sergiu din Noiembrie 17, 2013, 23:37:19
Presupune prin absurd ca tu cunosti deja solutia ca fiind X, si vrei sa o verifici (adica sa faci o explorare a hartii astfel incat sa nu te apropii niciodata la o distanta mai mica de X, fata de vreun dragon).

Odata ce gasesti o modalitate de a verifica un anumit X si de a afla astfel daca valoarea respectiva poate fi solutie sau nu, tot ce iti ramane de facut e sa *cauti* cel mai mare X care verifica conditia.

Cautarea binara e corecta pentru ca functia f(x) = {1 daca x e solutie, 0 daca x nu e solutie) este monotona.
Cu alte cuvinte, exista un X maxim care poate fi solutie, astfel incat valorele {1, 2, ..., X-1, X} sunt si ele solutii valide (adica exista cel putin un traseu bun de la sursa la destinatie pentru fiecare valoare din lista) si pentru nicio valoare mai mare decat X nu exista niciun traseu.
Practic, distantele minime valide pe care le poti alege se termina brusc.


Titlul: Răspuns: 049 Barbar
Scris de: Matei Vlad din Noiembrie 18, 2013, 12:04:05
Mersi.


Titlul: Intrebare
Scris de: Pop-Tifrea Adrian din Mai 28, 2014, 22:00:17
Distanta minima din fiecare celula se refera la minima dintre axele de coordonate , sau la distanta dintre cel mai apropiat balaur si celula ? :-s


Titlul: Răspuns: 049 Barbar
Scris de: Tiplea Stefan din Aprilie 15, 2017, 12:57:20
Am o nelamurire in legatura cu problema aceasta, stau de ceva timp pe ea si unele raspunsuri ale testelor din comentarii chiar nu le inteleg si ma deruteaza si mai tare. Deci, un dragon arunca flacarile doar in sus, jos, dreapta si stanga? Daca da, este suficienta verificarea ca Paftenie sa nu treaca niciodata intr-o celula care este acoperita de foc, pentru a considera traseul valid?

LE: Am rezolvat pana la urma, nu era asa cum credeam initial  :D


Titlul: Răspuns: 049 Barbar
Scris de: Arhire Andrei din Martie 15, 2019, 16:17:48
In articolul cu solutii apare complexitatea O( r*c * lg ( r * c ) ) .
este O( r*c * lg ( r + c ) ) .