Pohvala rajkon za C++ resenje problema 'Jagode' ;) samo napred!... Ova poruka sadrzi par komentara na C++ kod ... verujem da ce da koriste ... bar ce da vam skrate muke trazeci po dokumentaciji ...
NAPOMENA: ova poruka sadrzi delimican kod resenja problema 'Jagode' tako da ako niste jos uradili zadatak nemojte da 'kradete' resenje ...
#include <iostream>
#include <iomanip>
#include <cmath>
#include <vector> // sadrzi definiciju klase vector
#include <algorithm> // potreban za metod sort(pointer na pocetak, pointer na kraj, f-ja // uporedjivanja)
using namespace ; // kada ubacujes bilo koju klasu iz STLa moras da navedes ovaj namespace
// za sada ti nije bitno sta je ali ga uvek ubaci kad koristis nesto iz STLa
#define MaxN 200
// ovo je vise stvar ukusa ali ja licno sam se sad navikao da definisem for pod define
// npr:
// #define FOR(i, n) for (int i = 0 ; i < (n) ; i ++)
// pa posle pises samo FOR(i, n) { // u ovom bloku mogu da koristim i iako ga nisam prethodno
// deklarisao }
// a mozes da radis i varijacije na temu
// FORL(i, n, m) for (int i = (n) ; i < (m) ; i ++)
// i sl ... vise je stvari licnog ukusa i navike
using namespace std;
const double eps=10e-20;
double x[MaxN],y[MaxN],a[MaxN];
// ili vector<double> x, y, a ;
int n;
void init(){
cin >> n;
for (int i=0; i<n; i++){ cin >> x[i] >> y[i] >> a[i]; }
// a moze i cin >> tmp ; x.push_back(tmp) ;
// tako se ubacuje kad se radi o vectoru ...
// cin, cout su dobri i jednostavni za koriscenje, ali se pazi kad trebas
// da ucitavas/stampas vecu kolicinu podataka jer su sporiji od scanf/printf
}
// ovo ti je bespotrebna procedura
// ako hoces da zamenis neke dve stvari pisi slobodno swap(a, b)
// swap je overloadovana f-ja (tj. ako je zoves swap(double, double)
// ili swap(int, int) pozove onaj koji ti treba .. isti naziv za istu f-ju
// sa razlicitim parametrima
void swap(int i, int j){
double tmp=x[i]; x[i]=x[j]; x[j]=tmp;
tmp=y[i]; y[i]=y[j]; y[j]=tmp;
tmp=a[i]; a[i]=a[j]; a[j]=tmp;
}
// ovaj deo koda mozes jednostavno da zamenis sa
// sort(pointer_na_pocetak_niza_koji_hocu_da_sortiram, pointer_na_polje_posle_poslednjeg
// elementa_u_nizu_koji_hocu_da_sortiram[,f-ja uporedjivanja])
// gd je ova f-ja uporedjivanja opciona ... tj. mozes da pozoves i bez nje
// ako je niz integera onda ce ti sortirati u rastucem redosledu
// ako neces tako ili hoces da sortiras komplikovanije objekte onda moras da
// napises svoju f-ju
// tipa:
// bool myless(int a, int b) {
// return a<b ;
// }
// i posle pozoves:
// sort(x, x + n, myless)
// sortirace ti elemente u x [0], x [1] ... x [n - 1] po kriterijumu f-je myless
// i u ovom jednom redu stavis ovaj dosadan kod koji skoro pa svaki zadatak
// trazi ... a tako je dosadno kucati jedno te isto :(
int partition(int left, int right){
double pivot=x[right];
int i=left-1;
int j=right;
while (i<j){
do { i++; } while (x[i]<pivot);
do { j--; } while ((x[j]>pivot) && (j!=left));
if (i<j) swap(i,j);
}
swap(i,right);
return i;
}
void qsort(int left, int right){
if (left<right){
int pivot=partition(left,right);
qsort(left,pivot-1);
qsort(pivot+1,right);
}
}
// f-je ovog tipa koje su jednostavne ali se mozda mnogo puta pozivaju
// mogu da prouzrokuju bespotreban overhead pa je dobro staviti ih kao __inline f-je
// npr:
// __inline bool cmp(double x1, double x2){
// ili jos bolje pod #define
// #define cmp(x1, x2) (fabs((x1)-(x2))<eps)
// da bi se ubrzao rad
bool cmp(double x1, double x2){
return (fabs(x1-x2)<eps);
}
// postoji i f-ja binary_search u <algorithm> ... mada sam i ja kod ovog zadatka
// pisao svoju jer nekad nije bas najpogodnija ova njihova
double binSearch(double p, double q, double sum){
void solve(){
qsort(0,n-1);
// sort(x, x + n) ;
double sum=0;
for (int i=0; i<n; i++){
sum+=a[i]*a[i];
}
double x1=binSearch(x[0],x[n-1]+a[n-1],sum/3);
double x2=binSearch(x[0],x[n-1]+a[n-1],sum*2/3);
cout << setiosflags(ios::fixed) << setprecision(2) << x1 << endl;
cout << setiosflags(ios::fixed) << setprecision(2) << x2 << endl;
}
// ovo me podseca na moje prve programe u c-u kad sam presao sa pascala
// kako nas kratica i urosevic uce da pisemo 'kulturne' programe
// pa se covek navikne i ostane mu to ...
// {preProcess ;}
// readInput ;
// solve ;
// writeOutput ;
// su bili moji Pascal programi :)
int main(){
init();
solve();
}
NAPOMENA: ova poruka sadrzi delimican kod resenja problema 'Jagode' tako da ako niste jos uradili zadatak nemojte da 'kradete' resenje ...
#include <iostream>
#include <iomanip>
#include <cmath>
#include <vector> // sadrzi definiciju klase vector
#include <algorithm> // potreban za metod sort(pointer na pocetak, pointer na kraj, f-ja // uporedjivanja)
using namespace ; // kada ubacujes bilo koju klasu iz STLa moras da navedes ovaj namespace
// za sada ti nije bitno sta je ali ga uvek ubaci kad koristis nesto iz STLa
#define MaxN 200
// ovo je vise stvar ukusa ali ja licno sam se sad navikao da definisem for pod define
// npr:
// #define FOR(i, n) for (int i = 0 ; i < (n) ; i ++)
// pa posle pises samo FOR(i, n) { // u ovom bloku mogu da koristim i iako ga nisam prethodno
// deklarisao }
// a mozes da radis i varijacije na temu
// FORL(i, n, m) for (int i = (n) ; i < (m) ; i ++)
// i sl ... vise je stvari licnog ukusa i navike
using namespace std;
const double eps=10e-20;
double x[MaxN],y[MaxN],a[MaxN];
// ili vector<double> x, y, a ;
int n;
void init(){
cin >> n;
for (int i=0; i<n; i++){ cin >> x[i] >> y[i] >> a[i]; }
// a moze i cin >> tmp ; x.push_back(tmp) ;
// tako se ubacuje kad se radi o vectoru ...
// cin, cout su dobri i jednostavni za koriscenje, ali se pazi kad trebas
// da ucitavas/stampas vecu kolicinu podataka jer su sporiji od scanf/printf
}
// ovo ti je bespotrebna procedura
// ako hoces da zamenis neke dve stvari pisi slobodno swap(a, b)
// swap je overloadovana f-ja (tj. ako je zoves swap(double, double)
// ili swap(int, int) pozove onaj koji ti treba .. isti naziv za istu f-ju
// sa razlicitim parametrima
void swap(int i, int j){
double tmp=x[i]; x[i]=x[j]; x[j]=tmp;
tmp=y[i]; y[i]=y[j]; y[j]=tmp;
tmp=a[i]; a[i]=a[j]; a[j]=tmp;
}
// ovaj deo koda mozes jednostavno da zamenis sa
// sort(pointer_na_pocetak_niza_koji_hocu_da_sortiram, pointer_na_polje_posle_poslednjeg
// elementa_u_nizu_koji_hocu_da_sortiram[,f-ja uporedjivanja])
// gd je ova f-ja uporedjivanja opciona ... tj. mozes da pozoves i bez nje
// ako je niz integera onda ce ti sortirati u rastucem redosledu
// ako neces tako ili hoces da sortiras komplikovanije objekte onda moras da
// napises svoju f-ju
// tipa:
// bool myless(int a, int b) {
// return a<b ;
// }
// i posle pozoves:
// sort(x, x + n, myless)
// sortirace ti elemente u x [0], x [1] ... x [n - 1] po kriterijumu f-je myless
// i u ovom jednom redu stavis ovaj dosadan kod koji skoro pa svaki zadatak
// trazi ... a tako je dosadno kucati jedno te isto :(
int partition(int left, int right){
double pivot=x[right];
int i=left-1;
int j=right;
while (i<j){
do { i++; } while (x[i]<pivot);
do { j--; } while ((x[j]>pivot) && (j!=left));
if (i<j) swap(i,j);
}
swap(i,right);
return i;
}
void qsort(int left, int right){
if (left<right){
int pivot=partition(left,right);
qsort(left,pivot-1);
qsort(pivot+1,right);
}
}
// f-je ovog tipa koje su jednostavne ali se mozda mnogo puta pozivaju
// mogu da prouzrokuju bespotreban overhead pa je dobro staviti ih kao __inline f-je
// npr:
// __inline bool cmp(double x1, double x2){
// ili jos bolje pod #define
// #define cmp(x1, x2) (fabs((x1)-(x2))<eps)
// da bi se ubrzao rad
bool cmp(double x1, double x2){
return (fabs(x1-x2)<eps);
}
// postoji i f-ja binary_search u <algorithm> ... mada sam i ja kod ovog zadatka
// pisao svoju jer nekad nije bas najpogodnija ova njihova
double binSearch(double p, double q, double sum){
void solve(){
qsort(0,n-1);
// sort(x, x + n) ;
double sum=0;
for (int i=0; i<n; i++){
sum+=a[i]*a[i];
}
double x1=binSearch(x[0],x[n-1]+a[n-1],sum/3);
double x2=binSearch(x[0],x[n-1]+a[n-1],sum*2/3);
cout << setiosflags(ios::fixed) << setprecision(2) << x1 << endl;
cout << setiosflags(ios::fixed) << setprecision(2) << x2 << endl;
}
// ovo me podseca na moje prve programe u c-u kad sam presao sa pascala
// kako nas kratica i urosevic uce da pisemo 'kulturne' programe
// pa se covek navikne i ostane mu to ...
// {preProcess ;}
// readInput ;
// solve ;
// writeOutput ;
// su bili moji Pascal programi :)
int main(){
init();
solve();
}