二叹人心太炎凉,百般柔|

IOIAK_wanguan

园龄:2年6个月粉丝:2关注:0

2022-11-05 20:40阅读: 218评论: 0推荐: 0

洛谷-P8814 & CSPJ-2022#2 题解

前言

蒟蒻感叹!许多大佬的思路真的很复杂,于是为了部分没学过的人写了这篇题解(其实就是为了咕值),值得一看!

正文

从题中可得 {ni=pi×qiei×di=(pi1)(qi1)+1,先拆开式子得到 {ni=pi×qiei×di=pi×qipiqi+2{pi×qi=nipi+qi=pi×qiei×di+2{pi×qi=nipi+qi=niei×di+2,设 pi+qi=si 根据公式 (a+b)24×a×b=(ab)2,可以求出 piqi=si24×ni

可得 {pi+qipiqi,易求解。

那么,如何判定原式无解?需注意题中说明 pi,qi 是整数,可推知 piqi 也是整数,我们知道 C++ 整数型向下取整,若开根号的值是非整数,那么 piqi 会变小,即 pi×qi<ni因此将最后求解得到的 pi,qi 相乘与 ni 比较即可,若不相等,则无解。

代码:

#include<iostream>
#include<math.h>
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
using namespace std;
long long n,e,d,p,q,T;
int main(){
ios::sync_with_stdio(false),cin.tie(0);
cin>>T;
while(T--){
cin>>n>>d>>e;
long long s1=n-e*d+2;//p+q
long long s2=sqrt(s1*s1-4*n);//p-q
p=(s1+s2)/2,q=s1-p;
if(p*q==n) cout<<min(p,q)<<" "<<max(p,q)<<"\n";//题中说先大后小
else cout<<"NO\n";
}
return 0;
}

完结!

后附

日志

v1.0 on 2022.11.04: 发布

本文作者:wanguan

本文链接:https://www.cnblogs.com/wanguan/p/16861060.html

版权声明:本作品采用 BY-NC-SA 4.0 许可协议进行许可。

posted @   IOIAK_wanguan  阅读(218)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起