koordinatları:Bir parabolün koordinatlarını (x, y) sıralayın. Y = ax^2 + bx + c x = x1, x2, x3, x4. y e göre bir kod-bloğu cpp çalıştılar
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...
ve x
yani x1 < x2 < x3
sıralanmış düzenindedir. Kod her x
için parabol denklemini kullanarak yeni bir liste (y = y1 y2 y3
) oluşturmalı ve yukarıdaki listeyi < = O (log n) çalışma zamanı karmaşıklığı ile sıralamalıdır.
STDOUT: x3,y3 x1,y1 x2,y2 ...
(hesaplanan y3 < y1 < y2..
varsayar).
Kod, Y'leri YORUMLANMAMALIDIR. Bu hesaplama düğümünde çoğaltma "çok" maliyetlidir. Çözüm, "y" değerlerini hesaplamadan listeyi hala sıralama yolu belirlemelidir.
Kodum, y değerlerini hesaplar. Y değerlerini hesaplamaksızın herhangi bir sıralama yöntemi bulabilir. Bir python kodu uygulaması da benim için çalışacaktı.
Y'lerin hesaplanmasını engelleyemezsiniz, çünkü bunları çıkarmanız gerekir, doğru mu? – MBo
'comp' işleviniz' sıkı-zayıf sıra 'takip etmiyor. Eğer parametreler “(A, B)” ve sonra “(B, A)” ise, ilk ve ikinci bileşenlerde “A == B” ise “true” değerini döndürecektir. Bu Visual Studio'yu çalıştırırsanız ve 'A == B' (her ikisi de' first' ve 'second' bileşenleri eşittir), hata ayıklama çalışma zamanı programı ileri sürer ve sonlandırır. Yapmak istediğiniz şey, ya çok az ya da kesinlikle büyüktür. Bir karşılaştırma işlevinde '<=' or '> =' kullanmak neredeyse her zaman yanlıştır. – PaulMcKenzie