Daklem... Primjetio sam da su sluzbeni test primjeri za ovaj zadatak sasvim masivni, stoga sam prilicno zabrinut jer naime... Moj kod pokazao se neadekvatnim za 9 test primjer, stoga bih vas zamolio za pomoc ukoliko je netko voljan pomoci.
#include <iostream>
#include <vector>
#include <cmath>
#define in(a, b) scanf("%f %f", &a, &b);
#define mp make_pair
#define s first
#define v second
using namespace std;
int n1, n2;
vector < pair < pair < double, double >, int > > v1, v2;
float a, b;
pair < pair < double, double >, int > k;
vector <double> ou1, ou2;
int main (void){
cin >> n1 >> n2;
ou1 = vector <double> (n1, -1.0);
ou2 = vector <double> (n2, -1.0);
for ( int i = 0; i < n1; ++i ){
in( a, b );
k.s = mp(a, b);
k.v = i;
v1.push_back( k );
}
for ( int i = 0; i < n2; ++i ){
in( a, b );
k.s = mp(a, b);
k.v = i;
v2.push_back( k );
}
sort ( v1.begin(), v1.end() );
sort ( v2.begin(), v2.end() );
int i1 = 0, i2 = 0 ;
while ( (v1.size()-i1) && (v2.size()-i2) ){
double t1 = v2[i2].s.s / v1[i1].s.v, t2 = v1[i1].s.s / v2[i2].s.v;
if ( t1 > t2 ){ ou1[v1[i1].v] = t1; ++i1; }
else { ou2[v2[i2].v] = t2; ++i2; }
}
for ( int i = 0; i < n1; ++i )
printf ("%0.2f\n", ou1[i]);
for ( int i = 0; i < n2; ++i )
printf ("%0.2f\n", ou2[i]);
//system ( "pause" );
return 0;
}
Ispricavam se zbog makroa...
#include <iostream>
#include <vector>
#include <cmath>
#define in(a, b) scanf("%f %f", &a, &b);
#define mp make_pair
#define s first
#define v second
using namespace std;
int n1, n2;
vector < pair < pair < double, double >, int > > v1, v2;
float a, b;
pair < pair < double, double >, int > k;
vector <double> ou1, ou2;
int main (void){
cin >> n1 >> n2;
ou1 = vector <double> (n1, -1.0);
ou2 = vector <double> (n2, -1.0);
for ( int i = 0; i < n1; ++i ){
in( a, b );
k.s = mp(a, b);
k.v = i;
v1.push_back( k );
}
for ( int i = 0; i < n2; ++i ){
in( a, b );
k.s = mp(a, b);
k.v = i;
v2.push_back( k );
}
sort ( v1.begin(), v1.end() );
sort ( v2.begin(), v2.end() );
int i1 = 0, i2 = 0 ;
while ( (v1.size()-i1) && (v2.size()-i2) ){
double t1 = v2[i2].s.s / v1[i1].s.v, t2 = v1[i1].s.s / v2[i2].s.v;
if ( t1 > t2 ){ ou1[v1[i1].v] = t1; ++i1; }
else { ou2[v2[i2].v] = t2; ++i2; }
}
for ( int i = 0; i < n1; ++i )
printf ("%0.2f\n", ou1[i]);
for ( int i = 0; i < n2; ++i )
printf ("%0.2f\n", ou2[i]);
//system ( "pause" );
return 0;
}
Ispricavam se zbog makroa...