infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Airinei Adrian din Aprilie 05, 2009, 11:26:28



Titlul: 838 Alibaba
Scris de: Airinei Adrian din Aprilie 05, 2009, 11:26:28
Aici puteti discuta despre problema Alibaba (http://infoarena.ro/problema/alibaba).


Titlul: Răspuns: 838 Alibaba
Scris de: gaboru corupt din Aprilie 05, 2009, 14:43:43
Ce are asa special ultimul test? Am vazut ca mai multa lume nu l-a prins. E ceva caz particular?

PS: Problemele nu au legatura la forum. 10x


Titlul: Răspuns: 838 Alibaba
Scris de: Craciun Adrian din Aprilie 05, 2009, 15:08:11
E un test cu n (si k) aproape de limite. Posibil e ceva cu multe 0 si nr cifrelor care trebuie extrase este mai mare ca nr cifrelor diferite de 0 ceea ce s-ar putea sa duca la un rezultat eronat la acest test.
P.S: doar o parere 


Titlul: Răspuns: 838 Alibaba
Scris de: gaboru corupt din Aprilie 05, 2009, 15:30:48
Indiferent de marimea tesului, algoritmul ar trebui sa se comporte ok. Stiva e implementata din STL deci nu am probleme cu memoria.


Titlul: Răspuns: 838 Alibaba
Scris de: Craciun Adrian din Aprilie 05, 2009, 16:02:13
Pune sursa pe forum. :ok:


Titlul: Răspuns: 838 Alibaba
Scris de: Craciun Adrian din Aprilie 05, 2009, 16:12:31
am incercat sa-mi modific propria sursa astfel incat sa nu obtin nici un punct la ultimul test. am reusit doar cand am pus nr de caractere citite de la 10000 la 9999.
adica problema cred ca ii de marimea vectorului...pune-l de 10001 di caracterele citite la fel...poate merge


Titlul: Răspuns: 838 Alibaba
Scris de: gaboru corupt din Aprilie 05, 2009, 16:17:55
Poi nu cred ca aia ii problema, ca eu am folosit stack-ul din stl, care e alocat dinamic, nu aloc eu zona de memorie pentru ea. Si nu prea as pune sursa pe forum doar pentru o gresala asa minora.


Titlul: Răspuns: 838 Alibaba
Scris de: chisinau gheorghita din Aprilie 05, 2009, 19:29:51
de unde stii ca e asa de minora? ;)


Titlul: Răspuns: 838 Alibaba
Scris de: gaboru corupt din Aprilie 05, 2009, 19:37:56
Avand in vedere ca toate celelalte 9 teste is OK si numai unu ia WA, programul nu are o eroare in gandire, poate in implementare. Si atunci oricine care se multumeste cu o problema de 90 de puncte da un copy-paste de pe forum si asta basta. Niciodata nu am agreat postarea surselor pe forum :thumbdown:


Titlul: Răspuns: 838 Alibaba
Scris de: chisinau gheorghita din Aprilie 05, 2009, 20:01:28
Poate ai avut noroc si ai nimerit teste pe care iti merge....asta nu inseamna ca e neaparat si ok solutia ;)


Titlul: Răspuns: 838 Alibaba
Scris de: gaboru corupt din Aprilie 05, 2009, 20:08:25
CE???  :-# Glumesti??? Daca iti intra 90% din teste inseamna ca ai bulan?  :rotfl: Numa bulanuri din astea sa am de acuma incolo :clover:. NU... solutia e buna. Si e si implementata optim(memorie). Doar scapa un caz particular. Fie, daca stie careva cum scap de WA-ul ala, let me know


Titlul: Răspuns: 838 Alibaba
Scris de: Florian Marcu din Aprilie 05, 2009, 20:23:04
Poate ai avut noroc si ai nimerit teste pe care iti merge....asta nu inseamna ca e neaparat si ok solutia ;)

Genial post!  :D


Titlul: Răspuns: 838 Alibaba
Scris de: Andrici Cezar din Aprilie 05, 2009, 20:39:16
nu inteleg de ce i-au doar 10 puncte, la restu imi zice incorect
am facut un vector de frecventa pentru cifrele de la 0 la 9 si am strabatut numarul de la stanga la dreapta si am scos toate cifrele si am avut grija cat scot si pana unde. Ma ajuta si pe mine cineva? Mie imi zice incorect, dar acasa imi dau bine toate testele care i le-am dat #-o puteti sa ma ajutati? :-' :readthis:


Titlul: Răspuns: 838 Alibaba
Scris de: Florian Marcu din Aprilie 05, 2009, 20:45:12
Ordinea cifrelor din noul numar trebuie sa fie aceeasi ca in numarul initial. De exemplu, daca ai numarul initial 4512, si elimini k=2 cifre, atunci rezultatul este 45. Tu probabil afisezi 54 [ ceea ce nu e corect, pt ca 4 trebuie sa apara inaintea lui 5 ].


Titlul: Răspuns: 838 Alibaba
Scris de: Emanuel Cinca din Aprilie 05, 2009, 21:09:14
Poate ai avut noroc si ai nimerit teste pe care iti merge....asta nu inseamna ca e neaparat si ok solutia ;)

Genial post!  :D

Putin offtopic:

Zicea un coleg :"Ah, nu mi-a intrat pe evaluare partiala, dar poate am noroc si imi intra pe celalalte 9 teste!"

Pe bune, unde exista 9 cazuri particulare si un singur caz general? Sa fim seriosi acuma  :rastabanana:


Titlul: Răspuns: 838 Alibaba
Scris de: chisinau gheorghita din Aprilie 05, 2009, 21:10:12
Nu exista cazuri particulare ;) Manu si Gaboru voi credeti ca testele sunt intotdeauna optim alese? Am mai intalnit altii care luau si 100 cu surse gresite....asa ca nu mai spune tu ca daca ai 90 inseamna ca e neaparat ok sursa....uite ca nu e, ca nu stii sa o faci de 100 :P. Ia povesteste putin ce faci pe-acolo


Titlul: Răspuns: 838 Alibaba
Scris de: Emanuel Cinca din Aprilie 05, 2009, 21:22:06
Nu exista cazuri particulare ;) Manu si Gaboru voi credeti ca testele sunt intotdeauna optim alese? Am mai intalnit altii care luau si 100 cu surse gresite....asa ca nu mai spune tu ca daca ai 90 inseamna ca e neaparat ok sursa....uite ca nu e, ca nu stii sa o faci de 100 :P. Ia povesteste putin ce faci pe-acolo

Daca stii ca altii au luat 100 cu surse gresite, dovedeste ca algoritmul lor e gresit si da un contraexemplu care sa devina poate si test oficial.  :wink:


Titlul: Răspuns: 838 Alibaba
Scris de: gaboru corupt din Aprilie 05, 2009, 21:24:01
Poi da. In ultima vreme testele sunt foarte bine alese, in special la problemele facute la concursurile de pe infoarena. In al doilea rand, daca tot ai avut probleme si tu cu ultimul test, ai putea zice care a fost problema. In al treilea rand, nu stiu cate "mii" de feluri de solutii is pentru a mai avea rost sa explic metoda mea. Toata lumea stie ca genul asta de probleme se face cu stiva, operatiile fiind evidente. Si da, de obicei (99,(99)%) daca ai 90 de pct inseamna ca algoritmul e ok, decat ca ai o eroare la implementare. Merci de sfat totusi :rastabanana:


Titlul: Răspuns: 838 Alibaba
Scris de: Craciun Adrian din Aprilie 05, 2009, 21:25:05
Citat
nu inteleg de ce i-au doar 10 puncte, la restu imi zice incorect
am facut un vector de frecventa pentru cifrele de la 0 la 9 si am strabatut numarul de la stanga la dreapta si am scos toate cifrele si am avut grija cat scot si pana unde. Ma ajuta si pe mine cineva? Mie imi zice incorect, dar acasa imi dau bine toate testele care i le-am dat  puteti sa ma ajutati?
credca nu ai inteles bine cerinta problemei. nu ai nevoie de un vector de frecventa(in acesta problema ca in trompeta care e asemanatoare s-ar puatea sa ai nevoie ca se incadreaza in timp), trebuie doar sa gasesti cifrele cele mai mari cu conditia sa fie de la stanga la dreata si fiecare cifra maxima nou gasita sa permita sa fie gasite alte cifra maxim.


Titlul: Răspuns: 838 Alibaba
Scris de: Florian Marcu din Aprilie 05, 2009, 21:26:00
Nu exista cazuri particulare ;) Manu si Gaboru voi credeti ca testele sunt intotdeauna optim alese? Am mai intalnit altii care luau si 100 cu surse gresite....asa ca nu mai spune tu ca daca ai 90 inseamna ca e neaparat ok sursa....uite ca nu e, ca nu stii sa o faci de 100 :P. Ia povesteste putin ce faci pe-acolo
Deci, acum ne-ai convins pe toti. Gaboru, cum iti permiti sa iei 90 de puncte afisand numere random ?  :angry:

on topic: Da cat mai multe teste. Undeva trebuie sa pice. Daca numerele sunt in ordine descrescatoare iti merge? Incearca asta:

Cod:
5 1
54321


Titlul: Răspuns: 838 Alibaba
Scris de: chisinau gheorghita din Aprilie 05, 2009, 21:32:01
Uite aici daca tot vrei un exemplu: Omega91 la problema Motel:

Cod:
raspunsul pt
Cod:

2
1 3
3 8
3
1

este
Cod:
1 2
2 3

sau 0 0?

intreb deoarece teoretic ar trebui sa fie prima varianta, dar sursa mea de 100 mi-o afiseaza pe a 2-a

Daca nu crezi uita-te pe forumul de la problema respectiva....


L.E: Nu am avut nici o problema cu ultimul test....prima solutie a dat TLE pe el si atunci am mers pe alta idee ;)


Titlul: Răspuns: 838 Alibaba
Scris de: Sima Cotizo din Aprilie 05, 2009, 21:43:56
Devii offtopic. Au fost si probleme de nationala la care luai 70p cu o sursa gresita, dar nu trebuie sa insisti atata. Daca vrei sa il ajuti cu adevarat, ofera-te sa aflii cum face el sau prezinta-i ideea ta (daca mai este nevoie)...


Titlul: Răspuns: 838 Alibaba
Scris de: Andrei Grigorean din Aprilie 05, 2009, 22:40:46
Salut,

Observ ca discutia a devenit offtopic. V-as sugera sa va calmati putin ;).


Titlul: Răspuns: 838 Alibaba
Scris de: Andrici Cezar din Aprilie 06, 2009, 09:49:21
Ordinea cifrelor din noul numar trebuie sa fie aceeasi ca in numarul initial. De exemplu, daca ai numarul initial 4512, si elimini k=2 cifre, atunci rezultatul este 45. Tu probabil afisezi 54 [ ceea ce nu e corect, pt ca 4 trebuie sa apara inaintea lui 5 ].
Mie imi da bine imi da 45 pentru testul tau:D
Mai datimi teste va rog :(


Titlul: Răspuns: 838 Alibaba
Scris de: Florian Marcu din Aprilie 06, 2009, 11:25:55
Cod:
6 2
561934

raspuns : 6934


Titlul: Răspuns: 838 Alibaba
Scris de: Craciun Adrian din Aprilie 06, 2009, 14:44:10
Citat
Ordinea cifrelor din noul numar trebuie sa fie aceeasi ca in numarul initial. De exemplu, daca ai numarul initial 4512, si elimini k=2 cifre, atunci rezultatul este 45. Tu probabil afisezi 54 [ ceea ce nu e corect, pt ca 4 trebuie sa apara inaintea lui 5 ].
Mie imi da bine imi da 45 pentru testul tau:D
Mai datimi teste va rog

daca vrei iti dau sursa mea la alibaba(100 puncte) daca-mi dai sursa ta la palindrom2 :peacefingers:


Titlul: Răspuns: 838 Alibaba
Scris de: Florian Marcu din Aprilie 06, 2009, 14:46:52
Citat
Ordinea cifrelor din noul numar trebuie sa fie aceeasi ca in numarul initial. De exemplu, daca ai numarul initial 4512, si elimini k=2 cifre, atunci rezultatul este 45. Tu probabil afisezi 54 [ ceea ce nu e corect, pt ca 4 trebuie sa apara inaintea lui 5 ].

Scuza-ma. Nu am fost atent. Rezultatul nu este 45, ci 52. Deci aici gresesti!  :)



Titlul: Răspuns: 838 Alibaba
Scris de: Andrici Cezar din Aprilie 06, 2009, 19:15:33
ms :D am inteles unde am gresit acum trebuie doar sa rezolv greseala :D


Titlul: Răspuns: 838 Alibaba
Scris de: zloteanu adrian nichita din Aprilie 08, 2009, 14:56:56
imi da eroare de compilare ](*,) ](*,)
dar acasa imi functioneaza perfect :-k


Titlul: Răspuns: 838 Alibaba
Scris de: Florian Marcu din Aprilie 08, 2009, 15:06:38
Pai tu nu faci cu fisiere? Vad ca folosesti functia "cin" din iostream. Nu ai voie.


Titlul: Răspuns: 838 Alibaba
Scris de: zloteanu adrian nichita din Aprilie 08, 2009, 15:09:30
da,mi-am dat seama
dar tot imi pica un test,desi nu stiu sigur care
(nota:cum de mi-ai vazut sursa?)


Titlul: Răspuns: 838 Alibaba
Scris de: Florian Marcu din Aprilie 08, 2009, 15:12:41
Pai nu ti-am vazut sursa. Ti-am vazut doar mesajul emis de evaluator, in borderoul de evaluare. Tie iti pica ultimul test, deoarece iti iese din timp. Citeste documentatia (http://infoarena.ro/documentatie) ca sa intelegi mai bine cum sa umbli pe site.  :)


Titlul: Răspuns: 838 Alibaba
Scris de: Andrei Misarca din Iulie 29, 2009, 07:57:07
Citat
pe ea o calculez astfel nou=nou*10+max
Avand in vedere ca N, K <= 10000, e cam greu sa-ti retii in nou un numar de 10000 de cifre.
Apoi, din ce am citit, solutia ta este de complexitate O(N2), si nici prea corecta nu este. Tu cauti maximul, iar dupa ce l-ai gasit cauti maximul elementelor de dupa el (asa am inteles eu, cel putin) si tot asa. Dar daca maximul este pe ultima pozitie ce te faci?
Poti citi articolul cu solutii pentru a te ajuta sa gasesti un algoritm rapid si corect.


Titlul: Răspuns: 838 Alibaba
Scris de: Urs David din Septembrie 02, 2009, 14:03:40
ma ajuta careva....? la toate testele care le incerc imi merge...dar cand dau la evaluator.. 0 pct!..
Code:
Cod:
#include<fstream.h>
main()
{
long n,k,a[1000]={0},i,j,c=0,m=0,min,max=0,l=0,p=0;
ifstream f("alibaba.in");
ofstream g("alibaba.out");

f>>n;
f>>k;
f>>j;
        i=n;
while(j)
  {
   a[i]=j%10;
   i--;
   j=j/10;
  }
for(j=10; j>0; j--)
{
max=0;
if(l==0)
for(i=1; i<=n; i++)
if(a[i]!=j)max++;
if(max==n)l=j;
}
while(c!=k)
for(i=1; i<n; i++)
{
if(a[n] < a[n-1] && p==0 && c!=k){
               a[n]=l;
               c++;
               p++;
              }
if(a[i] < a[i+1] && c!=k){
                 a[i]=l;
                 c++;
                }
}
for(i=1; i<=n; i++)
if(a[i]!=l) m=m*10+a[i];
g<<m;
return 0;
}

...

[editat de moderator] Foloseste tagul code cand postezi cod pe forum.


Titlul: Răspuns: 838 Alibaba
Scris de: Andrei Misarca din Septembrie 02, 2009, 14:28:51
Foloseste tagul "code" cand postezi o sursa, si in plus fisierul de intrare este alibaba.in respectiv alibaba.out


Titlul: Răspuns: 838 Alibaba
Scris de: Urs David din Septembrie 02, 2009, 14:50:06
... o sa modific "tagurile"...:) deocamdata nu stiu...nu am mai folosit infoarena...
am schimbat si in alibaba.out/in... dar nu e aceea problema...vede careva alta problema..?


Titlul: Răspuns: 838 Alibaba
Scris de: Maria Liviu Valentin din Ianuarie 14, 2010, 17:46:46
Imi zice si mie cineva ce gresesc daca sortez crescator vectorul care contine  numarul(l-am considerat vector char)si apoi afisez cifrele de la cea mai mare pana la a n-k cifra :readthis:


Titlul: Răspuns: 838 Alibaba
Scris de: Vlad Tarniceru din Aprilie 07, 2010, 18:54:55
daca am:
5 3
12345

eu raman cu 45 nu?
adica nu pot sa iau 54(sa fie in ordine  :-s )


Titlul: Răspuns: 838 Alibaba
Scris de: Gabriel Bitis din Aprilie 07, 2010, 20:13:59
Ramai cu 45.


Titlul: Răspuns: 838 Alibaba
Scris de: Tudorica Andrei din Iunie 23, 2010, 21:45:44
pentru ca  trebuie sa fie in oridinea di numarul initial cifrele;)
cu un back iau 20 pkt si restu tle... da nush dc ma jmir la 10000 de cifre


Titlul: Răspuns: 838 Alibaba
Scris de: Gabriel Bitis din Iunie 24, 2010, 07:25:12
Of of..  :aha: Nu ti-a venit tie o idee mai buna decat backtracking?
Citeste pe forum si subiectul "528 Trompeta", si daca tot nu te ajuta, citeste articolul de solutii al concursului la care s-a dat problema Trompeta(ceva autumn warmup).


Titlul: Răspuns: 838 Alibaba
Scris de: Tudorica Andrei din Iunie 24, 2010, 12:15:26
:)):)):)):)) da si eu m-am gandit ca-i ciudata ideea da am fost curios cat iau :thumbdown: :thumbdown: :thumbdown:
oricum am incercat altceva si asta are doar 3 tle si nush dc...


Titlul: Răspuns: 838 Alibaba
Scris de: Tudorica Andrei din Iunie 25, 2010, 16:36:53
k :D
scuze :D nu inteleg ce-i gresit la codul meu...


Titlul: Răspuns: 838 Alibaba
Scris de: Simoiu Robert din Iunie 25, 2010, 16:55:33
Stii ca testele nu se fac publice ( inclusiv in particular ) . Si editeaza-ti mesajele  :thumbup:


Titlul: Răspuns: 838 Alibaba
Scris de: Tudorica Andrei din Iunie 25, 2010, 17:36:13
am folosito varianta prin care declar k minime si le stergdin sir...
imi pate da cineva va rog un exemmpu care nu ar merge??


Titlul: Răspuns: 838 Alibaba
Scris de: Finaru Andrei Emanuel din August 24, 2010, 15:01:55
Am o problema: nu mai stiu cum exact transform un char in int, atunci cand charul memoreaza o cifra. Eu tineam minte ca trebuie sa scazi caracterul '48', adica '0'-'48'=0, '1'-'48'=1 etc, si intr-adevar cu aceasta implementare la mine afiseaza rezultatele corecte la toate testele pe care i le dau. Totusi, cand incarc sursa, evaluatorul ma anunta ca raspunsul e incorect. Nu e bun '48'-ul? Si daca nu, cum e corect?


Titlul: Răspuns: 838 Alibaba
Scris de: Mircea Dima din August 24, 2010, 15:27:47
daca e cifra pui

int c = int (cifra - '0' );

daca e litera mica

int c = int (cifra - 'a');

iar daca e litera mare

int c = int (cifra - 'A');


Titlul: Răspuns: 838 Alibaba
Scris de: Savin Tiberiu din August 24, 2010, 22:01:42
De fapt acel 48 de care tineai tu minte e codul ascii al lui '0', doar ca nu trebuie sa scazi '48' ci tre sa scazi 48 (numarul nu stringul).
Ex:
'6' - 48 = 6


Titlul: Răspuns: 838 Alibaba
Scris de: Simoiu Robert din August 25, 2010, 09:16:45
Reiau ce spunea Savin, este o diferenta mare intre '0' si 0. '0' ( cu ghilimele ) reprezinta caracterul cu codul ASCII (http://www.asciitable.com/) 48, iar 0 ( fara ghilimele ) reprezinta codul ASCII al caracterului corespunzator ( in acest caz este caracterul NULL ) . Daca faci spre exemplu un char h = '0' si il afisezi ca si char ( "%c" ) , o sa se afiseze 0 pe ecran ( fara ghilimele ) , iar daca afisezi ca si int ( "%d" ) , o sa se afiseze 48. Daca faci un char h = 50, si il afisezi pe ecran ca si char o sa se afiseze 2 ( fara ghilimele ) , iar daca afisezi ca si int o sa se afiseze 50.
Si in legatura cu relatiile date de Mircea, nu trebuie pus int ( ) , e destul sa faci int c = cifra - '0' ( int c = cifra - 48 ) .


Titlul: Răspuns: 838 Alibaba
Scris de: Finaru Andrei Emanuel din August 25, 2010, 10:14:17
Multumesc pentru toate lamuririle =D&gt;. Am reusit sa iau 100  :yahoo:


Titlul: Răspuns: 838 Alibaba
Scris de: Ionita Bogdan Constantin din Octombrie 13, 2011, 12:46:35
Cod:
#include <cstdio>
using namespace std;
int n,k,i,rezultat[10000],p;
char nr[10001];
void construiesc(char nr[10001], int p, int rezultat[10000], int x)
{   int max;
    if (p>0)
{
max=1;
for (i=1;i<=x-p;i++)
if (nr[max]<nr[i]) max=i;
rezultat[n-k-p]=nr[max]-48;
for (i=0;i<=x-max-1;i++) nr[i]=nr[i+max];
return construiesc(nr,p-1,rezultat,x-max);
}
}
int main()
{
    freopen("alibaba.in","r",stdin);
    freopen("alibaba.out","w",stdout);
    scanf("%d%d",&n,&k);
p=n-k;
for (i=-1;i<=n-1;i++) scanf("%c",&nr[i]);
construiesc(nr,p,rezultat,n);
for (i=0;i<=p-1;i++)
printf("%d",rezultat[i]);
fclose(stdin);
fclose(stdout);
return 0;
}
nu inteleg ce gresesc de imi da TLE...iau doar 80 pct pe sursa asta.. ](*,)


Titlul: Răspuns: 838 Alibaba
Scris de: FMI Razvan Birisan din Iunie 24, 2012, 11:39:50
Iau 50 de puncte :winner3:

Îmi pică testele 4,5,7,8,9. Mă poate ajuta cineva? :oops:



      


Titlul: Răspuns: 838 Alibaba
Scris de: UAIC.VlasCatalin din Iunie 24, 2012, 14:09:18
Daca am inteles corect ce faci tu atunci incearca asa un test
5   1
30000
raspunsul ar trebui sa fie 3000 dar programul tau cred ca afiseaza 3 sau chiar intra in ciclu, se pare ca ai scapat din vedere faptul ca in sirul dat pot fi si cifre de 0, incearca sa inlocuesti in algoritmul tau numerele trecute in rez cu -1;
 Sper ca am fost explicit  :)


Titlul: Răspuns: 838 Alibaba
Scris de: FMI Razvan Birisan din Iunie 24, 2012, 16:01:30
Asta era :shock:
Acum m-am uitat mai bine la restricții.
Am luat 100 de puncte :winner1:
Mulțumesc  :thumbup:
:yahoo:


Titlul: Răspuns: 838 Alibaba
Scris de: Cadar Andrei din Martie 25, 2015, 10:12:25
Am facut problema bine dar imi da o va rog uitativa peste ea
#include <fstream>
#include <iostream>

using namespace std;
ifstream f("alibaba.in");
ofstream g("alibaba.out");
int v[10001],i,n,k,nr;
char y,x;
bool a[10001];
int main()
{
    f>>n;
    f>>k;
    f.get();
    f.get(x);
    v[1]=x-'0';

    for(i=2; i<=n; i++)
    {
        f.get(y);
        v=y-'0';
        if(v[i-1]<=v&& nr<k)
        {
            a[i-1]=true;

            nr++;
        }
    }


    for(i=1; i<=n; i++)
        if(a==false)
            g<<v;
}