Test Message

b603: 拋物線方程式

內容

給你頂點與拋物線上一點座標,列出該方程式。例如頂點座標 1 2 線上一點座標 0 5 可以推算出 1y = 3x^2 – 6x + 5
(係數如果是 1 不必省略,每一項係數都為整數,y 項係數為正整數)


輸入

四個整數 x1 y1 x2 y2 前兩個為頂點座標(x1, y1),後兩個為拋物線上一點座標 (x2, y2)

1 2 0 5
1 9 18 60

輸出

輸出 ay = bx^2 + cx + d 的式子,a 為正整數,b, c, d 為整數,a, b, c, d 為 1 時不必省略,等號和加號前後有空白

1y = 3x^2 + -6x + 5
17y = 3x^2 + -6x + 156


解題思路

簡單的數學公式轉程式碼。


完整程式碼

AC (2ms, 100KB)
#include <stdio.h>
#define SWAP(x, y) x^=(y^=(x^=y))

inline int gcd(int m, int n)
{
while (n)
{
m %= n;
SWAP(m, n);
}
return m;
}

int main()
{
int x1, x2, y1, y2, g, a, b, c, d;
while (scanf(" %d %d %d %d", &x1, &x2, &y1, &y2) == 4)
{
a = (y1 - x1) * (y1 - x1);
b = (y2 - x2);
g = gcd(a, b);
b /= g;
a /= g;
c = -2 * b * x1;
d = b * x1 * x1 + a * x2;
printf("%dy = %dx^2 + %dx + %d\n", a, b, c, d);
}
return 0;
}