这道题就是让你求解这么一个方程组:

$$\left\{\begin{matrix}a_1x+b_1y=c_1 \\a_2x+b_2y=c_2 \end{matrix}\right. $$

然后无解或无数解输出No answer!

这题其实是一个叫克莱姆法则的东西的究极弱化版。结论:

$$x=\frac{\begin{vmatrix}c_1 &b_1 \\c_2 &b_2 \end{vmatrix}}{\begin{vmatrix}a_1 &b_1 \\a_2 &b_2 \end{vmatrix}},y = \frac{\begin{vmatrix}a_1 &c_1 \\a_2 &c_2 \end{vmatrix}}{\begin{vmatrix}a_1 &b_1 \\a_2 &b_2 \end{vmatrix}} $$

其中:

$$\begin{vmatrix}a &b \\c &d \end{vmatrix} = ad-bc $$

无解或无数解就是当

$$\begin{vmatrix}a_1 &b_1 \\a_2 &b_2 \end{vmatrix} = 0$$

的时候。

当然这也非常好推导,可以直接进行消元。我们让上面那个式子乘 a2a_2,下面那个式子乘 a1a_1,可以得到:

$$\left\{\begin{matrix}a_1a_2x+b_1a_2y=c_1a_2 \\a_2a_1x+b_2a_1y=c_2a_1 \end{matrix}\right. $$

然后两个式子相减,就能将 xx 消掉:

(b1a2b2a1)y=c1a2c2a1(b_1a_2 - b_2a_1)y = c_1a_2-c_2a_1 y=c1a2c2a1b1a2b2a1y = \frac{c_1a_2-c_2a_1}{b_1a_2 - b_2a_1}

同理可得 xx

x=c2b1c1b2b1a2b2a1x = \frac{c_2b_1 - c_1b_2}{b_1a_2 - b_2a_1}

就得到了上面那个式子。

至于无解或无数解,如果 a1b1=a2b2\frac{a_1}{b_1} = \frac{a_2}{b_2},那么两个式子左边的系数就可以化为相同的,此时如果右边的 cc 是相同的就是无数解,不同就是无解。

最后记得化简。两个数同时除以它们的最大公因数,剩下的就没有公共的质因数了,然后就互质了。

code:

#include<bits/stdc++.h>
#define int long long
#define inf 1e18
#define lowbit(x) (x & -x)
#define fo(i,j,k,l) for(int i = j;i <= k;i += l)
using namespace std;
int a1,b1,c1,a2,b2,c2; 
signed main()
{
	freopen("violet.in","r",stdin);
	freopen("violet.out","w",stdout);
	cin >> a1 >> b1 >> c1 >> a2 >> b2 >> c2;
	int d1 = c1 * b2 - c2 * b1,d2 = c2 * a1 - c1 * a2,d = a1 * b2 - a2 * b1;
	if(d == 0)cout << "No answer!";
	else cout << (d1 / __gcd(d1,d)) << '/' << (d / __gcd(d1,d)) << endl <<  (d2 / __gcd(d2,d)) << '/' << (d / __gcd(d2,d));
	return 0;
}

对真正的克莱姆法则感兴趣的同学可以去搜索学习一下,可能有亿点点难,谨慎学习。

0 条评论

目前还没有评论...

信息

ID
1253
时间
1000ms
内存
256MiB
难度
3
标签
(无)
递交数
162
已通过
13
上传者