sobota, 29 grudnia 2007

Funkcja erase( key ) w strukturze multiset

Czy wiesz co wypisze następujący kawałek kodu?
multiset<int> S;
S.insert(90); // wstaw 90 do zbioru S
S.insert(90); // jeszcze raz
S.erase(90);
if (S.empty()) printf("Zbiór S jest pusty.");

Program wypisze, że zbiór jest pusty.
Dzieje się tak dlatego, iż procedura erase(key) usuwa wszystkie elementy o kluczach key. Dziwne? Wiem, bo w dokumentacji piszą co innego.

Jeśli chcesz usunąć dokładnie jeden element z multiset'a, to powinieneś zrobić to tak:
S.erase( S.find(90) );

piątek, 21 grudnia 2007

Wyjście ze szpitala

Przed chwilą wyszedłem ze szpitala. Z powodu Świąt prawie wszystkich wypisano z oddziału.
Mam się stawić z powrotem 15 stycznia 2008 r. Mam nadzieję, że już tak długo nie będe musiał tam leżeć.

Zaraz po wyjściu odwiedziłem mój Instytut Informatyki. Stwierdziłem, że wesprę Fundację TVN i przeznaczę trochę pieniędzy na szpitale dla dzieci.

Zalogowałem sie na allegro.pl i upolowałem aż trzy misie : www.kupmisia.allegro.pl

Przez ponad tydzień leżenia w szpitalu miałem dostatecznie duzo czasu, aby obmyślić sobie sposób superszybkiego kupowania tych Misiów; aukcje kończą się po kilku sekundach.

Mam swojego Misia MARZYCIELA, o którym marzyłem w będąc w szpitalu. Jestem w pełni szczęścia.

środa, 12 grudnia 2007

W szpitalu

Jestem w szpitalu.
Publiczny Szpital Kliniczny
Męski oddział laryngologiczny,
ul. Chałubińskiego 2.
Wrocław

środa, 28 listopada 2007

Jak zrobić set'a intów z własnym operatorem mniejszości

Czasem potrzebujemy utworzyć zbiór (set) liczb całkowitych (int'ów), w którym inaczej niż zwykle chcemy porównywać liczby.

Tak się dzieje np. w algorytmie Dijkstry, gdzie najmniejszy element w zbiorze to ten, który ma najmniejszą ogległość do źródła.

Załóżmy więc, że dana jest tablica globalna
int dist[1000000]; // odległości od źródła w alg. Dijkstry

Zbiór numerów wierzchołków tworzymy wówczas następująco, kluczowa jest struktura z operatorem wywołania operator():
struct cmp
{
// czy a jest mniejsze od b
bool operator() (const int &a, const int &b)
{
if (dist[a] < dist[b]) return true;
if (dist[a] > dist[b]) return false;
return a<b;
}
};
set<int, cmp> kopiec; // ;-)

wtorek, 13 listopada 2007

Poznań Open 2007

Uniwersytet im. Adama Mickiewicza w Poznaniu (UAM) kolejny raz zaprasza na Mistrzostwa Wielkopolski w Programowaniu Zespołowym, które odbędą się 7-8 grudnia 2007 r. w Poznaniu.
Szczegóły konkursu znajdziesz tutaj:

Poznań Open 2007

piątek, 2 listopada 2007

Podgórzyn - Obóz naukowy

Od poniedziałku 5 XI do piątku 9 XI, będzie trwał organizowamy m.in. przeze mnie obóz naukowy w Podgórzynie.

Będziemy uzywać sprawdzaczki http://themis.lo14.wroc.pl napisanej przez Wiktora Janasa.

Sekcja zadań realizowanych podczas obozu znajduje się tutaj.

Rankingi z poszczególnych dni, będą udostępnione tutaj.

środa, 24 października 2007

Pewne własności iloczynu kolejnych liczb pierwszych

Uwaga, chciałbym wyjaśnić, że nie jest prawdą iż jeśli P jest iloczynem kolejnych liczb pierwszych, to P-1 jest liczbą pierwszą; podobnie jest z P+1.

Oto przykłady na P+1:
2*3*5*7*11*13 + 1 = 59*509
17*11*5*2*3*7*13 + 1 = 19*97*277

Oto przykłady na P-1:
2*3*5*7 - 1 = 11*19
2*3*5*7*11*13*17 - 1 = 61*8369

sobota, 13 października 2007

Jak zrobić aby w priority_queue na początku było minimum

How to make priority_queue (C++, STL) with minimum at the top?

Oto szybki sposób zadeklarowania kolejki priorytetowej (kopca) tak, aby na szczycie znajdowało się minimum, a nie jak to jest domyślnie - maksimum:
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;

int main(void)
{
priority_queue<int, vector<int>, greater<int> > Q;
// sprawia, że na szczycie kolejki jest minimum

Q.push(5);
Q.push(7);

cout << Q.top() << endl;
return 0;
}

piątek, 12 października 2007

Kilka problemów w Maple

Drobne problemy z Maple'm:



wtorek, 9 października 2007

niedziela, 7 października 2007

Dzisiaj próbowałem zainstalować mojego ulubionego Maple 10 w nowiutkim openSUSE 10.3. Napotkałem problem, gdyż instalator wypisał mi:

16:37:39 amd-wire:Linux/Disk1/InstData/VM > ./LinuxInstaller.bin

Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...
awk: cmd. line:6: warning: escape sequence `\.' treated as plain `.'

Launching installer...

java: xcb_xlib.c:52: xcb_xlib_unlock: Assertion `c->xlib.lock' failed.
Przerwane

Pierwsze rozwiązanie, jakie znalazłem w Google, to:
cd /usr/lib64/jvm/java-1.6.0.u1-sun-1.6.0.u1/jre/lib/amd64/xawt
sed -i 's/XINERAMA/FAKEEXTN/g' libmawt.so


Niestety nic nie pomogło. Potem, tutaj znalazłem odpowiedź. Otóż wystarczy przed instalacją wpisać polecenie:
export LIBXCB_ALLOW_SLOPPY_LOCK=1
i działa. Instalacja Maple przebiegła bez problemu.
Zawsze, przed uruchomieniem programu należy wykonać polecenie (albo odpowiednio skonfigurować system):
export LIBXCB_ALLOW_SLOPPY_LOCK=1

piątek, 7 września 2007