4729. 解密

news/2024/11/1 19:22:02/

Powered by:NEFU AB-IN

Link

文章目录

  • 4729. 解密
    • 题意
    • 思路
    • 代码

4729. 解密

  • 题意

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

  • 思路

    通过数学推导可以推出
    p + q = m
    p * q = n
    那么可以通过两个方式求出

    • 韦达定理
      即还原出原来的二元一次方程,然后通过求根公式判断是否有解,然后求解即可
    • 二分
      可知p, q的上下限,可通过两个条件进行二分,最后验证两者相乘是否等于n即可
  • 代码

    韦达定理

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cmath>using namespace std;typedef long long LL;int main()
    {int k;scanf("%d", &k);while (k -- ){LL n, d, e;scanf("%lld%lld%lld", &n, &d, &e);LL m = n - e * d + 2;LL dt = m * m - 4 * n;LL r = sqrt(dt);if (dt < 0 || r * r != dt) puts("NO");else printf("%lld %lld\n", (m - r) / 2, (m + r) / 2);}return 0;
    }
    

    二分

    /*
    * @Author: NEFU AB-IN
    * @Date: 2023-01-28 10:45:38
    * @FilePath: \Acwing\4729\4729.cpp
    * @LastEditTime: 2023-01-28 10:56:17
    */
    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    // #undef int#define SZ(X) ((int)(X).size())
    #define ALL(X) (X).begin(), (X).end()
    #define IOS                                                                                                            \ios::sync_with_stdio(false);                                                                                       \cin.tie(nullptr);                                                                                                  \cout.tie(nullptr)
    #define DEBUG(X) cout << #X << ": " << X << '\n'
    typedef pair<int, int> PII;const int N = 1e5 + 10, INF = 0x3f3f3f3f;signed main()
    {IOS;int k, n, d, e;cin >> k;while (k--){cin >> n >> d >> e;int m = n - e * d + 2;// p * q = n// p + q = m// 解一定是正整数// 找pint l = 1, r = m;while (l < r){int mid = l + r >> 1;if (mid * (m - mid) >= n)r = mid;elsel = mid + 1;}if (l * (m - l) == n){cout << l << " " << m - l << '\n';}elsecout << "NO\n";}return 0;
    }
    

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

相关文章

Git操作

合并远端提交 将远程三次提交合成一次 git -rebase -i HEAD~3:wq 保存 就叫 day 17 再保存 最后 git push -f提交 rebase 与 merge merge 1 新建一个分支 git chekout -b feature-1 添加代码a 并提交 1.1 发现此次提交内容有误 又不想产生两条提交记录 先 git add . gi…

[Vulnhub] DC-4

下载链接&#xff1a;https://download.vulnhub.com/dc/DC-4.zip 同DC-3 这个靶机也是只有一个flag。 全面信息搜集hydra爆破登录和ssh密码teehee命令(写入文件内容)提权/etc/passwd & /etc/sudoers 文件利用 目录 <1> 信息搜集 <2> hydra爆破登录密码 <…

一道编程劝退题,检测你是否适合干编程

前言大家都知道要想成为一名优秀的开发工程师&#xff0c;需要数学基础好&#xff0c;即你要有很强的逻辑思维能力&#xff0c;这里有一道美国斯坦福大学出的一道逻辑思维的测试题&#xff0c;检测你的逻辑思维能力&#xff0c;大家可以看看自己逻辑能力怎么样。题目有一个抽奖…

bug解决:Uncaught (in promise) TypeError: Toast.loading is not a function

在使用vue3做项目时&#xff0c;在其中使用了vant框架&#xff0c;在使用toast的加载组件或者是一些其他组件时&#xff0c;出现了如下的错误&#xff1a;Uncaught (in promise) TypeError: Toast.loading is not a function错误代码如下&#xff1a;Toast.loading({ message: …

C技能树-判断语句

三个数从小到大排序并输出 任意输入3个整数&#xff0c;使用if语句对这3个整数由小到大进行升序排序。请判断下面哪一项无法实现该功能。 #include <stdio.h>/* 交换x和y */ void swap(int* x, int* y) {int temp *x;*x *y;*y temp; }int main(int argc, char** arg…

springboot 入门

springboot是什么 传统的开发模式下&#xff0c;无论是基于xml或注解&#xff0c;都要做许多配置&#xff0c;如果项目中集成越多的其他框架&#xff0c;配置内容也会越多。为了让开发人员以最少的配置去开发应用&#xff0c;springboot诞生了。springboot的原则是约定大于配置…

untiy TextMeshPro(简称TMP)组件详细内容

首先unity官方API对该组件的描述是&#xff1a; TextMeshPro 是 Unity 的最终文本解决方案。它是 Unity UI Text 和旧版 Text Mesh 的完美替代方案。 功能强大且易于使用的 TextMeshPro&#xff08;也称为 TMP&#xff09;使用高级文本渲染技巧以及一组自定义着色器&#xff1b…

Android 蓝牙开发——Avrcp协议(十二)

SDK路径&#xff1a;frameworks/base/core/java/android/bluetooth/ 服务路径&#xff1a;packages/apps/Bluetooth/src/com/android/bluetooth/ 在使用协议类的时候无法找到该类&#xff0c;由于安卓源码中关于蓝牙协议的 Client 部分或相关接口都被 hide 给隐藏掉了&#xf…