Afişează mesaje
|
Pagini: 1 [2] 3
|
34
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 046 Text
|
: Noiembrie 24, 2016, 21:46:49
|
Mi se pare ca e ceva ciudat. Am trecut de la 40 la 100 inlocuind cu si nu am vazut sa ia cineva 100 cu functia de citire a unei singure linii(scuzati-ma daca gresesc).Din cate am verificat functia getline() nu ar trebui sa fie restrictionata de vreo dimensiune mai mica decat cea a testelor.Cred ca testele nu respecta(in totalitate) restrictia ca textul se afla pe prima linie.
|
|
|
35
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 495 Numere 6
|
: Octombrie 06, 2016, 19:34:51
|
Ma puteti ajuta, va rog, cu niste idei? Am optimizat la maxim problema, luand prima data nr. de solutii pe puterile lui 2, apoi calculand in functie de bitii lui n. De asemenea, aloc memorie doar pt. randurile de matrice de care am nevoie. Nu scot mai mult de 90 de puncte http://www.infoarena.ro/job_detail/1771869Ai putea incerca sa nu scrii using namespace std si sa folosesti citirea din C.Eu asa am reusit sa intru in memorie la alta problema la care nu reuseam cu streamuri din cauza ca avea o limita mica la care se simtea schimbarea.
|
|
|
41
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 213 Jocul
|
: August 21, 2016, 16:16:41
|
Ma ajuta cineva sa inteleg de ce iau TLE pe ultimul test? Nu inteleg cum anume se mai poate optimiza codul.
long long profit(long i,long W){ for(int i=1;i<=n;i++){ for(int w=1;w<=W;w++){ if(w >= wt[i-1]) a[w] = max(a[w] , a[w-wt[i-1]]+wt[i-1]); } } return a[W]; }
Nu cred ca are rost sa folosesti long long.Daca folosesti int merge mai repede.
|
|
|
44
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 257 Catun
|
: August 01, 2016, 18:51:03
|
Am incercat si eu o implementare la pb asta, si am facut cate un dijkstra pentru fiecare catun, sa vad cea mai apropiata fortareata, dar imi iau un tle pe 5 teste. Any help? http://www.infoarena.ro/job_detail/1736420Ceea ce faci e mai mult Bellman-Ford decat Dijkstra.Oricum,asta nu e neparat relevant.O ideea ar fi sa nu pornesti de la fiecare catun spre fortarete ci sa incepi cu fortaretele.Iti tii un vector de fortarete si unul de costuri.In vectorul de fortarete tii fortareata cea mai apropiata si in cel de distante distanta pana la ea.Initializezi distantele la toate fortaretele cu 0,iar fortareata cea mai apropiata de fiecare o setezi ca ea insasi(evident).Cand actualizezi distanta minima la un nod,actualizezi si fortareata cea mai apropiata care este evident,fortareata cea mai apropiata a nodului care il preceda pe nodul curent in drumul minim spre o fortareata.La final,afisezi vectorul de fortarete,iar pentru elementele care stii ca sunt fortarete,afisezi 0.Ideea e ca si la un Dijkstra/Bellman-Ford clasic,dar in loc sa incepi de la un nod,incepi de la mai multe,punandu-le pe toate in coada/heap initial,iar apoi actualizezi inca un detaliu pe langa distanta. Sper ca am fost de ajutor.
|
|
|
45
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 187 Ecuatii
|
: Iulie 16, 2016, 13:50:35
|
ce e gresit? #include <cstdio> #include <algorithm> using namespace std; int v[1000005],v2[1000005],n,m,i,a,b,c,d,e,k1,k2,k3,st,dr,pos,mij; long long sol; int main() { freopen("eqs.in","r",stdin); freopen("eqs.out","w",stdout); scanf("%d%d%d%d%d",&a,&b,&c,&d,&e); for(k1=-50;k1<=50;k1++) for(k2=-50;k2<=50;k2++) for(k3=-50;k3<=50;k3++) v[++m]=a*k1*k1*k1+b*k2*k2*k2+c*k3*k3*k3; for(k1=-50;k1<=50;k1++) for(k2=-50;k2<=50;k2++) v2[++n]=d*k1*k1*k1+e*k2*k2*k2; sort(v2+1,v2+n+1); for(i=1;i<=m;i++) { st=1; dr=n; pos=0; while(st<=dr) { mij=(st+dr)/2; if(v2[mij]<=-v) { pos=mij; st=mij+1; } else dr=mij-1; } while(v2[pos]==-v&&pos>0) { sol++; pos--; } } printf("%lld",sol); return 0; }
Vezi ca solutiile trebuie sa fie nenule.Solutia te merge(cel putin pe exemplu,pe care am verificat-o) daca pui conditia k1!=0&&k2!=0&&k3!=0 peste tot unde apar variabilele.
|
|
|
47
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 126 Lungimi de interval
|
: Mai 12, 2016, 21:40:43
|
Salut!Ca sa intre in timp,ai putea folosi sort-ul din STL,e rapid si mie mi-a intrat cu el.Ca sa-l folosesti,ar trebui sa faci asa
#include<algorithm>//biblioteca necesara pt sort struct interval {int stanga,dreapta;}v[ n ];//structura ce reprezinta un interval,care te ajuta sa sortezi capetele impreuna bool comp(interval x,interval y) { if(x.stanga==y.stanga) return x.dreapta<y.dreapta;//functia da un criteriu de sortare return x.stanga<y.stanga; } //si sortarea efectiva va fi sort(v+1,v+n+1,comp);
Concret,fuctia compara intervalele in functie de capetele din stanga ale lor,iar daca acestea sunt egale,le compara in functie de cel din dreapta. Exemplu: 2 3 1 2 1 3 va deveni 1 2 1 3 2 3 Ca sa accesezi un element din vector(pt citire,algoritm,etc.) Te vei referi la el ca v[ i ].stanga pentru un capat si v[ i ].drepata pentru celelalt Sper ca am fost de ajutor:)
|
|
|
|