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

Zadanie Droga C++

Object Storage Arubacloud
0 głosów
656 wizyt
pytanie zadane 29 kwietnia 2022 w C i C++ przez polandonion Mądrala (7,040 p.)

Witam, umiałby ktoś znaleźć wadę mojego programu (test, dla którego program nie działa poprawnie) lub powiedzieć, co zrobiłem źle?

Zadanie: link

Wyniki: link

Mój kod:

#include<bits/stdc++.h>
using namespace std;
long long sx=0,sy=0;
long long f(int n,int *tab){
	int i,j;
	sy*=(n-1);
	for(i=1; i<=n/2; i++){
		sx+=(tab[i]-tab[i-1])*(i*n-i*i);
		if(i!=n-i) sx+=(tab[n-i]-tab[n-i-1])*(i*n-i*i);
	}
	return sx+sy;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	int n,y; cin>>n;
	int *tab=new int [n];
	for(int j=0; j<n; j++){
		cin>>tab[j]>>y;
		sy+=y;
	}
	sort(tab,tab+n);
	cout<<f(n,tab);
	delete [] tab;
}

 

1
komentarz 29 kwietnia 2022 przez Oscar Nałogowiec (29,320 p.)
Nie dałeś żadnego komentarza, a zaprezentowanie rozwiązanie nie jest oczywiste. Dlaczego nie pamiętasz wszystkich danych a jedynie pozycje domków wzdłuż drogi, odległości od drogi po prostu sumujesz do zmiennej sy? Być może stojący za tym pomysł'jest dobry, ale jakoś go nie łapie...

 

Jedna z metod szukania błedów polega na znalezieniu sobie słuchacza (kolegi albo nawet zabawki) i wyjaśnieniu jemu jak dokładnie działa program. Zwykle pomaga, tj. opowiadający zwykle sam wpada na to co jest żle.
1
komentarz 29 kwietnia 2022 przez Whistleroosh Maniak (56,980 p.)
Rozumowanie jest w miarę dobre. W funkcji f suma tych y jest mnożona przez n-1, czyli policzone zostały odległości "pionowe" dla wszystkich spotkań. Ale kod rzeczywiście mógłby skorzystać na czytelniejszych nazwach
komentarz 29 kwietnia 2022 przez polandonion Mądrala (7,040 p.)

uzupełnienie: link

1
komentarz 29 kwietnia 2022 przez Whistleroosh Maniak (56,980 p.)
spróbuj może pozamieniać inty na long longi. Może jest jakiś overflow
komentarz 29 kwietnia 2022 przez polandonion Mądrala (7,040 p.)
edycja 29 kwietnia 2022 przez polandonion

niezły pomysł, teraz daje mi 57% zamiast wcześniejszych 28% (reszta testów, które nie działają to przekroczenie limitu czasu), ale to nadal nie 100, jakieś sugestie? może przebudowa algorytmu?

PS: zamiast cin,cout użyłem scanf,printf i niektóre testy, które nie działały, teraz działają, ale dają bardzo małą liczbę pkt:

wcześniej: link

teraz: link

1
komentarz 29 kwietnia 2022 przez Whistleroosh Maniak (56,980 p.)
możesz spróbować dać szybsze sortowanie. Np. jakiś counting sort
komentarz 30 kwietnia 2022 przez Oscar Nałogowiec (29,320 p.)
Zadam głupie pytanie - a w ogóle po co sortować?
komentarz 30 kwietnia 2022 przez polandonion Mądrala (7,040 p.)

załóżmy, że nie wykonam operacji sortowania, czyli usunę linię:

sort(tab,tab+n);

a w funkcji f operację odejnowania wrzucę do abs():

sx+=abs(tab[i]-tab[i-1])*(i*n-i*i);
if(i!=n-i) sx+=abs(tab[n-i]-tab[n-i-1])*(i*n-i*i);

Następnie sprawdź co się stanie dla przykładu:

3

2 2

3 3

1 1

z góry powiem, że powinno wypisać 16.

komentarz 30 kwietnia 2022 przez pasjonat_algorytmiki Pasjonat (19,540 p.)

@polandonion, Możesz wrzucić linka do sprawdzarki? 

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

Podobne pytania

0 głosów
1 odpowiedź 307 wizyt
pytanie zadane 21 stycznia 2023 w Algorytmy przez hharry33 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 328 wizyt
0 głosów
1 odpowiedź 408 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

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

...