1 / 9
Aug 2019

Witam, zrobiłem to zadanie i dostaję za nie tylko 12,5 punktów, nie mogę znaleźć żadnego rozsądnego wytłumaczenia dlaczego, czy ktoś byłby mi to w stanie wyjaśnić?

Pozdrawiam

#include <bits/stdc++.h>

using namespace std;

unsigned long long int convert(string str)
{
	unsigned long long int a = 0;
	int pom;
	for (int i = 0;i<str.length();i++)
	{
		if (str[i] <= 99)
			pom = 2;
		else if (str[i] <= 102)
			pom = 3;
		else if (str[i] <= 105)
			pom = 4;
		else if (str[i] <= 108)
			pom = 5;
		else if (str[i] <= 111)
			pom = 6;
		else if (str[i] <= 115)
			pom = 7;
		else if (str[i] <= 118)
			pom = 8;
		else pom = 9;
		a *= 10;
		a += pom;
	}
	return a;
}

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(NULL);
	int n,k;
	cin >> n >> k;
	pair <unsigned long long int, string> word[n];
	for (int i = 0;i<n;i++)
	{
		cin >> word[i].second;
		word[i].first = convert(word[i].second);
	}
	sort(word, word + n);
	int qry[k];
	bool brak[k];
	for (int i = 0;i<k;i++)
	{
		cin >> qry[i];
		brak[i] = 1;
	}
	sort(qry, qry + k);
	int j = 0;
	for (int i = 0;i<n;i++)
	{
		if (word[i].first == qry[j])
		{
			cout << word[i].second << " ";
			brak[j] = 0;
		}
		else if (word[i].first > qry[j])
		{
			if (brak[j] == 1)
				cout << "BRAK";
			cout << "\n";
			j++;
			if (j == k) break;
			i--;
		}
	}
	for (int i = j;i<k;i++)
		cout << "BRAK\n";
	return 0;
}
  • created

    Aug '19
  • last reply

    Apr '20
  • 8

    replies

  • 684

    views

  • 4

    users

  • 1

    like

  • 1

    link

rozsądnym wytłumaczeniem jest, że program nie jest rozsądny :slight_smile:

5 3
a
d
g
h
i
4
3
2
7 months later

Cześć,
w tym zadaniu uzyskuję wynik 25%.
Przykłady wychodzą mi dobrze, ten test z postu wyżej u mnie daje out:
g h i
d
a
więc sądzę, że jest ok.
Ma ktoś może jakieś ciekawe testy, które pokażą co nie przechodzi?

przykład był dobrany do konkretnego rozwiązania, do Twojego pewnie powinien by inny :slight_smile:
bez kodu żadnego przykładu nie podam

Moje rozwiązanie na ideone:

W takich wypadkach, wracasz do zadania i po kolei wszystko sprawdzasz [dokładnie] - np alfabet od a do z

Thanks @narbej.
Rzeczywiście głupi błąd - brak ‘x’.Teraz wchodzi 50%.
Ale za kolejne testy dostaje NZEC.
Jak pamiętam NZEC do tej pory dostawałem w przypadku NullPointer albo ArrayIndexOutOfBound.
Pokminie jeszcze.

Obawiam się, że to już wszystko [50%] i aby zyskać 100 musisz mocno zmodyfikować swój “tok myślenia” Dla pierwszych 4 testów ja mam wyniki poniżej 0.1 w Pythonie, w C++ nawet równe 0 i dopiero 4 test 0.01 [w C++].

Podejrzewam, że NZEC masz z powodu braku pamięci. Spróbuj nie buforować, tylko na bieżąco wypisywać poszczególne wyniki.
Zobacz sobie np taki test [na aktualnym twoim kodzie]

100000 1000000
.....

lub nawet tylko taki:

2 1000000
byle
co

TZn możesz sobie łatwo wygenerować taki/e test, albo [dla testu] podać tylko same takie wartości n i k - to będą testy wydajnościowe.

===
W tym zadaniu i w większości ale nie we wszystkich, Sędzia ignoruje NADMIAROWE białe znaki [/t /n i space] więc nie trzeba ich na siłę usuwać

W sądzie podobno obowiązuje domniemanie niewinności/
Załóż to samo :wink: Domniemaj, że result jest true, a przy pierwszej niezgodności, zwróć false i przerwij dalsze sprawdzanie, ale i tak to będzie za mało :wink:

Thanks @narbej za podpowiedzi.
Tak, też dzisiaj stwierdziłem, że algorytm ogólnie mam mało wydajny.
Po lekkich modyfikacjach dostałem 50% a pozostałe TLE :slight_smile:.
Ja, generalnie, zwykle najpierw próbuję po prostu dostać akcepta a potem próbuję zoptymalizować swój program aby uzyskać jak najlepszy czas.
Tutaj aby w ogóle zaliczyć muszę trochę zmienić podejście - tak jak sugerujesz.
Powalczę z tematem :slight_smile: