题解:P16969 [XRCOI Round 2] A. Simple

· · 题解

一、题目分析

一元二次方程

注意到题目中“唯一实数解”,所以 Δ=4c^2-4b(b+a)=0

化简得到 (c-b)(c+b)=ab

u=c-b,\ v=c+b,由 uv=abv=\dfrac{au}{a-2u}
d=a-2u代入b=\dfrac{(a-d)^2}{4d},\quad c=\dfrac{a^2-d^2}{4d}

构造方案:

有没有人没用较快的输入输出方式……

二、参考代码

AC 记录

::::success[code]{open}

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int t;
int main(){
    scanf("%d",&t);
    while(t--){
        ll a;
        scanf("%lld",&a);
        if(a==1||a==2||a==4){
            puts("No");
            continue;
        }
        if(a%2==1){
            ll b=(a-1)*(a-1)/4,c=(a*a-1)/4;
            printf("Yes\n%lld %lld\n",b,c);
        }else if(a%8==0){
            ll b=a/8,c=3*a/8;
            printf("Yes\n%lld %lld\n",b,c);
        }else if(a%4==2){
            ll b=(a-2)*(a-2)/8,c=(a*a-4)/8;
            printf("Yes\n%lld %lld\n",b,c);
        }else{
            ll b=(a-4)*(a-4)/16,c=(a*a-16)/16;
            printf("Yes\n%lld %lld\n",b,c);
        }
    }
    return 0;
}