[CSP-J 2022] 解密

news/2024/9/29 22:14:43/

题目来源:洛谷题库

[CSP-J 2022] 解密

题目描述

给定一个正整数 k k k,有 k k k 次询问,每次给定三个正整数 n i , e i , d i n_i, e_i, d_i ni,ei,di,求两个正整数 p i , q i p_i, q_i pi,qi,使 n i = p i × q i n_i = p_i \times q_i ni=pi×qi e i × d i = ( p i − 1 ) ( q i − 1 ) + 1 e_i \times d_i = (p_i - 1)(q_i - 1) + 1 ei×di=(pi1)(qi1)+1

输入格式

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

接下来 k k k 行,第 i i i 行三个正整数 n i , d i , e i n_i, d_i, e_i ni,di,ei

输出格式

输出 k k k 行,每行两个正整数 p i , q i p_i, q_i pi,qi 表示答案。

为使输出统一,你应当保证 p i ≤ q i p_i \leq q_i piqi

如果无解,请输出 NO

样例 #1

样例输入 #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

提示

【样例 #2】

见附件中的 decode/decode2.indecode/decode2.ans

【样例 #3】

见附件中的 decode/decode3.indecode/decode3.ans

【样例 #4】

见附件中的 decode/decode4.indecode/decode4.ans

【数据范围】

以下记 m = n − e × d + 2 m = n - e \times d + 2 m=ne×d+2

保证对于 100 % 100\% 100% 的数据, 1 ≤ k ≤ 10 5 1 \leq k \leq {10}^5 1k105,对于任意的 1 ≤ i ≤ k 1 \leq i \leq k 1ik 1 ≤ n i ≤ 10 18 1 \leq n_i \leq {10}^{18} 1ni1018 1 ≤ e i × d i ≤ 10 18 1 \leq e_i \times d_i \leq {10}^{18} 1ei×di1018
1 ≤ m ≤ 10 9 1 \leq m \leq {10}^9 1m109

测试点编号 k ≤ k \leq k n ≤ n \leq n m ≤ m \leq m特殊性质
1 1 1 1 0 3 10^3 103 1 0 3 10^3 103 1 0 3 10^3 103保证有解
2 2 2 1 0 3 10^3 103 1 0 3 10^3 103 1 0 3 10^3 103
3 3 3 1 0 3 10^3 103 1 0 9 10^9 109 6 × 1 0 4 6\times 10^4 6×104保证有解
4 4 4 1 0 3 10^3 103 1 0 9 10^9 109 6 × 1 0 4 6\times 10^4 6×104
5 5 5 1 0 3 10^3 103 1 0 9 10^9 109 1 0 9 10^9 109保证有解
6 6 6 1 0 3 10^3 103 1 0 9 10^9 109 1 0 9 10^9 109
7 7 7 1 0 5 10^5 105 1 0 18 10^{18} 1018 1 0 9 10^9 109保证若有解则 p = q p=q p=q
8 8 8 1 0 5 10^5 105 1 0 18 10^{18} 1018 1 0 9 10^9 109保证有解
9 9 9 1 0 5 10^5 105 1 0 18 10^{18} 1018 1 0 9 10^9 109
10 10 10 1 0 5 10^5 105 1 0 18 10^{18} 1018 1 0 9 10^9 109

题意:已知三个数值,求两个变量qp的值。两个方程两个未知数求解
在这里插入图片描述

思路:

  1. 如果只是两个方程两个未知数,暴力解法:遍历q 使得qp 满足要求。但是犹豫数据过大,只能拿到一半的分,会超时!k 10^5 ,m: 10 ^9 , 想到什么只求到最多遍历到m/2,或者根据n的奇偶性遍历一半,也只是0.5 * 10 ^9,无济于事
  2. 根据韦达定理,能知道a-b=±sqrt((a+b)^2-4ac)简单的替换一下数据,其实可以得到一个公式直接求出qp
  3. 在这里插入图片描述
  4. 公式出来了,但是要注意根号下的数据>=0才能行!
    数据约束:
    这么多很大的数据,用long long
    代码参考:
#include<bits/stdc++.h>
using namespace std;
int main(){int k,flag=0;long long  n,e,d,p,q; cin>>k;while(k){flag=0;scanf("%lld%lld%lld",&n,&d,&e);long long  m = n-e*d+2;long long  x=m*m-4*n;if(x>=0){q = (sqrt(x)+m)/2,p=( -sqrt(x)+m)/2;if(p+q==m&&p*q==n){printf("%lld %lld\n",p,q);}else{flag = 1;}}else{flag = 1;}//输出结果 if(flag){printf("NO\n");}k--;}return 0;
}

碎碎念:
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊简单题整了很久,效率低了

  • 服了,在哪儿想着如何遍历更简约时间,没想到直接解方程,套入了代码 的死脑筋
  • 好不容易意识到问题,之前写的算平方用得pow(),终于这次知道怎么摔的了!之前也有一道题用得pow报错,不知道啥原因,现在原因如下:
    -‌使用[pow函数]时需要注意以下几点限制‌:
  1. 参数类型‌:pow函数的参数类型为double。如果传入的参数不是double类型,会自动转换为double类型。这意味着,如果你使用非double类型的参数(如int、float等),它们将被隐式转换为double类型进行计算。这种转换可能会导致精度损失或数据截断,特别是在处理大数或小数时‌1。
  2. 返回值类型‌:pow函数的返回值也是double类型。如果计算结果超出double类型的表示范围,会返回一个特定的值(如NaN或inf)。这表明,对于非常大的数或非常小的数的幂运算,可能会遇到表示范围的限制,导致返回非预期的结果‌1。
  3. 精度问题‌:由于浮点数表示的精度有限,使用pow函数进行计算时可能会出现精度丢失的问题。这是因为浮点数的表示和计算涉及到二进制近似,可能会导致计算结果与理论值存在微小的差异‌1。

http://www.ppmy.cn/news/1532111.html

相关文章

【Ubuntu】minicom安装、配置、使用以及退出

目录 1 安装 2 配置 3 使用 4 退出 minicom是一个串口通信的工具&#xff0c;以root权限登录系统&#xff0c;可用来与串口设备通信。 1 安装 sudo apt-get install minicom 2 配置 使用如下命令进入配置界面&#xff1a; sudo minicon -s 进入配置界面后&#xff0c;…

打造自己的解析大模型:模型的安装与推理

RAG系统中要快速构建AI助理&#xff0c;首先要高效、准确地建立知识库&#xff0c;而实现这一点的关键便是具备一个功能强大的文档解析器。在上一篇中&#xff0c;我们介绍了PdfParser&#xff0c;本篇将深入讨论该解析器所依赖的模型&#xff0c;以及如何在Windows环境中安装并…

[模拟]图形变换

题目描述 给定 m m m 行 n n n 列的图像各像素点灰度值&#xff0c;对其依次进行一系列操作后&#xff0c;求最终图像。 其中&#xff0c;可能的操作及对应字符有如下四种&#xff1a; A A A&#xff1a;顺时针旋转 90 90 90 度。 B B B&#xff1a;逆时针旋转 90 90 9…

服务器开通个人账户

给服务器添加新用户&#xff0c;然后后续的软链接操作 &#xff08;文件不要放到home&#xff09;放到data盘中 1、添加新用户 首先登录 root 账户 # 创建xxx用户 sudo useradd -m -s /bin/bash xxx # 添加密码 sudo passwd xxx # 对应位置建立文件夹xxx-dir 数据盘位置建…

数组的实现原理(Java版)

目录 一.数组是什么&#xff1f; 内存分配&#xff1a; 特点&#xff1a; 数组的实现原理&#xff1a; 时间复杂度&#xff1a; 二.Java数组的实现&#xff1a; 总结&#xff1a; 一.数组是什么&#xff1f; 数组&#xff08;Array&#xff09; 是一种数据结构&#xf…

基于SpringBoot+Vue的旅游攻略平台管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

制造企业如何提升项目管理效率?惠科股份选择奥博思PowerProject项目管理系统

全球知名的显示方案综合服务商 - 惠科股份有限公司与北京奥博思达成合作&#xff0c;基于奥博思 PowerProject 搭建企业级项目管理平台。满足惠科多产品多业务领域的项目全周期管理。助力企业在技术研发、产品创新等方面继续取得行业领先优势。 同时&#xff0c;PowerProject …

vincent,一个超酷的Python库

vincent 是一个基于 Python 的可视化库&#xff0c;专门用于生成交互式的图表和可视化数据。它基于 Vega 和 Vega-Lite&#xff0c;提供了丰富的图表类型和自定义选项&#xff0c;使数据可视化变得更加简单直观。通过 vincent&#xff0c;程序员可以轻松地将数据转换为精美的图…