1 条题解

  • 0
    @ 2026-6-19 10:31:05

    📝 题目大意

    已知 A=X+YA = X + YB=XYB = X - Y,给定 A,BA, B,求原始整数 XXYY

    💡 解题思路

    1. 题目分析:题目给出了两个二元一次方程 X+Y=AX+Y=AXY=BX-Y=B,且保证存在唯一整数解。数据范围很小(100A,B100-100 \leq A, B \leq 100),直接解方程组即可。

    2. 算法推导

      • 将两式相加:(X+Y)+(XY)=A+B(X+Y) + (X-Y) = A + B,即 2X=A+B2X = A + B,得 X=A+B2X = \frac{A+B}{2}
      • 将两式相减:(X+Y)(XY)=AB(X+Y) - (X-Y) = A - B,即 2Y=AB2Y = A - B,得 Y=AB2Y = \frac{A-B}{2}
      • 由于题目保证存在唯一整数解,因此 A+BA+BABA-B 必然都是偶数,直接使用整数除法即可。
    3. 边界与细节:注意 AABB 可能为负数,C++ 中整数除法向零截断。由于被除数必为偶数,直接 /2 没有问题。无需特判任何边界。

    ⏱️ 复杂度分析

    • 时间复杂度:仅做两次加法和一次除法,O(1)O(1)
    • 空间复杂度:仅使用几个变量,O(1)O(1)

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	int a, b, x, y;
    	cin >> a >> b;
    	// 由方程组 X+Y=A, X-Y=B 解得:
    	x = (a + b) / 2;  // X = (A + B) / 2
    	y = (a - b) / 2;  // Y = (A - B) / 2
    	cout << x << " " << y;
    	return 0;
    }
    
    • 1

    信息

    ID
    856
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者