Я попробовал CPP кодоблок:Сортировка координат (x, y) параболы y = ax^2 + bx + c x = x1, x2, x3, x4. в соответствии с координатами у
bool comp(const pair<int,int>&A, const pair<int,int>&B)
{
if(A.second<=B.second)
{
if(A.first>=B.first)
return 1;
else
return 0;
}
return 0;
}
int main()
{
int a, b, c, x[10], y[10];
cin>>a;
cin>>b;
cin>>c;
for(int i=0;i<4;++i)
{
cin>>x[i];
y[i]=a*x[i]*x[i]+b*x[i]+c;
}
vector<pair<int,int> >V;
for(int i=0;i<4;++i)
{
V.pb(mp(x[i],y[i]));
}
for(int i=0;i<4;++i)
{
sort(V.begin(),V.end(),&comp);
}
for(int i=0;i<V.size();i++)
{
cout<<V[i].first;
cout<<" "<<V[i].second<<" ";
}
return 0;
}
STDIN: a b c x1 x2 x3...
и x
в отсортированном порядке, т.е. x1 < x2 < x3
. Код должен генерировать новый список (y = y1 y2 y3
) с использованием уравнения параболы для каждого x
и сортировать приведенный выше список со сложностью времени выполнения < = O (log n).
STDOUT: x3,y3 x1,y1 x2,y2 ...
(предположительно вычислено y3 < y1 < y2..
).
Код НЕ должен вычислять Y. Умножение на этом вычислительном узле «слишком» дорого. Решение должно идентифицировать способ сортировки списка без вычисления значений «y».
Мой код вычисляет значения y. Может ли кто-нибудь найти метод сортировки без вычисления значений y. Реализация кода на Python также будет работать для меня.
Вы не можете избежать вычисления y, потому что вы должны выводить их, не так ли? – MBo
Ваша функция 'comp' не соответствует строгой строгости. Он вернет 'true', если параметры' (A, B) ', а затем' (B, A) ', если' A == B' как в первом, так и в втором компонентах. Если бы вы запускали эту Visual Studio, а «A == B» (как для «первых», так и для «вторых» компонентов равны), время выполнения отладки будет утверждать и заканчивать программу. То, что вы хотите сделать, сравнивается либо строго меньше, либо строго больше. Использование '<=' or '> =' в функции сравнения почти всегда неверно. – PaulMcKenzie