Post by k***@et.plOgolnie, chodzi mi to ze..w niektorych zadaniach (jak np samochodziki z OI)
OK, nie wytrzymalem: to te samochodziki?
http://www.oi.edu.pl/php/show.php?ac=p100000&module=show&file=zadania/oi12/sam
Post by k***@et.plsytuacja wygladala nastepujaco (wbrew pozorom ta sytuacja w
zadaniach zdarza sie dosc czesto).
Mam sobie kolejke priorytetowa ktora trzyma struktury :>
zalozmy
struct x_t { int a,b; };
[...]
Post by k***@et.plMam nadzieje ze zrozumiales o co chodzi :)
Przykro mi ale ni konia... :(
Ni w zab nie rozumiem o czym mowi Marek S. ani o jakich kolejkach
priorytetowych mowisz ty...:(
Pewnie czegos w tych samochodzikach nie kumam, ale wedlug mnie
zadanie to sprowadza sie do tego, ktory samochod ma usunac z
podlogi mama.
Jesli to jest problem, to pomyslalem, ze mama powinna odstawiac
na polke ten samochodzik, ktorym maly Zdzisio bedzie sie bawil
najpozniej...
Jesliby przypadkiem to bylo poprawne rozwiazanie zadania
samochodziki, to ni kota nie widze tu kopcy list Marka (albo jakos
podobnie: moglem cos pokrecic) ani twojej kolejki priorytetowej.
Gdyby to bylo rozwiazanie, to da sie ono prawie doslownie z opisu
wyzej przelozyc na C++. To pare wywolan algorytmow z biblioteki...
Moze np. cos takiego:
#include <vector>
#include <iterator>
#include <iostream>
using namespace std;
//-----------------------------------------------------------------------------
struct sam {
explicit sam(int n, int p=0): n_(n), p_(p) {}
bool operator<(sam const & rhs) const { return p_ < rhs.p_; }
bool operator==(sam const& rhs) const {
return rhs.n_ == 0 ? p_ == rhs.p_ : n_ == rhs.n_ ; }
int n_, p_;
};
struct sam_generator {
sam_generator(): last_n_(0) {}
sam operator()() { return sam(++last_n_); }
int last_n_;
};
//-----------------------------------------------------------------------------
typedef vector<int> s_seq;
typedef vector<int>::const_iterator s_seq_iter;
typedef vector<sam> pool;
struct played_in {
played_in(s_seq_iter s, s_seq_iter e): st_i_(s), en_i_(e) {}
void operator()(sam& s) {
s.p_ = distance(st_i_, find(st_i_+1, en_i_, s.n_)); }
s_seq_iter st_i_, en_i_;
};
//-----------------------------------------------------------------------------
int main() {
int n, k, p;
cin >> n >> k >> p;
pool sams;
s_seq seq;
generate_n(back_inserter<pool>(sams), n, sam_generator());
copy(istream_iterator<int>(cin), istream_iterator<int>(),
back_inserter<s_seq>(seq));
s_seq_iter bi = seq.begin(), be = seq.end();
int cnt = 0;
for(; bi != be; ++bi) {
if(find(sams.begin(), sams.end(), sam(*bi))->p_ == 0) {
if(count(sams.begin(), sams.end(), sam(0)) <= n - k) {
partition(sams.begin(), sams.end(),
not1(bind2nd(equal_to<sam>(), sam(0))));
for_each(sams.begin(), sams.begin() + k, played_in(bi, be));
max_element(sams.begin(), sams.end())->p_ = 0;
}
find(sams.begin(), sams.end(), sam(*bi))->p_ = k;
++cnt;
}
}
cout << cnt << endl;
}
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl