1 条题解
-
0
解法
根据题目列出方程 ,化简可得 ,得出:
此时,若根号下的值小于零或者两根不为整数就都为无解。
否则就令
其中 表示水平切割的次数, 表示垂直切割次数,判断两个值是否合法,合法就输出,不合法就先交换再判断。
代码
#include<bits/stdc++.h> using namespace std; int main() { int t; cin >> t; while (t --) { unsigned long long a,b,k,m,d,x1,x2; cin >> a >> b >> k >> m; d=k*k-4*(m-k-1); if (d < 0 || sqrt(d) != (int)sqrt(d)) { cout << "-1\n"; continue; } if ((k-(unsigned long long)sqrt(d))%2 != 0) { cout << "-1\n"; continue; } x1=(k-sqrt(d))/2; x2=(k+sqrt(d))/2; if (x1 < a && x2 < b) cout << x1 << " " << x2 << '\n'; else { swap(x1,x2); if (x1 < a && x2 < b) cout << x1 << " " << x2 << '\n'; else cout << "-1\n"; } } return 0; }
- 1
信息
- ID
- 10298
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者