• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem osmiu hetmanow

Object Storage Arubacloud
0 głosów
151 wizyt
pytanie zadane 14 maja 2023 w C i C++ przez polandonion Mądrala (7,040 p.)

Witam, mialem do napisania taki programik, ktory obsluguje problem n-hetmanow. Sek w tym, ze na szkopule dzialaja mi wszystkie oprocz jednego testu, ze wzgledu na czas. Pomozecie?

Tutaj tresc: https://tinyurl.com/4xva5d9w

A tutaj kodzik:

#include <iostream>
#include <cmath>

using namespace std;

struct Pole {
	int x, y;
};

Pole het[15];
int n, ile = 0;

// ile_akt - ile aktualnie hetmanow znajduje
// sie na szachownicy w aktualnej rekurencji
void symuluj(int ile_akt) {
	for (int i = 0; i < n; i ++) {
		bool ok = 1;
		// ok - czy da sie dostawic hetmana na konkretnym polu,
		// tzn. polu o wspolrzednych: {i, ile_akt}
		for (int j = 0; j < ile_akt; j ++) {
			// sprawdzam, czy hetmany sa w tej samej kolumnie
			if (het[j].x == i)
				ok = 0;
			// i na przekatnej
			else if (abs(het[j].x - i) == abs(het[j].y - ile_akt))
				ok = 0;
		}

		// jezeli ustawilem juz na szachownicy n hetmanow
		if (ok == 1 and ile_akt == n - 1) {
			// zwiekszam ilosc mozliwosci
			ile ++;
			// i wychodze z aktualnej rekurencji
			return;
		}
		else if (ok == 1) {
			het[ile_akt] = {i, ile_akt};
			symuluj(ile_akt + 1);
		}
	}
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin >> n;

	symuluj(0);

	cout << ile;
}

 

komentarz 14 maja 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)
Korzystasz z backtrackingu?
komentarz 17 maja 2023 przez jankustosz1 Nałogowiec (35,880 p.)

@polandonion, Wygląda dobrze, zwięźle i jasno. Zmień tylko inta na long longa bo może być tego 15^15 minus złę kombinacje

komentarz 17 maja 2023 przez polandonion Mądrala (7,040 p.)
pasjonat_algorytmiki, chyba nie
komentarz 17 maja 2023 przez polandonion Mądrala (7,040 p.)

@jankustosz1, dodalem long longa i te same rezultaty

komentarz 17 maja 2023 przez jankustosz1 Nałogowiec (35,880 p.)

@polandonion, Korzystasz z backtrackingu, tylko nie wiesz że to się tak nazywa :)

 

Nie wiem gdzie jest błąd, kod wygląda dobrze

1 odpowiedź

0 głosów
odpowiedź 17 maja 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)
Jeden Ci nie działa ze względu na czas z prostego powodu, jak odpalisz sobie swój program dla N = 14, to będzie się robił pewnie około 20s a max limit czasu na zadanie to 10s.
komentarz 17 maja 2023 przez polandonion Mądrala (7,040 p.)
a wiesz moze jak to przyspieszyc?

Podobne pytania

0 głosów
1 odpowiedź 983 wizyt
pytanie zadane 4 kwietnia 2019 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)
0 głosów
1 odpowiedź 327 wizyt
pytanie zadane 25 kwietnia 2019 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)
0 głosów
1 odpowiedź 200 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...