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

Zadanie Losy ILOCAMP

Object Storage Arubacloud
0 głosów
259 wizyt
pytanie zadane 4 lutego 2023 w C i C++ przez polandonion Mądrala (7,040 p.)
edycja 18 lutego 2023 przez polandonion

Siema, robilem sobie zadanka na pocwiczenie ogolnej algorytmiki i utknalem w pewnym zadaniu. Moje podejscie wydaje sie byc dobre, natomist dostaje tylko 10%. Pomoze ktos w znalezieniu bledu?

https://szkopul.edu.pl/problemset/problem/5BwD26NEDhLd9c6ypF5zJfUt/site/?key=statement

#include <bits/stdc++.h>

using namespace std;

struct bin {
	int wyg, prz;
};

bool f(bin a, bin b) {
	return ((unsigned long long)a.wyg * (b.wyg + b.prz) >
			 (unsigned long long)b.wyg * (a.wyg + a.prz));
}

bin arr[10001];

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	
	int n, g;
	cin >> n >> g;

	for (int i = 1; i <= n; i ++)
		cin >> arr[i].wyg >> arr[i].prz;

	// sortuje wzgledem najwiekszego stosunku
	// wygranych losow do wszystkich losow
	sort(arr + 1, arr + n + 1, f);

	/* for (int i = 1; i <= n; i ++)
		cout << arr[i].wyg << ' ' << arr[i].prz << '\n'; */

	unsigned long long los = 0;
	for (int i = 1; i <= n; i ++) {
		if (g == 0)
			break;

		if (arr[i].wyg > 0) {
			los += (min(g, arr[i].wyg) + arr[i].prz);
			g -= min(g, arr[i].wyg);
		}
	}

	if (g == 0)
		cout << los;
	else
		cout << "NIE";
}

 

komentarz 4 lutego 2023 przez Whistleroosh Maniak (56,980 p.)
to jest dp, gdzie dp[i] to minimalna liczba losów które trzeba kupić żeby zagwarantować wylosowanie i losów wygrywających
komentarz 4 lutego 2023 przez polandonion Mądrala (7,040 p.)

wywala te same bledy, pomimo, ze robie zupelnie inna metoda: (wynik to 30/100)

#include <bits/stdc++.h>

using namespace std;

struct bin {
	int a, b;
};

bin arr[10001];
unsigned long long dp[1001];

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	
	int n, g;
	cin >> n >> g;

	for (int i = 1; i <= n; i ++)
		cin >> arr[i].a >> arr[i].b;

	for (int i = 1; i <= g; i ++) {
		bin mn = {INT_MAX, 0};

		for (int j = 1; j <= n; j ++) {
			if (arr[j].a > 0 and arr[j].b + 1 < mn.a)
				mn = {arr[j].b + 1, j};
		}

		if (mn.a != INT_MAX) {
			dp[i] = dp[i - 1] + mn.a;
			arr[mn.b].a --, arr[mn.b].b = 0;
		}

	}

	if (dp[g])
		cout << dp[g];
	else
		cout << "NIE";
}

 

komentarz 4 lutego 2023 przez Whistleroosh Maniak (56,980 p.)
Nie wygląda to za bardzo na dp bo licząc dp[i] korzystasz tylko z dp[i-1]. Rozwiązanie jest podobne do problemu plecakowego
komentarz 4 lutego 2023 przez Oscar Nałogowiec (29,290 p.)

@polandonion, A jak byś dodał jeszcze kolejny warunek na sortowanie. Najmniejsza liczba przegrywających a drugi warunek (mniej znaczący) to największa liczba wygranych.

Ale i to pewnie nie wystarczy.

komentarz 4 lutego 2023 przez reaktywny Nałogowiec (40,990 p.)

masz na myśli stopień trudności wymyślenia rozwiązania, czy jego implementacji?

 

stopień trudności zadania, a za tym idzie ciekawszy, trudniejszy kod do zrealizowania.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 303 wizyt
pytanie zadane 21 stycznia 2023 w Algorytmy przez hharry33 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 607 wizyt
pytanie zadane 30 maja 2022 w C i C++ przez polandonion Mądrala (7,040 p.)
0 głosów
0 odpowiedzi 642 wizyt
pytanie zadane 29 kwietnia 2022 w C i C++ przez polandonion Mądrala (7,040 p.)

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

61,942 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!

...