洛谷: P8814
OJ: P4975
暴力破解:60分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | /**************************************************************** * Description: * Author: Alex Li * Date: 2023-09-18 12:18:10 * LastEditTime: 2023-09-18 14:25:53 ****************************************************************/ #include <iostream> using namespace std; int main(){ int k; long long k,n,e,d,p,q; bool a; cin>>k; for (int i = 0; i <k; i++){ a=true; cin>>n>>e>>d; for( p=1;p*p<=n;p++){ if(n%p==0){ q=n/p; if(e*d==(n-p-q+2)){ cout<<p<<' '<<q; a=false; cout<<endl; break; } } } if(a)cout<<"NO"<<endl; } } |
m = n - d * e + 2
:这是根据题目给出的方程关系推导出的一个表达式。m
是 pi + qi
的值。g = m * m - 4 * n
:这是二次方程的判别式,用来判断方程是否有解。g < 0
:表示方程没有实数解,因此输出 “NO”。h = sqrt(g)
:计算判别式的平方根。如果平方根不是整数,则无解。(m + h) % 2 == 1
和 m <= h
:确保方程有合适的整数解,并且 pi <= qi
。pi
和 qi
。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include<iostream> #include <cmath> using namespace std; int k; // 询问的次数 long long n, d, e, m, h, g; // n表示ni, d表示di, e表示ei,m表示q + p, h表示平方根的值,g是m的平方减去4n的值 int main() { cin >> k; // 输入询问的次数 while (k--) { // 处理每一次询问 cin >> n >> d >> e; // 输入ni, di, ei m = n - d * e + 2; // 根据题目给出的关系式推导出 m = q + p g = m * m - 4 * n; // 根据求解二次方程的判别式,g = m^2 - 4 * n if (g < 0) { // 如果判别式 g 小于 0,说明方程无解 cout << "NO\n"; // 输出 "NO" continue; } h = sqrt(g); // h 是判别式 g 的平方根 if (h * h != g) { // 如果 g 不能被完全平方,则说明 g 不是整数,也无解 cout << "NO\n"; // 输出 "NO" continue; } // 如果 m + h 不能被 2 整除或者 m <= h,说明无法找到合适的 pi 和 qi if ((m + h) % 2 == 1 || m <= h) { cout << "NO\n"; // 输出 "NO" continue; } // 如果通过所有条件,输出 pi 和 qi,确保 pi <= qi cout << (m - h) / 2 << ' ' << (m + h) / 2 << '\n'; } return 0; } |