虽然超时,但WA了不能李姐
查看原帖
虽然超时,但WA了不能李姐
359983
Obtuse_Angle楼主2022/10/29 18:01

思路是通过(p + q)^2 - 4pq先求 (p -q) ^ 2

判断其是否为平方数

再输出结果

dalaos看看吧

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std ;

int k ;
long long n , d , e ;
long long qa , qf , qans , flag, p , q ;
int main()
{
	freopen("decode.in","r",stdin);
	freopen("decode.out","w",stdout);
	cin >> k ;
	for ( int i = 1 ; i <= k ; i ++ )
	{
		scanf("%lld%lld%lld", &n , &d , &e ) ;
		qa = n - d * e + 2 ; // p + q 
		qf = qa * qa - 4 * n ;  // (p + q) ^ 2 - 2pq
	//	cout << qa << "   " << qf << endl ;
 		if ( qf <= 0 ) 
		{
			printf("NO\n");
			continue ;
		}
		flag = 0 ;
		for ( long long j = 1 ; j * j <= qf ; j ++ )
		{
			if ( j * j == qf )
			{
				qans = j ;
				flag = 1 ; 
			} 
		}
		if ( flag == 0 || qa - qans <= 0 || ( (qa - qans) % 2 ) != 0 )
		{
			printf("NO\n");
			continue ;
		} 
		long long op1 = (qa + qans) / 2 , op2 = (qa - qans) / 2 ;
		if ( op1 <= op2 ) p = op1 , q = op2 ;
		else p = op2 , q = op1 ;
		printf("%lld %lld\n", p , q ) ;
	}
	fclose(stdin);
	fclose(stdout);	
	return 0 ;
}
2022/10/29 18:01
加载中...