•fogab
Strain
Karma: 0
Deconectat
Mesaje: 14
|
 |
« Răspunde #50 : Mai 07, 2008, 06:16:45 » |
|
Am nevoie si eu de lamurire  Fac sortarea in NlogN pe un vector<pair<int,int>> si iau TLE citire numai - 244 ms - http://infoarena.ro/job_detail/188199citire + sortare numai - TLE - http://infoarena.ro/job_detail/188201Daca nu intra nici cu vectoruri si cu citire din stream in timp, in pascal e chiar "impossible, like girls in stilettoes trying to run". N-as dori sa renunt de STL si de programarea propriu-zis C++  Hint?
|
|
|
Memorat
|
|
|
|
•wefgef
|
 |
« Răspunde #51 : Mai 07, 2008, 09:15:36 » |
|
Probabil ca sunt o gramada de chestii unde ai putea optimiza: sa nu folosesti un vector ci un array static, poate poti sa optimizezi citirea, etc. E frumos C++, dar deocamdata e mai sigur in concursuri sa nu faci excese de STL.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•fogab
Strain
Karma: 0
Deconectat
Mesaje: 14
|
 |
« Răspunde #52 : Mai 07, 2008, 09:36:46 » |
|
Cine se mai duce la concursuri  Cel putin la ACM nu apar probleme cu limitele stranse de timp  Merci oricum.. back to the basics  PS : Pascal chiar are vreo sansa?
|
|
|
Memorat
|
|
|
|
•wefgef
|
 |
« Răspunde #53 : Mai 07, 2008, 10:10:55 » |
|
Poti sa te uiti in monitor la sursele trimise in pascal.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•fogab
Strain
Karma: 0
Deconectat
Mesaje: 14
|
 |
« Răspunde #54 : Mai 07, 2008, 12:21:38 » |
|
Mea culpa. Am gresit eu. Scuze pt oftici  PS : 100 fara sa renunt de STL 
|
|
|
Memorat
|
|
|
|
•Robytzza
|
 |
« Răspunde #55 : Mai 08, 2008, 09:47:16 » |
|
Pe testul de pe forum imi da bine ,pe testele mele imi da bine, si totusi iau incorect  de ce oare? 
|
|
|
Memorat
|
|
|
|
•Mishu91
|
 |
« Răspunde #56 : Mai 08, 2008, 09:53:21 » |
|
Incearca si testu asta  2 6 0 4 1 4 6 7 3 4 2 4 4 5 7 -100 100 1 2 3 4 1 3 89 90 23 56 12 13
|
|
|
Memorat
|
|
|
|
•Robytzza
|
 |
« Răspunde #57 : Mai 08, 2008, 09:55:52 » |
|
dap  eu nu sortam si nu mai aveam cum sa unesc alea 2 intervale de la primul test  ms andrei 
|
|
|
Memorat
|
|
|
|
•ctlin04
|
 |
« Răspunde #58 : Iunie 29, 2011, 15:28:06 » |
|
ajutatima va rog, programul meu in turbo pascal merge pentru orice test, chiar si pentru testul cela mare din comentarii merge corect in 0.1 sec., dar in free pascal cind dau programul la executie, imi apare mesajul "exited with exit code 201" 
|
|
|
Memorat
|
|
|
|
•savim
|
 |
« Răspunde #59 : Iunie 29, 2011, 17:30:14 » |
|
Cred ca eroarea pe care o primesti se datoreaza unui segmentation fault. Uite un thread care ar putea sa te ajute.
|
|
|
Memorat
|
|
|
|
•jumper007
Strain
Karma: -1
Deconectat
Mesaje: 6
|
 |
« Răspunde #60 : Noiembrie 25, 2012, 22:32:44 » |
|
Imi poate spune si mie cineva ce e gresit in codul meu ? Nu inteleg care ar putea fi problema (poate afisarea pe rand nou a solutiilor?...). Multumesc anticipat PS: Rezultatele par a fi ok din ceea ce am vazut eu ca si teste.. PS2: Ar putea cineva sa imi puna la dispozitie testul oficial (sau alte teste pe care sa le incerc) ? #include <fstream> #include <vector> #include <algorithm> #include <climits>
using namespace std;
int n, T; ifstream in("linterv.in"); ofstream out("linterv.out");
class Interval{ long long a, b;
public: inline long long getA() const { return a; } inline long long getB() const { return b; } friend bool operator<(const Interval&, const Interval&); friend istream& operator>>(istream&, Interval&); };
bool operator<(const Interval& x, const Interval& y){ return x.getA() < y.getA(); }
istream& operator>>(istream& is, Interval& inter){ is >> inter.a >> inter.b; return is; }
void readData(vector<Interval>& Io, Interval& inter){ Io.clear();
if (in && !in.eof()){ in >> n; }
for (int i = 0; i < n; i++){ in >> inter; Io.push_back(inter); } }
void processAndWrite(vector<Interval>& Io){ int L = 0, X = INT_MIN; sort(Io.begin(), Io.end()); size_t i = Io.size()-1;
for (int j = 0; j < i; j++){ if (Io[j].getA() >= X){ L += Io[j].getB() - Io[j].getA(); X = Io[j].getB(); } else if (Io[j].getA() < X && Io[j].getB() <= X){ continue; } else if (Io[j].getA() < X && Io[j].getB() > X){ L += Io[j].getB() - X; X = Io[j].getB(); } }
out << L << "\n"; }
int main(int argc, char *argv[]){ vector<Interval> Int; Interval inter; in >> T; do{ readData(Int,inter); processAndWrite(Int); T--; }while (T > 0); return 0; }
|
|
« Ultima modificare: Noiembrie 26, 2012, 15:14:15 de către Raul Butuc »
|
Memorat
|
|
|
|
•repp4radu
|
 |
« Răspunde #61 : Noiembrie 30, 2012, 22:14:59 » |
|
In primul rand, incearca sa faci o implementare mai simpla, in primul rand. A ta mi se pare foarte greu de urmarit. Ce mi-a sarit in ochi este faptul ca tu te duci cu j de la 0 pana la Io.size() - 2. Cred ca ar fi corect sa mergi pana la Io.size() - 1. Hope it helps 
|
|
|
Memorat
|
|
|
|
•jumper007
Strain
Karma: -1
Deconectat
Mesaje: 6
|
 |
« Răspunde #62 : Decembrie 01, 2012, 22:14:45 » |
|
Am gasit problema. Si apropo, Io.size()-1 am scris... Thanks anyways.
|
|
« Ultima modificare: Decembrie 01, 2012, 22:40:30 de către Raul Butuc »
|
Memorat
|
|
|
|
•repp4radu
|
 |
« Răspunde #63 : Decembrie 02, 2012, 13:02:22 » |
|
size_t i = Io.size()-1; for (int j = 0; j < i; j++) => faci parcurgerea de la 0 la Io.size() - 2. Oricum daca ai gasit nu mai conteaza 
|
|
|
Memorat
|
|
|
|
•atatomir
Strain
Karma: 3
Deconectat
Mesaje: 25
|
 |
« Răspunde #64 : Decembrie 18, 2012, 16:28:20 » |
|
Am si eu cateva intrebari: 1. Intervalele sunt date in ordine (x,y) cu x<y? 2. Intervalele sunt date in ordine ? (adica daca avem intervalele [x1,y1] si [x2,y2] atunci avem x1 < x2?)
Multumesc mult!
|
|
|
Memorat
|
|
|
|
•SebiSebi
|
 |
« Răspunde #65 : Decembrie 18, 2012, 18:26:40 » |
|
1. DA. 2. NU. Succes! 
|
|
|
Memorat
|
|
|
|
•atatomir
Strain
Karma: 3
Deconectat
Mesaje: 25
|
 |
« Răspunde #66 : Decembrie 18, 2012, 22:01:44 » |
|
Mutumesc!
|
|
|
Memorat
|
|
|
|
•chimistu
Strain
Karma: 2
Deconectat
Mesaje: 6
|
 |
« Răspunde #67 : Aprilie 06, 2013, 10:46:48 » |
|
Pot sa dau un hint celor folosesc pentru aceasta problema vector de pair? Aveti grija unde declarati vectorul, daca vreti sa nu aveti probleme cu timpul. Desi daca stau mai bine sa ma gandesc ar fi o regula general valabila, indiferent de ce metode folositi 
|
|
|
Memorat
|
|
|
|
•Johny_Depp22
Strain
Karma: 3
Deconectat
Mesaje: 25
|
 |
« Răspunde #68 : Aprilie 07, 2013, 15:54:46 » |
|
Pot sa dau un hint celor folosesc pentru aceasta problema vector de pair? Aveti grija unde declarati vectorul, daca vreti sa nu aveti probleme cu timpul. Desi daca stau mai bine sa ma gandesc ar fi o regula general valabila, indiferent de ce metode folositi  si unde mai exact ar trebui sa il declaram?
|
|
|
Memorat
|
|
|
|
•SebiSebi
|
 |
« Răspunde #69 : Aprilie 07, 2013, 17:32:05 » |
|
Daca declari, in general, vectori in stiva (adica local) programul o sa mearga mai repede, dar trebuie sa ai grija sa nu iesi din limita de memorie pentru stiva.
|
|
|
Memorat
|
|
|
|
•Johny_Depp22
Strain
Karma: 3
Deconectat
Mesaje: 25
|
 |
« Răspunde #70 : Aprilie 07, 2013, 22:06:38 » |
|
multumesc! nu stiam asta, dar de acum o sa tin minte 
|
|
|
Memorat
|
|
|
|
•BLz0r
Strain
Karma: -14
Deconectat
Mesaje: 35
|
 |
« Răspunde #71 : Mai 17, 2013, 08:43:47 » |
|
Mie imi da bine pe testul lui fireatmyself (indiferent ca am pus 544 sau 546  ) si totusi imi da WA pe testul oficial... 
|
|
|
Memorat
|
|
|
|
•otniel
Strain
Karma: -13
Deconectat
Mesaje: 49
|
 |
« Răspunde #72 : August 19, 2013, 12:08:15 » |
|
ce este gresit imi da incorect #include<iostream> using namespace std; #include<stdio.h> #include<algorithm> FILE *f,*g; int i,j,n,t; long long l,x=-1000010; struct puncte { long a,b; }; long cmp(puncte a,puncte b) { return a.a<b.a; }
puncte q[5001]; int main() { f=fopen("linterv.in.txt","r"); g=fopen("linterv.out.txt","w"); fscanf(f,"%d\n",&t); while(t) {fscanf(f,"%d\n",&n); for(i=0;i<n;i++) fscanf(f,"%ld%ld\n",&q[i].a,&q[i].b); sort(q,q+n,cmp); for(i=0;i<n;i++) if(q[i].a>=x) {x=q[i].b; l=l+q[i].b-q[i].a;} else if(q[i].a<x&&q[i].b>x) {l=l+q[i].b-x; x=q[i].b;} fprintf(g,"%lld\n",l); t--; for(i=0;i<n;i++) cout<<q[i].a<<" "<<q[i].b<<endl; }
} [Editat de moderator]: Foloseste tagul [ code ], [ /code ]
|
|
« Ultima modificare: August 20, 2013, 11:31:49 de către Dragos-Alin Rotaru »
|
Memorat
|
|
|
|
•alex_bucevschi
Strain
Karma: 2
Deconectat
Mesaje: 19
|
 |
« Răspunde #73 : Decembrie 11, 2013, 17:56:04 » |
|
mie imi ia testul din exemplu si testul din comentarii dar imi da WA si nu inteleg de ce? #include <fstream> #include <vector> #include <algorithm> using namespace std; ifstream fin("linterv.in"); ofstream fout("linterv.out"); int t,i,j,n,x,y,mini,sol;; void rezolvare() { vector<pair<int,int> >a; vector<pair<int,int> >::iterator it; fin>>n; for(j=1;j<=n;j++) { fin>>x>>y; a.push_back(make_pair(y,x)); } sort(a.begin(),a.end()); it=a.end()-1; mini=it->second; sol+=it->first-it->second; it--; for(;it>=a.begin();it--) { if(mini<it->first&&mini>it->second) { sol+=mini-it->second; mini=it->second; } else { if(mini>it->second) { mini=it->second; sol+=(it->first-it->second); } } } fout<<sol<<'\n'; } int main() { fin>>t; for(i=1;i<=t;i++) { rezolvare(); } return 0; }
|
|
|
Memorat
|
|
|
|
•otniel
Strain
Karma: -13
Deconectat
Mesaje: 49
|
 |
« Răspunde #74 : Februarie 17, 2014, 21:19:34 » |
|
#include<iostream> using namespace std; #include<stdio.h> #include<stdlib.h> FILE *f,*g; int n,i,j,t; struct punct { long long a,b; }; punct c[5005]; int aux[5005]; long long num; int tu(int p,int m,int q) {punct b[5005]; int i1=p,i2=m+1,x=0; while(i1<=m&&i2<=q) { if(c[i1].a<c[i2].a) { b[x]=c[i1]; x++; i1++; } else if(c[i1].a>c[i2].a) { b[x]=c[i2]; x++; i2++; } else { if(c[i1].b<c[i2].b) { b[x]=c[i1]; x++; i1++; } else { b[x]=c[i2]; x++; i2++; } } } while(i1<=m) { b[x]=c[i1]; x++; i1++; } while(i2<=q) { b[x]=c[i2]; x++; i2++; } for(int z=p;z<=q;z++) c[z]=b[z-p]; } int io(int p,int q) { if(p<q) { int mij=(p+q)/2; io(p,mij); io(mij+1,q); tu(p,mij,q); } } int main() { f=fopen("linterv.in","r"); g=fopen("linterv.out","w"); fscanf(f,"%d",&t); while(t) {i=0; i++; num=0; fscanf(f,"%d",&n); for(i=1;i<=n;i++) fscanf(f,"%lld%lld",&c[i].a,&c[i].b); io(1,n); int x=1; for(i=2;i<=n;i++) {if(i==x) i++;
if(c[i].b>=c[x].b&&aux[i]==0&&c[i].a<=c[x].b) { if(c[i].b-c[x].b<0) num=num-(c[i].b-c[x].b); else num=num+c[i].b-c[x].b; aux[i]=1;} else if(c[i].b<=c[x].b&&c[i].a>=c[x].a) aux[i]=1; else if(c[i].a>=c[x].b) {x++; i--; }
} for(i=1;i<=n;i++) if(aux[i]==0) { if(c[i].b-c[x].b<0) num=num-(c[i].b-c[x].b); else num=num+c[i].b-c[x].b; } fprintf(g,"%lld",num); for(i=1;i<=n;i++) {aux[i]=0; c[i].a=c[i].b=0; } n=0; t--; } }
|
|
|
Memorat
|
|
|
|
|