我已經嘗試了CPP代碼塊:拋物線的排序座標(x,y)y = ax^2 + bx + c x = x1,x2,x3,x4。根據y座標
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
。該代碼應該使用每個x
的拋物線方程生成一個新列表(y = y1 y2 y3
),並將運行時複雜度爲< = O(log n)的上述列表排序。
STDOUT:x3,y3 x1,y1 x2,y2 ...
(假設計算爲y3 < y1 < y2..
)。
代碼不應該計算Y's。在這個計算節點上的乘法「太」成本高。該解決方案應該確定一種仍然排序列表而不計算「y」值的方法。
我的代碼計算y值。任何人都可以找到一種排序方法,無需計算y值。一個python代碼實現也適用於我。
您不能避免計算y's,因爲您必須輸出它們,對嗎? – MBo
你的'comp'函數不遵循'strict-weak-order'。如果參數是「(A,B)」,那麼它將返回「true」,如果在第一和第二組件中都是「A == B」,則返回「(B,A)」。如果你要運行這個Visual Studio,並且'A == B'('first'和'second'組件都是相同的),那麼調試運行時會聲明並結束程序。你想要做的是比較嚴格小於或嚴格大於。在比較函數中使用'<=' or '> ='幾乎總是錯誤的。 – PaulMcKenzie