Moje rozwiązanie http://pl.spoj.com/files/src/15563710/73
Przy takim rozwiązaniu też czas http://pl.spoj.com/files/src/15336315/34
Nikt, ze zwykłych śmiertelników, nie widzi cokolwiek na stronach, do których podałeś linki. Zobacz sam, to jest moje błędne: http://pl.spoj.com/files/src/15560063/35
Mógłbyś ewentualnie podać taki link, łatwiej byłoby znaleźć samo zadanie i zobaczyć twoje wysiłki: http://pl.spoj.com/status/MSTRMND,an0num0us/25, ale tu dalej kodu ani ja ani nikt oprócz adminów nie będzie widział.
Możesz swój kod wkleić tutaj na forum [a potem, po zaznaczeniu całego kodu nacisnąć ctrl k] lub wkleić na ideone.com a tu tylko link do ideone.com/ z twoim kodem - ale tam warto jeszcze wkleić stdin i trzeba koniecznie kliknąć run.
Jeszcze nie ogarniam spoja
#include <stdio.h>
/*#include <cstdlib>
#include <ctime>*/
int arr[4]={1,5,7,2},in[4],t=10,i,g;
using namespace std;
int main() {
/*srand(time(0));
for(i = 0;i<4;i++) arr[i] = (rand() % 5) + 1;*/
while(t--) {
bool pos[4]={};int s=0,o[4] = {-1,-1,-1,-1};
scanf("%d %d %d %d",&in[0],&in[1],&in[2],&in[3]);
for(i = 0;i<4;i++) if(arr[i] == in[i]) {pos[i] = true;o[i] = 1;s++;}
if(s==4) {printf("1 1 1 1");break;}
for(i = 0;i<4;i++)
if(!pos[i]) for(g = 0;g<4;g++)
if(in[g] == arr[i] && !pos[i]) {
pos[i] = true;
o[g] = 0;
break;
}
printf("%d %d %d %d\n",o[0],o[1],o[2],o[3]);
fflush(stdout);
}
return false;
}
Drugi kodzik
#include <stdio.h>
#include <cstdlib>
#include <ctime>
int arr[4],in[4],t=10,i,g;
using namespace std;
int main() {
setlinebuf(stdout);
srand(time(0));
for(i = 0;i<4;i++) arr[i] = (rand() % 5) + 1;
while(t--) {
bool pos[4]={};int s=0,o[4] = {-1,-1,-1,-1};
scanf("%d %d %d %d",&in[0],&in[1],&in[2],&in[3]);
for(i = 0;i<4;i++) if(arr[i] == in[i]) {pos[i] = true;o[i] = 1;s++;}
if(s==4) {printf("1 1 1 1");break;}
for(i = 0;i<4;i++)
if(!pos[i]) for(g = 0;g<4;g++)
if(in[g] == arr[i] && !pos[i]) {
pos[i] = true;
o[g] = 0;
break;
}
printf("%d %d %d %d\n",o[0],o[1],o[2],o[3]);
fflush(stdout);
}
return false;
}
A jeżeli odgadłbyś, zupełnie przez przypadek, odpowiedź już w pierwszej próbie, to co? Też będziesz to ciągnął dalej, i robił pozostałe 9 prób, bo oczywiście twój break zupełnie nie zadziała, z powodu całkowicie błędnego kodu.
Przekroczenie limitu, masz z bardzo "prozaicznego" powodu. Chcesz coś od sędziego [scanf], a sędzia nic Ci nie poda, bo on z kolei czeka na twój ruch. Więc częściowo przychylam się do podpowiedzi @piastlis, czy znasz, czy kiedykolwiek grałeś w masterminda? Najlepiej albo na kartce papieru z kolegą lub na grze planszowej [byle nie z komputerem]. Chodzi mi o to, czy byłeś raz graczem, a raz sędzią w tej grze? Myślę, że bardzo ułatwiłoby to Tobie rozwiązanie tego zadania.
PS
1. Pokazuj swój tylko jeden, lepszy kod, lub ten który wydaje się tobie że jest lepszy.
2. Ułatwiaj analizowanie kodu pomagającym - np. oczyść go ze zbędnych, zakomentowanych instrukcji.
3. Tak samo, jak każdy może zadać tu pytanie, tak i każdy może wypowiadać się tu, więc raczej powinieneś mu podziękować, a nie odpisywać w taki sposób. Możesz w ten sposób zrazić do siebie pomagających.
4. Moim zdaniem podpowiedźi @piastlis'a są jak najbardziej, bardzo sensowne, bo jak widzisz w moim poście też mam takie wątpliwości, a wynikają one z twojego błędnego kodu[ów].
Nie widząc kodu czasami tak, ale widząc kod czasami jeszcze trudniej. Proszę wróć do moich wcześniejszych rad, i przeczytaj pkt 2. Dlaczego więc tego nie robisz? Nie tylko nie czytasz dokładnie treści zadania[ń] ale nie czytasz? też dobrych rad i nie stosujesz się do nich!
Żeby nie było wątpliwości, to pozwolę sobie go zacytować w całości:
pkt 2. Czytaj dokładnie treść zadania.
Czy więc warto w ogóle zawracać sobie głowę i tracić czas pomaganiem? ;-(
Witam, czy ktoś mogłby powiedzieć mi jak ma wyglądać wyjście w tym zadaniu? Obecnie przedstawia się to u mnie w ten sposób:https://ideone.com/WXO6oT25 i dostaję błąd wykonania. Z góry dziękuję.
Tak zinterpretowałem część polecenia
Po odgadnięciu kodu (lub wyczerpaniu limitu 10 prób) Twój program powinien się zakończyć.
Czyli jeśli mój program nie zgadnie w 10 próbach(counter==11), to kończy działanie.
Zmieniłem na wybieranie strzału ze zbioru S w sposób losowy, zamiast zawsze brania jego pierwszego elementu i dla danych, które sobie wymyśliłem zazwyczaj program zgaduje przy około piątej próbie. Może to kwestia tego, iż nie potrafię wymyślić jakiegoś złośliwego testu.
Kod trzeba odgadnąć w maksymalnie 10 próbach
Nie wiem jaki komunikat jest gdy Ci się to nie uda. Błąd wykonania jest bardzo prawdopodobny.
Nie jestem pewien czy rozumiesz zadanie. Twój program ma odgadnąć jaki jest kod. Ty zaczynasz od wypisania:
1 1 2 2
No ok. Podaje na wejściu:
1 -1 1 1
Twój program nie próbuje dalej zgadywać kodu tylko się wywala błędem wykonania. A powinien podjąć następną próbę rozwiązania kodu:
Zdaje mi się, że rozumiem zadanie, a mój program zamiast próbować dalej zgadnąć, to wywala błąd, gdyż Twóje wejście jest nieprawidłowe(według mojego zrozumienia zadania). Jeśli użyte są tylko dwie liczby(w strzale 1 1 2 2 są tylko 1 i 2) to nie mogą być 3 na dobrym miejscu a jednej w ogóle nie być. Poprawnym wejściem byłoby na przykład 1 0 1 0 co oznaczałoby, że dwie liczby trzeba zamienić miejscami.