Skocz do zawartości

Olimpiada informatyczna www.oi.edu.pl


Recommended Posts

Napisano

Hmm koleja edycja jesli myslicie ze jestescie dobrzy w programowaniu to niezapomnijcie ze na tego typu olimpiadach dobrych programistow zatrzymuje matematyka. zadania mozna pobrac ze stronki www.oi.pl.
Ja zawsze myslelem ze programowanie to nie nauka jezyka tylko sztuka myslenia ale tu myslec trzeba niekonwencjonalnie gdy zrobilem zadanie z bankomatami to teraz wydaje mi sie ono takie proste ze potrafie liczyc je w pamieci :D. Podzielcie sie swoimi spostrzezeniami na temat olimpiady i zadan

Napisano

Podałeś zły adres. www.oi.edu.pl
No cóż zadania nie są łatwe, wykorzystuje się raczej dobre algorytmy, wiedzę i pomysły. Okienka i wygląd się tutaj nie liczy, do tego zadania są testowane na Linuxie.

  • 2 weeks later...
Napisano

Yo!
Wie ktoś jak znaleźć część wspólną kilku zbiorów liczb o różnej długości. Jak tak to piszcie :D :!: :!: Bo ja mam taki problem... . Jak ma ktoś pomysł na taki algorytm to niech odpisze.

Napisano

Hmm tez mialem z tym problem :) moge sie pochwaqlic ze bankomat juz zrobilem a reszty mi sie niechce ruszac :)
pewnie chodzi ci o cos takiego :)
https://www.winapi.org/forum/viewtopic.php?t=615

Napisano

Ja wysylam tylko bankomaty bo niemam niestety czasu myslec nad reszta :/ jak chcesz kod to napisz maila to ci go wysle :) przetestujesz i zrozumiesz jak dziala. na podobnej zasadzie pisalismy z qmplem progs do odkodowania md5 :)

Napisano

huh ja zrobilem ska, sam, no i ban ruszylem, dzialaja na wielu danych i sa dosc szybkie, jednak nie licze ze dostane za nie powyzej 40 bo testy sa napewno przerabane, natomiast ska i sam poszly dosc niezle, ale to moj pierwszy rok i dosc amator bylem :). Dozer jesli moglbys przeslij te kody od ban-a, sarevook@interia.pl

Napisano

Ja mam lepszy pomysl :> nicon rob na forum nowa grup OIGroup bedzie narazie tam nas 3 ty ja i Marcin.
Przynaleznosc bedziemy rozdawac jak ktos zasluzy :> i bedziemmy sie wymieniac na specjalnym kawalku forum(zamknietym dla reszty forumowiczow) nasze kody itp bedziemy je poprawiac. W koncu ta olimpiada jest po to abysmy sie czegos nauczyli :) no to czekam na pozytywne rozpatrzenie mojej prosby :>
A moze jak sie kiedys dostaniemy bo kazdy zrobi cos a 3glowy to niejedna to sie spotkamy na kolejnym ktorys tam etapie :D

Napisano

Dozer napisał:

jak chcesz kod to napisz maila

Kodu nie chcę, bo doszedłem do wniosku, że to bardzo łatwe zadanie było i tak się w kurzyłem, bo byłem blisko.
Dozer napisał:

Ja wysylam tylko bankomaty

Patrząc po dacie postu to chyba chciałeś powiedzieć wysłałem, bo było do 22.11.04.
Nicon napisał:

ale to moj pierwszy rok

Czego pierwszy rok???
Nicon napisał:

jednak nie licze ze dostane za nie powyzej 40 bo testy sa napewno przerabane

Zazwyczaj są testy poprawnościowe i wydolnościowe. Na stronie olimpiady możesz sobie ściągnąć kilka testów, w tym dla każdego zadania jest jeden duży. Ja np. w samochodzikach robiąc duży test miałem ponad 800 sekund. Po użyciu drzew czerwono-czarnych robił to w sekundę. Co do forum, dlaczego by nie, ale coś mi się wydaję, że ktoś by na nie wchodził parę dni przed olimpiadą, parę po i tyle.

Ja zrobiłem ska, sam i sko.
Nad bankomatami myślałem nawet długo, ale próbowałem inną metodę niż bruteforce (gdzieś nie mam przekonania do takich metod). Próbowałem programowania dynamicznego i takich innych, ale nie wyszło. Gdyby nie to, że zadania pisałem na ostatnią chwilę (o 3:30 w poniedziałek 22.11.04 poszedłem spać, a w ten sam dzień miałem próbną maturę z polaka) to może bym coś sklecił. Ale cóż... zostaje mi tylko nadzieja, że próg nie będzie aż taki wysoki i sie jakoś załapie a dalej się poduczę:).

A co do poduczenia, macie może jakieś ebooki z algorytmiki (struktury danych, algorytmy itd)???

Napisano

Oto plik ban.cpp
moze zawierac bledy a co do wyslanie to niemialem czasu :/ go wyslac

//Damian Zajkowski

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
        unsigned tablica[1000];
        char uzyskane[10000][5];
        char okeja[10000][5];
        char okejb[10000][5];
        unsigned dlsek[10000];
        int pasujace = 0;
        int ilesekw = 0;
        long prawidlowe = 0;
        int raz;
        int dwa;
        int trzy;
        int cztery;

        scanf("%d",&ilesekw);
        for(int x=0;x<ilesekw;x++){
                scanf("%d %d",&dlsek[x],&tablica[x]);
        }

                
        for(int x=0;x<ilesekw;x++){
                        int q = 0;
                        char buf[10000];
                        buf[0]='\0';
                        sprintf(buf,"%d",tablica[x]);
                        //if(atoi(buf[0])<atoi(buf[1])

                        raz=0;
                        dwa=0;
                        trzy=0;
                        cztery=0;
                        q=0;
                        while(cztery!=dlsek[x]-1)
                        {
                        sprintf(okeja[q],"%s\0",uzyskane[q]);
                        
                        if(trzy==dlsek[x]-1){
                                trzy=cztery;
                                cztery++;
                        }
                        if(dwa==dlsek[x]-1){
                                dwa=trzy;
                                if(trzy!=dlsek[x]-1)
                                        trzy++;
                                
                        }
                        if(raz==dlsek[x]-1){
                                raz=dwa;
                                if(dwa!=(dlsek[x]-1))
                                        dwa++;
                        }
                        if(raz!=dlsek[x]-1)
                                raz++;
                        if(q==0){
                        sprintf(uzyskane[q],"%c%c%c%c\0",buf[cztery],buf[cztery],buf[cztery],buf[cztery]);
                        q++;
                        }
                        sprintf(uzyskane[q],"%c%c%c%c\0",buf[cztery],buf[trzy],buf[dwa],buf[raz]);
                        q++;
                        }
                        
                        for(int dlugi = 0;dlugi<q;dlugi++){
                        if(ilesekw==1){
                        printf("%s\n",uzyskane[dlugi]);
                        }
                                for(int krotki = 0;krotki<q;krotki++)
                                {
                                if(!strcmp(uzyskane[dlugi],okeja[krotki])){
                                pasujace++;
                                //printf("Pasujacy pin: %s\n",uzyskane[dlugi]);
                                prawidlowe++;
                                }
                                }
                        }
                        q=0;    
        }  

        printf("%d\n",prawidlowe);
        return 0;
}

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...