Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: 009 Algoritmul lui Dijkstra : Martie 01, 2014, 16:58:26
Ah scuze, țin minte că scrisesem acea parte, dar cred că am șters-o ieri din greseală.. Mersi Smile
2  infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: 009 Algoritmul lui Dijkstra : Martie 01, 2014, 15:05:33
Citat
Restrictii
1 ≤ N ≤ 50 000
1 ≤ M ≤ 250 000
Lungimile arcelor sunt numere naturale cel mult egale cu 1 000.
Pot exista arce de lungime 0
Nu exista un arc de la un nod la acelasi nod.
Daca nu exista drum de la nodul 1 la un nod i, se considera ca lungimea minima este 0.
Arcele date in fisierul de intrare nu se repeta.

Deci, eu afisam INT_MAX pentru drumurile care nu exista, acum afisez 0 in schimb, dar tot nu primesc punctele Confused
3  infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: 009 Algoritmul lui Dijkstra : Februarie 28, 2014, 23:07:23
Hm.. Dacă vă rog, îmi poate spune și mie cineva de ce nu e bun codul meu? Iau doar 10 pct.. Ideea algoritmului am luat-o de pe TopCoder dintr-un tutorial. Era un Dijkstra rezolvat pe baza unui priority_queue<T, vector<T> >. Pe toate testele pe care i le-am dat, rulează ok, nu înțeleg de unde provine problema.

http://www.infoarena.ro/job_detail/1131352?action=view-source

EDIT: TopCoder ref http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=standardTemplateLibrary2#dijkstra2

Mulțumesc anticipat.
4  infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2013 / Răspuns: Algoritmiada 2013, Runda 1 : Decembrie 06, 2012, 15:33:39
Un concurs de 4 ore dupa-masa iti strica toata ziua.
... Pacat... Fiind de dimineata nu am sa pot participa... si sincer, nu cred ca sunt singurul. Avand in vedere ca a fost amanat, cred ca se putea gasi o solutie mai buna dar asta e...
5  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 126 Lungimi de interval : Decembrie 01, 2012, 22:14:45
Am gasit problema. Si apropo, Io.size()-1 am scris... Thanks anyways.
6  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 126 Lungimi de interval : 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) ?

Cod:
#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;
}
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines