12 / 52
Aug 2017
1 year later

Dzień dobry, ja tutaj z pytaniem odnośnie treści bo nie wiem czy ją rozumiem.
więc od najsilniejszego idziemy od 'z' do 'a', następnie wiadomo, że 'a' > 'A'.
Skąd wiadomo czy 'a' > 'Z'? albo 'a'<'Z', skoro małe 'z' jest > 'a' to duże 'Z' > 'A' ?
Dlaczego nie jest treść sprecyzowana? :confused:
Jakby było napisany 'a' > 'Z' to by wszystko było jasne, (bo zakładamy, że 'Z' > 'A')

Z przykładu i treści zadania.

Przyznaję, że można było doprecyzować specyfikację zadania. Niemniej ja dostałem AC za pierwszym razem, a opierałem się wyłącznie na treści zadania. 305 AC też o czymś świadczy więc nie jest źle.

Nie byłoby jasne. Ktoś zacząłby się zastanawiać, dlaczego w przykładzie są ciągi literek typu: "klKKnNLlNL", skoro w treści opisano jedynie literki a, A, z oraz Z.

A teraz wisienka na torcie :wink:

Bo nie jest :wink:

Swojego czasu też męczyłem się z jakimś zadaniem, którego nie rozumiałem. Oczywiście część zadań ma to do siebie, że ich treść dociera do ludzi dopiero po otrzymaniu baaaardzo dokładnych wskazówek, niemalże gotowca - kwestia tak zwanego "nie nadawania na tych samych falach". To zadanie jednak do nich się nie zaliczało - po rozwiązaniu go dalej uważałem, że treść wprowadza w błąd. Swoje zastrzeżenia przedstawiłem na forum, gdzie nikt nie zaprzeczał moim tezom, ale mimo to ludzie (jak pamiętam głównie @narbej) stawali po stronie autora i uważali moje podejście za czepialstwo. Oczywiście nie przemawiała do mnie taka argumentacja...

Aż tu nagle ktoś (niestety nie pamiętam kto) na moje twierdzenie, iż specyfikacja powinna być dokładna, odpowiedział coś w rodzaju (przekazuję sens wypowiedzi, a nie słowa): "Powinna, ale w praktyce zawsze specyfikacja nie jest dokładna, stanowi pewne przybliżenie i trzeba się domyślać co autor zadania/klient/prowadzący laboratoria ma na myśli mając jedynie pewien ramowy szkic oraz modyfikować specyfikację adekwatnie do napotkanych trudności programistycznych i humorów autora zadania/klienta/prowadzącego".

Radzę zapamiętać i kombinować aż do skutku przy każdym kontakcie z programowaniem, nawet na SPOJu :wink:

prawdopodobnie obstawiam, że autor zadania nie chciał go utrudniać, więc siła zwierzęcia jest kodem ASCII , zatem faktycznie A < Z < a < z
wystarczyłoby taką nierówność zapisać i tyle :).

Otrzymuję TLE (przekroczono limit czasu).
Na początku zrobiłem na cin, cout i faktycznie - mogło przekroczyć limit, ale gdy przeszedłem na scanf i printf i nadal wyświetla, że przekroczono... no to już więcej nie zrobię.
Co jest nie tak? :confused:
kodzik:<=Kiedyś był tu ze wskaźnikami =>
zadanie: http://pl.spoj.com/problems/AL_01_02/14

PS
Czy to przez to, że wskaźniki są za wolne?

Najpierw zrób zadanie, a nie z góry obstawiaj :wink:

Nie tylko w języku c/c++ napis 'a' ma konkretne znaczenie, dla każdego trochę bardziej zaawansowanego [kumatego] programisty oczywiste.

Wystarczy[łoby] mieć tablicę kodów ASCII pod ręką i od czasu do czasu do niej zaglądnąć. :wink: i tylko tyle :wink:

Zgoda, ale jest też 618 [na razie :wink:] TLE i tylko 122 osób, które mogły wysłać więcej niż jedno AC - stąd te 305. W końcu zadanie jest nie bez powodu w kategorii zadań średnich, a nie łatwych.

Też zrobiłem na cin, cout + ios::sync_with_stdio(0) ===> AC czas 1.26

90 linijek to kodzik? [ok 20 linijek kodziku w zupełności wystarczyłoby]
Dlatego trudno to analizować.

Niee, to przez programistę, bo to od niego zależy co z tym [ze wskaźnikami] zrobi.

PS
Musisz przemyśleć i skrócić kod - nic tu raczej nie da się zrobić i wymyśleć. Przy okazji przemyśl taką swoją dziwną konstrukcję:

if(p)
{
while(p)
{
...
Oczywiście wątpię, czy jej poprawienie spowoduje cudowne nie TLE

PS 2
Nie rozumiem też twojego sposobu pisania main(). Przecież wszyscy wiedzą, że prawidłowo [ale też bez wpływu na TLE] powinno się pisać:

int main(){
starter();
}
i tyle :wink:, bez zbędnych śmieci w main().

dobra, to jade bez wskaznikow i tych wszystkich bo nie ma to sensu...
if(p) bo jesli nie ma p to nie ma co sprawdzac...

Yyyy... to będę chamem. A co z x? :stuck_out_tongue: A < Z < a < z .... a x? x < A < Z < a < z czy A < x < Z < a czy...? :stuck_out_tongue:

Jak wielu.

Widocznie zły algorytm...

Yyyy... jestem wróżbitą :smiley:

Tak i nie, a ściślej: dzięki @narbej za odpowiedź :wink:

Mógłbym znowu wykazać się "czepialstwem" i podać przykłady zadań łatwych z dużo gorszymi wynikami, ale oczywiscie rozumiem sens wypowiedzi i zgadzam się z nim.

W każdym razie w matematyce zaprzeczeniem kwantyfikatora ogólnego jest kwantyfikator szczegółowy. A w tym przypadku nie tylko istnieje osoba, która to zrozumiała, ale aż 305 osób ogarnęło to zadanie :wink: Nota bene jedno z moich ulubionych :wink:

PS
@i6g7g6y5 jeżeli nie masz pomysłu to ewentualnie możesz przeszukać moje ostatnie posty... pisałem komuś o zadaniu ze zwierzakami ustawiającymi się w kolejce :wink: Bardzo możliwe, że padło tam słowo kluczowe do uzyskania AC :wink: (ale nie gwarantuję!)

No akurat mi o tym pisałeś :wink:

Wybacz, że nie zapamiętałem - ostatnio mam nieszczęście rzadko siedzieć na SPOJu... dopadło mnie życie krótko mówiąc :wink:

No ale w takim razie sprawdziłem i gwarantuję, że prawo dżungli w kolejce opisałem podpowiedzią dającą AC :wink:

Nie miałeś tłumaczyć, ale przemyśleć i przestać stosować.
Powtórzę
Zamiast:
if(p)
while(p)

wystarczy aż nadto
samo

while(p)

.
.

Warto jeszcze, żeby jedna z tych ogarniających osób [dużo mniej niż 305], nauczyła się prawidłowo czytać i interpretować dane - wystarczy tylko przeczytać uważnie nagłówki rubryk no i niestety trochę pomyśleć. :wink:

Patrzyłem na szybko (zapomniałem, że w ogóle jest taka kolumna). Poza tym podane przeze mnie liczby wybiegają w przyszłość :wink:

Ale przyznaję, że dopiero teraz Twoja wcześniejsza wypowiedź nabrała dla mnie głębszego sensu. I fakt- na dzień dzisiejszy duuużo mniej osób rozwiązało to zadanie.

to zadanie jest łatwe, pomijając fakt, że jego nazwa kieruje znaczna część rozwiązujących w złą stronę :slight_smile:

to że zadziwiająco mało osób rozwiązało to zadanie, to raczej spowodowane jest tym, że już wtedy spoj miał znacznie mniejszą popularność niż na początku działalności - ale i tak zadanie ma znacznie więcej rozwiązań, niż inne średnie zadania z tego okresu

Może właśnie temu jest trudne? :wink:

Jest średnie :wink:. Tzn jest w kategorii zadań o średniej trudności.

W czasie umieszczania zadania na SPOJu, nie było jeszcze statystyk i autor i @admini musieli "oprzeć" się na swoim doświadczeniu i praktyce. I jest tak za każdym razem, przy wprowadzaniu każdego nowego zadania na SPOJ'a. Można ewentualnie potem bawić się w przenoszenie zadań z jednej do drugiej kategorii ale ani ja nie jestem zwolennikiem takich zabaw, ani sama ilość ozób z AC nie jest miernikiem trudności [łatwości] zadania.

PS
Dla zadań z algoligi, w czasie ich wprowadzania na SPOJa, pewnym przybliżeniem są statystyki na algolidze, skąd pochodzi zadanie, ale tylko przybliżeniem.

PS 2
Dla osoby/osób, które rozwiązały to zadanie, jest ono proste i łatwe, Jednak dla ciągle zmagających się z nim nie.

PS 3
To, że w ogóle poruszyłem problem ilości osób, które rozwiązały zadanie, wynikło tylko z chęci zwrócenia uwagi na ewidentny błąd przedmówcy w interpretacji statystyk :wink:

Wskazówki!

  1. To nie pierwszy twój post na forum z pytaniem czy podpowiedzią więc powinieneś już chyba wiedzieć jak wklejać kod?
  2. Podpowiadając, warto samemu sprawdzić, bo możemy niechcący napisać głupotę.
  3. Tu tablicy używasz do wczytania więc nie trzeba jej wcześniej zerować.
  4. konstrukcja tab[101] = {0} jest [to moje przypuszczenie] równoważna np pętli:
    while(i--) tab[i] = 0;

AD 2
spacje na cout robimy poprzez:
cout << ' ' ; lub cout << " ";

AD 4
Więc albo zrezygnuj z zerowania [={0}], albo deklaruj poza pętlą.

PS
Zrobiłbym trochę inaczej. :wink: Zrezygnował z kopiowania, a zostawił tylko wstawianie zera. Dodatkowa zmienna na pamiętanie ostatniego-poprzedniego zwierzaka.

Ad 1.
Nie rozumiem o co chodzi, przecież kod jest ładnie wklejony za pomocą ctrl+shift+c
Ad 4.
konstrukcja tab[101]={0} nie jest wcale równoważne pętli, gdyż np. zapis
tab[101] = {4} ustawi pierwszy element tablicy na wartość 4 natomiast pozostałe elementy przyjmą wartość 0.
Dlatego tylko i wyłącznie do zerowania tablicy używam zapisu = {0}.
(Możesz to łatwo sprawdzić)