满江红 0pts 求调
查看原帖
满江红 0pts 求调
1262434
hsy2024楼主2024/9/28 07:18

代码:

/*
题目解析
给定一个正整数 k

有k 次询问,每次给定三个正整数ni,di,ei
求两个正整数 pi,qi使 
ni=pi*qi
ei*di=(pi-1)*(qi-1)

输入格式
第一行一个正整数k,表示有 k 次询问。

接下来 k 行,第 i 行三个正整数ni,di,ei

输出格式
输出 
k 行,每行两个正整数 
pi,qi表示答案。

为使输出统一,你应当保证 pi<=qi

如果无解,请输出 NO。

输入输出样例
输入 #1
10
770 77 5
633 1 211
545 1 499
683 3 227
858 3 257
723 37 13
572 26 11
867 17 17
829 3 263
528 4 109
输出 #1
2 385
NO
NO
NO
11 78
3 241
2 286
NO
NO
6 88
*/
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int k,n,d,e;
    cin>>k;
    for(int i=0;i<k;i++)
    {
        scanf("%d%d%d",&n,&d,&e);//输入数据
        /*
        根据题意
        n-de+2=p+q
        n=pq
        化简得
        q,p为方程x2+(de-n-2)x+n两根
        */
        //解方程{
        int a=n-d*e+2;
        int delta=a*a-(n<<4);//快一点
        if(delta<0)printf("NO\n");
        else if(fabs(floor(sqrt(delta))*floor(sqrt(delta))-delta)>=1e-5)printf("NO\n");
        else if(int(a-round(sqrt(delta)))%2)printf("NO\n");
        else 
        {
            float p=a;
            float q=round(sqrt(delta));
            printf("%d %d\n",(p-q)/2,(p+q)/2);
        }
        //}
    }
    return 0;
}
2024/9/28 07:18
加载中...