Chumanista 7 Napisano 1 Września 2013 Udostępnij Napisano 1 Września 2013 (edytowane) Stwprzyłem coś takiego: #include <iostream> #include <vector> #include <algorithm> #include <cstdio> #include <string> using namespace std; int main() { int iloscOsob; scanf("%d", &iloscOsob); char stan[1000000]; scanf("%s", &stan); int buffer = 0; int out = 0; for (int i = 0; i < iloscOsob; i++) { if (stan[i] == 'Z') { if (buffer == 2) { buffer = 0; out++; } else { buffer++; } } else if (buffer && stan[i] == 'W') { out++; buffer = 0; } } if (buffer) { out++; buffer = 0; } printf("%i", out); printf("\n"); } jako rozwiązanie zadania: http://main.edu.pl/pl/archive/oig/6/spi Niestety: Informacja o zgłoszeniu Zadanie: spi/Śpiew Użytkownik: Chumanista Rozwiązanie: spi.cpp Data zgłoszenia: 2013-09-01 18:53:40 Status: OK Raport Użytkownik: Chumanista Data: 2013-06-13 14:41:39 Wynik: 190 Komentarz: 6th Junior Polish Olympiad in Informatics, Etap I Zadanie: spi/Śpiew Data: 2013-09-01 18:53:51 Wynik: 90/100 Pliki: rozwiązanie Test Wynik Czas/Limit Punkty 0 OK 0.00s/1.00s 0/0 1a OK 0.00s/1.00s 9/9 1b OK 0.00s/1.00s 1ocen OK 0.00s/1.00s 0/0 2 OK 0.00s/1.00s 9/9 2ocen OK 0.00s/1.00s 0/0 3 OK 0.00s/1.00s 9/9 3ocen OK 0.00s/1.00s 0/0 4 OK 0.00s/1.00s 9/9 4ocen Zła odpowiedź 1 0.02s/1.00s 0/0 5 OK 0.00s/1.00s 9/9 6 OK 0.00s/1.00s 9/9 7 OK 0.00s/1.00s 9/9 8 OK 0.00s/1.00s 9/9 9 OK 0.00s/1.00s 9/9 10 OK 0.00s/1.00s 9/9 11a OK 0.01s/1.00s 0/10 11b Zła odpowiedź 2 0.01s/1.00s 1 wiersz 1: wczytano '499968', a oczekiwano '500000' 2 wiersz 1: wczytano '499968', a oczekiwano '500000' Proszę o pomoc. Edytowane 1 Września 2013 przez Chumanista Cytuj Link to post Share on other sites
mw1975 230 Napisano 1 Września 2013 Udostępnij Napisano 1 Września 2013 Nie sądzisz, że dokładny opis zadania znacznie ułatwiłby pomoc, hę? Cytuj Link to post Share on other sites
Chumanista 7 Napisano 1 Września 2013 Autor Udostępnij Napisano 1 Września 2013 (edytowane) Podałem linka (zaraz pod kodem)... Edytowane 1 Września 2013 przez Chumanista Cytuj Link to post Share on other sites
Dżi-Aj-Dżo 11 Napisano 1 Września 2013 Udostępnij Napisano 1 Września 2013 Bez wglebiania sie w kod na szybko nasunela mi sie jedna opcja gdzie moze byc blad: Czy uwzgledniasz sytuacje gdzie : a) pod rzad masz np 6 zajetych i potrzebne sa wtedy tylko 2 spiewniki ? b) dla 4 zajetych pod rzad tez tylko 2, c) dla 5 zajetych pod rzad tez tylko 2. Pozdrawiam Cytuj Link to post Share on other sites
Chumanista 7 Napisano 2 Września 2013 Autor Udostępnij Napisano 2 Września 2013 Ten kod w 90% przypadków działa, więc debugging bez przeczytania go nie ma sensu. tldr: Tak wziąłem to pod uwagę. Ok, działa. To ich dane wejściowe były niezgodne z warunkami zaania. Wystarczyło zwiększyć tablicę. Cytuj Link to post Share on other sites
Dżi-Aj-Dżo 11 Napisano 2 Września 2013 Udostępnij Napisano 2 Września 2013 Siema, to byl moj kod : #include <iostream> #include <vector> #include <algorithm> #include <cstdio> #include <string> using namespace std; int main() { int iloscOsob; scanf("%d", &iloscOsob); char stan[1200000]; scanf("%s", &stan); int buffer = 0; int out = 0; for (int i = 0; i < iloscOsob; i++) { if (stan[i] == 'Z') { buffer++; if (buffer==3) { out++; buffer=0; } } if (stan[i]== 'W') { if (buffer) { out++; buffer=0; } } } if (buffer) { out++; } printf("%i", out); printf("\n"); } tez mial 90/100 po zwiekszeniu rozmiaru tablicy przeszlo na 100/100 Pozdrawiam 1 Cytuj Link to post Share on other sites
Chumanista 7 Napisano 2 Września 2013 Autor Udostępnij Napisano 2 Września 2013 (edytowane) Jak napisałem powyżej to właśnie zrobiłem. printf("%i", out); printf("\n"); Można prościej: printf("%i\n", out); Dziękuję za pomoc. Edytowane 2 Września 2013 przez Chumanista Cytuj Link to post Share on other sites
Dżi-Aj-Dżo 11 Napisano 2 Września 2013 Udostępnij Napisano 2 Września 2013 Mozna, ale to byl Twoj kod a ja takich bzdetow nie zmieniam Cytuj Link to post Share on other sites
Chumanista 7 Napisano 3 Września 2013 Autor Udostępnij Napisano 3 Września 2013 Kolejne zadanie: http://main.edu.pl/pl/archive/oig/6/skr i znowu problemy. kod: #include<iostream> bool contains(int a [], int b, int length) { for (int i = 0; i < length; i++) if (a[i] == b) return true; return false; } static inline void sum(int a [], int b []) { for (int i = 0; i < 1000000; i++) { if (!(contains(a, b[i], 1000000))) for (int j = 0; j < 1000000; j++) if (a[j] == 0) { a[j] = b[i]; break; } } } int main() { int iloscSkrzatow, czasDoSnu; scanf("%i", &iloscSkrzatow); int target = iloscSkrzatow; scanf("%i", &czasDoSnu); int safe[1000000]; safe[0] = 1; for (int i = 0; i < czasDoSnu; i++) { int length; scanf("%i", &length); int unsafe[1000000]; int safeT[1000000]; for (int j = 0; j < length; j++) scanf("%i", &unsafe[j]); for (int k = 0; k < iloscSkrzatow; k++) for (int j = 0; j < length; j++) if (!(contains(unsafe, j + 1, length))) for (int l = 0; l < 1000000; l++) if (safeT[l] == 0) { safeT[l] = j; break; } for (int m = 0; m < 1000000; m++) if (safeT[m] != 0 && contains(safe, safeT[m], 1000000)) { sum(safe, safeT); break; } else if (safe[m] == 0) break; if (contains(safe, target, 1000000)) { printf("%i\n", i); return 0; } } printf("%i\n", czasDoSnu); return 0; } Wyniki: Informacja o zgłoszeniu Zadanie: skr/Skrzaty Użytkownik: Chumanista Data zgłoszenia: 2013-09-03 18:45:16 Status: Test przykładowy: zła odpowiedź Raport Użytkownik: Chumanista Data: 2013-09-03 18:00:00 Wynik: 0 Komentarz: 6th Junior Polish Olympiad in Informatics, Etap II Zadanie: skr/Skrzaty Data: 2013-09-03 18:46:05 Wynik: 0/100 Pliki: rozwiązanie Test Wynik Czas/Limit Punkty 0 Zła odpowiedź1 0.01s/1.00s 0/0 0b Zła odpowiedź2 0.00s/1.00s 0/0 0c OK 0.08s/1.00s 0/0 1a Zła odpowiedź3 0.01s/1.00s 0/20 1b OK 0.02s/1.00s 2a Zła odpowiedź4 0.20s/1.00s 0/20 2b Zła odpowiedź5 0.19s/1.00s 2c Zła odpowiedź6 0.54s/1.00s 2d Zła odpowiedź7 0.31s/1.00s 3a Program wywłaszczony --/1.00s 0/20 3b Program wywłaszczony --/1.00s 3c Program wywłaszczony --/1.00s 3d Program wywłaszczony --/1.00s 3e Zła odpowiedź8 0.02s/1.00s 4a Program wywłaszczony --/2.00s 0/20 4b Program wywłaszczony --/1.00s 4c Program wywłaszczony --/1.00s 4d Program wywłaszczony --/1.00s 4e Program wywłaszczony --/6.00s 4f Program wywłaszczony --/2.00s 4g Program wywłaszczony --/2.00s 4h Program wywłaszczony --/1.00s 4i Program wywłaszczony --/1.00s 4j Program wywłaszczony --/3.00s 4k Program wywłaszczony --/2.00s 5a Program wywłaszczony --/4.00s 0/20 5b Program wywłaszczony --/3.00s 5c Program wywłaszczony --/4.00s 5d Program wywłaszczony --/3.00s 5e Program wywłaszczony --/5.00s 5f Program wywłaszczony --/4.00s 5g Program wywłaszczony --/4.00s 5h Program wywłaszczony --/4.00s 5i Program wywłaszczony --/3.00s 5j Program wywłaszczony --/5.00s 5k Program wywłaszczony --/3.00s 5l Program wywłaszczony --/5.00s 1 wiersz 1: wczytano '0', a oczekiwano '2' 2 wiersz 1: wczytano '2', a oczekiwano '0' 3 wiersz 1: wczytano '0', a oczekiwano '6' 4 wiersz 1: wczytano '30', a oczekiwano '14' 5 wiersz 1: wczytano '38', a oczekiwano '23' 6 wiersz 1: wczytano '54', a oczekiwano '51' 7 wiersz 1: wczytano '60', a oczekiwano '40' 8 wiersz 1: wczytano '10', a oczekiwano '0' Pomożecie? Cytuj Link to post Share on other sites
Dżi-Aj-Dżo 11 Napisano 3 Września 2013 Udostępnij Napisano 3 Września 2013 W pierwszym wierszu standardowego wejścia znajdują się dwie liczby całkowite http://main.edu.pl/pl/images/OIG6/skr-tex.6.png i http://main.edu.pl/pl/images/OIG6/skr-tex.7.png (http://main.edu.pl/pl/images/OIG6/skr-tex.8.png) oznaczające odpowiednio liczbę skrzatów oraz liczbę godzin pozostałych do czasu, aż Bitol zaśnie. W następnych http://main.edu.pl/pl/images/OIG6/skr-tex.9.png wierszach znajdują się opisy grup stanowisk obserwowanych przez smoka w kolejnych godzinach, po jednym w wierszu. Na opis http://main.edu.pl/pl/images/OIG6/skr-tex.10.png-tej grupy stanowisk składa się liczba całkowita http://main.edu.pl/pl/images/OIG6/skr-tex.11.png (http://main.edu.pl/pl/images/OIG6/skr-tex.12.png) oznaczająca liczbę obserwowanych stanowisk oraz http://main.edu.pl/pl/images/OIG6/skr-tex.13.png uporządkowanych rosnąco liczb całkowitych ze zbioru http://main.edu.pl/pl/images/OIG6/skr-tex.14.png oznaczających numery obserwowanych stanowisk. Wszystkie liczby w wierszu poodzielane są pojedynczymi odstępami. Możesz założyć, że http://main.edu.pl/pl/images/OIG6/skr-tex.15.png To co zaznaczylem na czerwono nie jestem w stanie pojac i sobie wyobrazic Cytuj Link to post Share on other sites
Chumanista 7 Napisano 3 Września 2013 Autor Udostępnij Napisano 3 Września 2013 Wejście: [liczba skrzatów oraz numer docelowego] [czas do zaśnięcia] kolejne [czas do zaśnięcia] wierszy ma format: [ilość liczb w tym wierszu - 1] [numer stanowiska przez które nie można przejść w danej godzinie 1] ... [numer stanowiska przez które nie można przejść w danej godzinie ileśtam] Cytuj Link to post Share on other sites
Dżi-Aj-Dżo 11 Napisano 3 Września 2013 Udostępnij Napisano 3 Września 2013 Dobra, nie chce mi sie nawet probowac zrozumiec. Sam bardziej pogmatwales niz napisal autor Odpadam Cytuj Link to post Share on other sites
mwl450 0 Napisano 10 Września 2013 Udostępnij Napisano 10 Września 2013 Śpiew: http://www2.picturepush.com/photo/a/13677830/1024/Anonymous/88.jpg Cytuj Link to post Share on other sites
Chumanista 7 Napisano 10 Września 2013 Autor Udostępnij Napisano 10 Września 2013 Dziękuję, śpiew rozwiązałem już damno. Mój aktualny kod do skrzatów: #define _CRT_SECURE_NO_WARNINGS #include<cstdio> #include<vector> #include<algorithm> #include<cstdlib> using namespace std; void inline vadd(vector<bool> &a, vector<bool> &b) { } int main(void) { int iloscSkrzatow, czasDoSnu; scanf("%i", &iloscSkrzatow); scanf("%i", &czasDoSnu); vector<bool> safe; safe.resize(iloscSkrzatow, false); safe[0] = true; for (int i = 0; i < czasDoSnu; i++) { int length; scanf("%i", &length); vector<bool> safeT; safeT.resize(iloscSkrzatow, true); for (int j = 0; j < length; j++) { int temp; scanf("%i", &temp); safeT[temp - 1] = false; } for (unsigned int m = 0; m < iloscSkrzatow; m++) { if (safe[m] && safeT[m]) { for (unsigned int i = 0; i < iloscSkrzatow; i++) safe[i] = safeT[i] || safe[i]; break; } } if (safe[iloscSkrzatow - 1]) { printf("%i\n", i); //system("pause"); //DEBUG return 0; } } printf("%i\n", czasDoSnu); //system("pause"); //DEBUG } Cytuj Link to post Share on other sites
Onvil 12 Napisano 13 Września 2013 Udostępnij Napisano 13 Września 2013 Ja to rozumiem tak. Mamy macierz n*n. I nasz skrzat_1 chce się z pozycji 1*1 dostać do skrzat_2 który znajduje się na pozycji 6*6. Ale może przejść w kroku jedną kratkę na którą nie patrzy smok. Smok zmienia oglądaną przez siebie kratkę co krok. Dobrze to zrozumiałem? Cytuj Link to post Share on other sites
Chumanista 7 Napisano 13 Września 2013 Autor Udostępnij Napisano 13 Września 2013 Nie. Mamy listę 1xn. Nasz skrzat chce dostać się z 1 do n. smok w każdej turze ogląda część kratek. Tu rozwiązanie na 80%: #define _CRT_SECURE_NO_WARNINGS #include<cstdio> #include<vector> #include<algorithm> #include<cstdlib> #include<cmath> #include<stdint.h> using namespace std; static inline void setTrue(uint64_t *a, int pos) { a[pos / 64] |= (uint64_t) 1 << (pos % 64); } static inline void setFalse(uint64_t *a, int pos) { a[pos / 64] &= ~((uint64_t) 1 << (pos % 64)); } static inline int getState(uint64_t *a, int pos) { return (a[pos / 64] & (uint64_t)1 << (pos % 64)) >> pos % 64; } static inline void getAndSet(uint64_t *get, int pos, uint64_t *set) { set[pos / 64] |= (uint64_t) (get[pos / 64] & (uint64_t) 1 << (pos % 64)); } int main(void) { int iloscSkrzatow, czasDoSnu; scanf("%i", &iloscSkrzatow); scanf("%i", &czasDoSnu); uint64_t *safe = new uint64_t[iloscSkrzatow / 64 + 1](); for (int a = 0; a < iloscSkrzatow / 64 + 1; a++) { safe[a] = 0; } setTrue(safe, 0); for (int i = 0; i < czasDoSnu; i++) { int length; scanf("%i", &length); uint64_t *safeT = new uint64_t[iloscSkrzatow / 64 + 1](); for (int b = 0; b < iloscSkrzatow / 64 + 1; b++) { safeT[b] = 18446744073709551615ll; } for (int j = 0; j < length; j++) { int temp; scanf("%i", &temp); setFalse(safeT, temp - 1); } for (int m = 0; m < iloscSkrzatow; m++) { if (getState(safe, m) && getState(safeT, m)) { for (int p = 0; p < iloscSkrzatow / 64 + 1; p++) safe[p] |= safeT[p]; break; } } if (getState(safe, iloscSkrzatow - 1)) { printf("%i\n", i); //system("pause"); //DEBUG return 0; } } printf("%i\n", czasDoSnu); //system("pause"); //DEBUG } Cytuj Link to post Share on other sites
Recommended Posts
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.