首页 > 其他分享 >洛谷-P8814 题解

洛谷-P8814 题解

时间:2022-11-05 20:59:02浏览次数:86  
标签:P8814 洛谷 题解 s1 begin long times end cases

前言

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

正文

算法:式子推导

从题中可得 \(\begin{cases}n_i = p_i \times q_i \\ e_i \times d_i = (p_i - 1)(q_i - 1) + 1\end{cases}\),先拆开式子得到 \(\begin{cases} n_i = p_i \times q_i \\e_i\times d_i=p_i\times q_i-p_i-q_i+2 \end{cases}\)\(\Rightarrow \begin{cases}p_i \times q_i =n_i\\p_i+q_i=p_i\times q_i-e_i\times d_i+2\end{cases}\)\(\Rightarrow \begin{cases}p_i \times q_i =n_i\\p_i+q_i=n_i-e_i\times d_i+2\end{cases}\),设 \(p_i+q_i=s_i\) 根据公式 \((a+b)^2-4\times a\times b=(a-b)^2\),可以求出 \(p_i-q_i=\sqrt{{s_i}^2-4\times n_i}\)。

可得 \(\begin{cases}p_i+q_i\\p_i-q_i\end{cases}\),易求解。

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

代码:

#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: 发布

标签:P8814,洛谷,题解,s1,begin,long,times,end,cases
From: https://www.cnblogs.com/wanguan/p/16861060.html

相关文章

  • 「题解报告」[POI2008]PER-Permutation
    「题解报告」[POI2008]PER-Permutation点击查看目录目录「题解报告」[POI2008]PER-Permutation思路代码不理解哪里难了,学过扩卢并且推一下式子基本就是两眼切吧。......
  • Luogu P5816[CQOI2010]内部白点题解
    LinkLuoguP5816Description一个平面直角坐标系内有\(n\)个黑点,其余点为白点,将会进行若干次变换,每次变换会把上下左右方向都有黑点的白点变成黑点,直到找不到符合要求......
  • python print 打印延迟问题解决
    转载:https://wenku.baidu.com/view/ffc89347bb4ae45c3b3567ec102de2bd9705de56.html?wkts=1667639107060&bdQuery=python+print%E7%AB%8B%E5%8D%B3%E6%89%93%E5%8D%B0......
  • 【题解】洛谷P2946 [USACO09MAR]Cow Frisbee Team S
    这题乍一看是一个朴素的01背包问题,将所有方案的集合按照能力值的和来划分成1~m,然后把m当作体积,把n当作物品数,做一个01背包的代码。于是我兴冲冲地写了代码交上去,然后十组样......
  • accoders NOI #5047. 猜数游戏 题解
    题目描述Alice和Bob玩游戏。Alice有一个\(1~n\)中的正整数\(y\)。Bob不知道这个数。游戏中的每一轮,Bob选一个正整数\(x\),并提问Alice:\(y\)是否大于等于\(x......
  • P8814 [CSP-J 2022] 解密
    P8814[CSP-J2022]解密//ni=pi*qi//ei*di=pi*qi-pi-qi+2//ei*di=ni-pi-qi+2//pi+qi=ni-ei*di+2//pi*qi=ni//pi......
  • 「题解」Codeforces 1612F Armor and Weapons
    首先可以不管套件,假定\(n<m\),那么答案不超过\(\mathcal{O}(\logn+\frac{m}{n})\),也就是先倍增把\(n\)造出来,然后一步步造\(m\).答案这么小,那么常见的套路就是把答案......
  • 问题解决:vscode运行python找不到文件
    问题描述:使用VSCode执行Python代码调用其他文件时报FileNotFound错误,终于发现是VSCode工作路径默认是当前文件所在工作区的根目录,而不是当前文件所在目录。发生条件:根......
  • 「题解」牛客练习赛105 F 胖头鱼头胖
    先对每个位置\(i\)对集合幂级数\(x^0+x^1+\cdots+x+x^{a_i}\)FWT,那么询问就是将区间里面所有FWT后的集合幂级数作点积再IFWT后提取\(x^s\)的系数。首先可以通......
  • P2484 [SDOI2011]打地鼠 题解
    P2484[SDOI2011]打地鼠题解目录P2484[SDOI2011]打地鼠题解题目分析思路代码题目P2484[SDOI2011]打地鼠题解分析锤子每次只能将每个洞里打掉一只地鼠,所以对于每......