infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Silviu-Ionut Ganceanu din Martie 18, 2007, 11:52:56



Titlul: 357 Editor
Scris de: Silviu-Ionut Ganceanu din Martie 18, 2007, 11:52:56
Aici puteţi discuta despre problema Editor (http://infoarena.ro/problema/editor).


Titlul: Răspuns: 357 Editor
Scris de: Paul-Dan Baltescu din Martie 18, 2007, 12:45:51
Lipsesc niste "E"-uri in fisierul de intrare din exemplu.


Titlul: Răspuns: 357 Editor
Scris de: Ionescu Vlad din Martie 19, 2007, 20:58:06
Pot fi E-uri si in interiorul sirului sau numai la sfarsit? Daca pot fi si in interior, acestea cum se trateaza? Se evalueaza sirul numai pana la primul E intalnit si se afiseaza un mesaj in consecinta?

Efectuez stergerile, pun ce a mai ramas intr-o stiva si vad daca fiecarei paranteze deschise ii corespunde una inchisa corespunzatoare... totusi 20 de p deocamdata :(. Gresesc la implementare sau nu e buna ideea?


Titlul: Răspuns: 357 Editor
Scris de: Paul-Dan Baltescu din Martie 19, 2007, 21:09:30
Pot fi E-uri si in interiorul sirului sau numai la sfarsit? Daca pot fi si in interior, acestea cum se trateaza? Se evalueaza sirul numai pana la primul E intalnit si se afiseaza un mesaj in consecinta?

E-urile apar doar la sfarsitul liniei.

Efectuez stergerile, pun ce a mai ramas intr-o stiva si vad daca fiecarei paranteze deschise ii corespunde una inchisa corespunzatoare... totusi 20 de p deocamdata :(. Gresesc la implementare sau nu e buna ideea?

Pare buna ideea. Verifici la sfarsit ca stiva sa fie goala?


Titlul: Răspuns: 357 Editor
Scris de: Ionescu Vlad din Martie 19, 2007, 21:31:01
Da. Daca este goala, sirul este parantezat corect, daca nu, nu este...

100% omit ceva detaliu...

Edit: da, aveam niste break-uri care stricau totul. Am luat 100 :). Multumesc!


Titlul: Răspuns: 357 Editor
Scris de: Paul-Dan Baltescu din Martie 19, 2007, 21:46:40
Stiva poate fi goala, iar sirul sa nu fie parantezat corect.

De exemplu:
((()))[]]E
(()))[]E


Titlul: Răspuns: 357 Editor
Scris de: Radu Zernoveanu din Martie 20, 2007, 16:57:16
Efectuez stergerile, pun ce a mai ramas intr-o stiva si vad daca fiecarei paranteze deschise ii corespunde una inchisa corespunzatoare... totusi 20 de p deocamdata :(. Gresesc la implementare sau nu e buna ideea?


Ideea nu mi se pare buna, pentru ca in exemplul:
([)](([)])E  , fiecarei paranteze ii corespunde o alta paranteza


Titlul: Răspuns: 357 Editor
Scris de: Ionescu Vlad din Martie 20, 2007, 17:16:01
Da, iar in cazul acesta sirul nu este parantezat corect.


Titlul: Răspuns: 357 Editor
Scris de: Radu Zernoveanu din Martie 20, 2007, 17:18:14
exact


Titlul: Răspuns: 357 Editor
Scris de: Trimbitas Viorel Stefan din Martie 21, 2007, 10:03:06
Cum se face ca timpul de executie este maxim 1 sec ?... problema se rezolva in 0.15 sec

ca sa fiti siguri ca problema e corecta .... printre celelalte cazuri date verificati si cazul
([([])])E

[Editat de moderator: Nu mai posta de 2 ori consecutiv]


Titlul: Răspuns: 357 Editor
Scris de: Gabriel Bitis din Aprilie 25, 2007, 19:17:52
Test     Timp executie     Memorie folosita     Mesaj    Punctaj/test
1   0ms   8kb   Incorect   0
2   0ms   8kb   OK   10
3   0ms   12kb   OK   10
4   0ms   8kb   OK   10
5   20ms   232kb   OK   10
6   20ms   260kb   OK   10
7   36ms   328kb   OK   10
8   64ms   344kb   OK   10
9   52ms   304kb   OK   10
10   80ms   448kb   OK   10
Punctaj total   90
... are cineva idee ce as fi putut gresi? :-??


Titlul: Răspuns: 357 Editor
Scris de: Cezar Mocan din Aprilie 25, 2007, 19:52:50
Vezi daca iti merge pe teste cu "****" in fata. Eu aia greseam si luam WA pe testu 1.
De exemplu ****()E


Titlul: Răspuns: 357 Editor
Scris de: Gabriel Bitis din Aprilie 25, 2007, 19:59:46
Vezi daca iti merge pe teste cu <<<< in fata. Eu aia greseam si luam WA pe testu 1.

nu inteleg ce e cu "<<<<" ... poti sa'mi explici?


Titlul: Răspuns: 357 Editor
Scris de: Cezar Mocan din Aprilie 25, 2007, 20:04:41
Ma refeream la *. Am corectat. Scuze.


Titlul: Răspuns: 357 Editor
Scris de: Gabriel Bitis din Aprilie 26, 2007, 14:00:54
nu e aia problema...testul dat de tine merge ...  ](*,).. alte sugestii ????


Titlul: Răspuns: 357 Editor
Scris de: Adrian Diaconu din Aprilie 26, 2007, 14:13:15
Incearca testul
Citat
)E


Titlul: Răspuns: 357 Editor
Scris de: Gabriel Bitis din Aprilie 26, 2007, 14:55:01
ms pt sugestii... am rezolvat :)  :ok:


Titlul: Răspuns: 357 Editor
Scris de: Savin Tiberiu din Mai 31, 2007, 20:54:51
acele reguli de constructie a sirului nu par editate tocmai klumea.


Titlul: Răspuns: 357 Editor
Scris de: Silviu-Ionut Ganceanu din Mai 31, 2007, 21:02:48
Se vede bine acuma?


Titlul: Răspuns: 357 Editor
Scris de: Savin Tiberiu din Mai 31, 2007, 21:06:10
dap :). Nu cred ca era nevoie sa schimbi formatul lor, doar ca apareau simbolurile $ $ care am banuit ca nu trebuiau sa fie acolo. Oricum e mai bine asa :D


Titlul: Răspuns: 357 Editor
Scris de: Florian Marcu din Iulie 01, 2007, 10:00:41
Ce are asa de special testul 1? Imi merg toate exemplele postate pe forum, si toate testele mele! Ce ar putea avea?


Titlul: Răspuns: 357 Editor
Scris de: Paul-Dan Baltescu din Iulie 01, 2007, 10:08:55
Iti merg testele astea?

*****E
(**E

Inca doua:
*()*E
*())*E


Titlul: Răspuns: 357 Editor
Scris de: Florian Marcu din Iulie 01, 2007, 11:49:12
Imi bushea ultimile doua teste pe care le-ai postat! Multumesc mult de ajutor!  :thumbup:


Titlul: Răspuns: 357 Editor
Scris de: Ionescu Robert Marius din Iulie 01, 2007, 16:06:06
nu inteleg de ce imi da Killed by signal 11(SIGSEGV). imi poate spune cineva care st motivele


Titlul: Răspuns: 357 Editor
Scris de: Florian Marcu din Iulie 01, 2007, 16:09:41
Uita-te la numele fisierelor, sau poate accesezi o zona de memorie nedeclarata [ ex: vectori prea mici]. Ori, dak lucrezi in c++, poate programul iti returneaza altceva decat 0.  [ ps : daca nu reusesti imi poti da un pm]


Titlul: Răspuns: 357 Editor
Scris de: Ionescu Robert Marius din Iulie 01, 2007, 16:18:02
asa e :D am declarat un vector a[3] si eu il parcurgam pana la 1500 ms :oops:


Titlul: Răspuns: 357 Editor
Scris de: Andrici Cezar din Iunie 19, 2009, 18:00:10
Stiu ca solutia mea nu e eficienta... dar merge bine, da corect pe toate testele care mi le dau si toate de pe forum... Nu cumva e o problema cu testul 1?


Titlul: Răspuns: 357 Editor
Scris de: Florian Marcu din Iunie 19, 2009, 18:06:38
Stiu ca solutia mea nu e eficienta... dar merge bine, da corect pe toate testele care mi le dau si toate de pe forum... Nu cumva e o problema cu testul 1?

Nu. Nu e  :)

Merge si pe astea?

Cod:
****()E
*()*E
*())*E


Titlul: Răspuns: 357 Editor
Scris de: Andrici Cezar din Iunie 19, 2009, 18:22:26
am mai adaugat cateva breakuri si uitati ce imi da pentru...

Cod:
10
*****E
(**E
*()*E
*())*E
)E
([)](([)])E
((()))[]]E
(()))[]E
([([])])E
****()E

imi da

Cod:
:)
:)
:(
:)
:(
:(
:(
:(
:)
:)

mie mi se pare ca da bine


Titlul: Răspuns: 357 Editor
Scris de: Iordache Albert din Iunie 23, 2009, 20:06:22
am mai adaugat cateva breakuri si uitati ce imi da pentru...

...

mie mi se pare ca da bine

Da, alea sunt bune.

Dar daca ar fi asta:
Cod:
((**E

A doua steluta sterge prima paranteza si da bine?


Titlul: Răspuns: 357 Editor
Scris de: Dragos-Alin Rotaru din Iunie 24, 2009, 22:22:30
Exact.  :ok:


Titlul: Răspuns: 357 Editor
Scris de: Bogdan Ionut din Martie 08, 2010, 14:49:03
E-uri se pot afla si prin sir sau doar la sfarsit ?


Titlul: Răspuns: 357 Editor
Scris de: Florian Marcu din Martie 08, 2010, 14:56:23
La sfarsit doar.


Titlul: Răspuns: 357 Editor
Scris de: Vlad Tarniceru din Martie 19, 2010, 23:10:06
mi-a iesit de 100 puncte :boxing: :boxing: :boxing:
ideea este urm:
retii intr-un vector char parantezele si de fiecare data cand ai '*' stergi ultimul caracter.apoi mai iei 4 variabile in care notezi:
-cate ' ( ' ai
-cate ' ) ' ai
-cate ' [ ' ai
-cate ' ] ' ai

apoi verifici daca nr_par_(==nr_par_) si nr_par_[==nr_par_] si daca nu ai alte chestii( de exemplu "( (  [ ) ] ) ")

totusi ce are testul 1 ca am vazut ca pica multi pe el :-k . e din cauza ca are '*' la inceput?


Titlul: Răspuns: 357 Editor
Scris de: Simoiu Robert din Martie 20, 2010, 10:24:49
Am facut problema, dar iau incorect pe primul test. Am incercat toate testele puse de voi si au mers. Care sa fie problema? Merci


Titlul: Răspuns: 357 Editor
Scris de: A Cosmina - vechi din Martie 20, 2010, 11:08:52
Poate ca testul are mai mult de o * sau ceva asemanator.

P.S : Ar fi foarte fain daca dupa ce rezolvati o problema sa nu postati rezolvarea completa ... Se strica tot farmecul si poate vor si altii sa gandeasca.  [-X


Titlul: Răspuns: 357 Editor
Scris de: Simoiu Robert din Martie 20, 2010, 11:36:24
Am incercat si imi da bine ... Alte sugestii ?
[LE] Am reusit in sfarsit


Titlul: Răspuns: 357 Editor
Scris de: zloteanu adrian nichita din Octombrie 03, 2010, 14:52:33
Am incercat exemplul,toate testele de pe forum,am mai dat si eu cateva,dar tot nu merge...asta e sursa:
Cod:
#include<fstream>
int j,pos,lim2,lim,T,i;
char v[50001],v2[50001];
using namespace std;
int main()
{
ifstream q("editor.in");
ofstream w("editor.out");
q>>T;
for(i=1;i<=T;i++)
  {lim=1;
  q>>v[lim];
  while(v[lim]!='E')
      {if(v[lim]=='*'&&lim>1)
        lim--;
       else
        {if(v[lim]!='*')
        lim++;}
       q>>v[lim];}
  lim2=1;
  pos=0;
  lim--;
  for(j=1;j<=lim;j++)
    if(v[j]=='('||v[j]=='[')
     {v2[lim2]=v[j];
     lim2++;}
    else
     /*{if((v2[lim2-1]=='['&&v[j]==']')||(v2[lim2-1]=='('&&v[j]==')'))
       v2[lim2-1]='-';
      else
       {j=lim+1;
       w<<":(\n";
       pos=1;}}*/ aici se termina ce am modificat
  if(pos==0)
  {for(j=lim2-1;j>=1;j--)
    if(v2[j]=='('||v2[j]==')'||v2[j]=='['||v2[j]==']')
     {w<<":(\n";
     j=-1;}
  if(j==0&&(lim2!=1||(v[1]=='['||v[1]=='('||v[1]=='E')))
   w<<":)\n";
  else
  if(lim2==1)
   w<<":(\n";}}
return 0;}
P.S:luam 70 de puncte,cu 3 tle-uri,si am pus in comment partea schimbata(aproape sigur acolo e o problema).Fac exact ca in solutia oficiala


Titlul: Răspuns: 357 Editor
Scris de: Eugenie Daniel Posdarascu din Octombrie 03, 2010, 22:13:45
Implementeaza si tu mai frumos ca nu cred ca poate intelege cineva ce ai scris acolo. Lasa si tu tab-uri. :thumbup:


Titlul: Răspuns: 357 Editor
Scris de: Iulian Popescu din Martie 17, 2011, 08:20:15
Poate posta cineva niste teste ceva mai lungi....


Titlul: Răspuns: 357 Editor
Scris de: Simoiu Robert din Martie 17, 2011, 08:59:57
Cod:
7
)E
**********E
(((((]]*******[()]E
]]]***[[[***(((***)))***E
((([[[[][[()]]()()]]])))E
*((([[[[][[()]]()()]]])))*E
(((((((([[[[[[[(())]]]]]]]))))))))***)))E
Cod:
:(
:)
:)
:)
:)
:(
:)


Titlul: Răspuns: 357 Editor
Scris de: FMI Razvan Birisan din Septembrie 19, 2012, 16:10:14
Cod:
23
E
[][][]E
**[]()*E
)E
*****E
(**E
*()*E
*())*E
([)](([)])E
((()))[]]E
(()))[]E
([([])])E
****()E
)E
**********E
(((((]]*******[()]E
]]]***[[[***(((***)))***E
((([[[[][[()]]()()]]])))E
*((([[[[][[()]]()()]]])))*E
(((((((([[[[[[[(())]]]]]]]))))))))***)))E
][)()*E
[[**]()E
[[]]()()E
Cod:
:)
:)
:(
:(
:)
:)
:(
:)
:(
:(
:(
:)
:)
:(
:)
:)
:)
:)
:(
:)
:(
:(
:)


Titlul: Răspuns: 357 Editor
Scris de: FMI - GabrielG din Decembrie 14, 2012, 21:49:11
Un caz care merita testat :). Am pierdut 2 ore din cauza lui.
PS. Programul meu mergea pe toate testele postate dar pica pe testul asta.

1
[
  • **


Titlul: Răspuns: 357 Editor
Scris de: Stanbeca Theodor-Ionut din Noiembrie 09, 2013, 02:16:09
Am nevoie de o idee la problema asta. Tot ce s-a pus aici imi merge dar iau doar 10 puncte, restul WA.


Titlul: Răspuns: 357 Editor
Scris de: Mihai Ionut Enache din Noiembrie 09, 2013, 02:39:27
Foloseste o stiva in varful careia sa tii tipul ultimei paranteze deschise, iar cand intalnesti o paranteza inchisa verifici daca este de acelasi tip ca cea din varful stivei si o elmini. In cazul in care paranteza din varful stivei nu coincide cu paranteza intalnita, sirul este gresit parantezat. La sfarsit mai ai de verificat daca stiva este goala.


Titlul: Răspuns: 357 Editor
Scris de: Daniel Alexandru Radu din Noiembrie 17, 2013, 09:07:18
Imi reusesc toate testele pe care le-am vazut in celalalte comentarii si totusi iau doar 10 puncte (doar ultimul test). Restul sunt incorecte. Poate cineva sa imi dea un test mai complex?

EDIT: am rezolvat. nu tineam cont ca pot fi mai multe * la rand si verificam aiurea :D


Titlul: Răspuns: 357 Editor
Scris de: Andrei Dinu din Martie 24, 2014, 21:12:49
Salut!

Toate testele postate pe forumul problemei imi dau corect.
Iau totusi numai 20p.

Ma poate ajuta cineva?


Titlul: Răspuns: 357 Editor
Scris de: FMI - gr143 Timofte Ciprian din Noiembrie 07, 2014, 13:01:15
Are cineva idee de ce aceasta rezolvare primeste sigsev pe toate testele?
Cod:
#include <stdio.h>
#include <stdlib.h>
 
char sir[600010],c;
int index,rotdesc,patdesc,erori,t;
 
int main()
{
   freopen("editor.in","r",stdin);
   freopen("editor.out","w",stdout);
scanf("%d",&t);
while(t)
{
 
 
   scanf(" %c",&c);
   while(c!= 'E')
   {
       if(c=='*'){ if(index >0) index--; }
       else {index++; sir[index]=c; }
scanf(" %c",&c);
}
int i=1;
while(!erori && i<=index && i<600000)
{
 
    if(sir[i]=='(') rotdesc++;
    if(sir[i]==')') rotdesc--;
    if(sir[i]=='[') patdesc++;
    if(sir[i]==']') patdesc--;
if(rotdesc < 0 || patdesc < 0) erori=1;
   i++;
}
if(!rotdesc && !patdesc) printf(":)\n");
else printf(":(\n");
 
t--;
index=0;
rotdesc=0;
patdesc=0;
erori=0;
}
 
 
 
 
    return 0;
}


Titlul: Răspuns: 357 Editor
Scris de: Vlad Matei din Aprilie 01, 2016, 21:19:02
O chestiune pe care n-am luat-o in seama. La fiecare E intalnit sirul se reseteaza. De exemplu, daca ai (E)E, obtii :( :( nu :(:)


Titlul: Răspuns: 357 Editor
Scris de: Ababei Daniel din Mai 08, 2016, 15:35:17
O mica remarca:testele nu acopera cazul in care este un numar egal de paranteze ,dar toate sunt orientate in sens opus.De exemplu : la ]]]][[[[ o sursa care ia 100 de puncte afiseaza ":)" in loc de  ":(" :D :D