首页 > 其他分享 >P8814(CSP-J2022T2)题解

P8814(CSP-J2022T2)题解

时间:2022-11-06 12:12:52浏览次数:76  
标签:J2022T2 P8814 pq 正整数 ed ll mid 题解 check

题意:给定一个正整数 k,有k 次询问,每次给定三个正整数 n, e, d,求两个正整数 p, q,使 n = p × q且e × d = (p − 1) × (q − 1) + 1。

思路:通过题意可以发现,ed = pq - p - q + 1 + 1。

则ed = pq - p - q + 2

ed = n - p - q + 2

p + q = n - ed + 2

那么我们知道了p + q = n - ed + 2和pq = n两个条件就可以二分啦!(二分实际上就是根据用铁丝围成一个矩形,长宽之差越大,面积越小,长宽之差越小,面积越大的原理,长宽即是 pq)。

代码:

#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
ll n,e,d,m;
bool check(ll x)//check函数
{
    ll a=x,b=m-x;
    if(a*b<n)//如果大了
    {
        return 1;
    }
    else//如果小了
    {
        return 0;
    }
}
void solve()
{
    scanf("%lld %lld %lld",&n,&e,&d);
    m=n-e*d+2;
    ll l=0,r=m;
    while(l<=r)//二分
    {
        ll mid=(l+r+1)>>1;
        if(check(mid))
        {
            l=mid+1;
        }
        else
        {
            r=mid-1;
        }
    }
    for(ll i=l-5;i<=l+5;i++)//为了AC而扩大了范围
    {
        if(i<=0)
        {
            continue;
        }
        if(n%i==0&&(n/i)==(m-i))
        {
            printf("%lld %lld\n",min(i,m-i),max(i,m-i));
            return;
        } 
    }
    printf("NO\n");
    return;
}
int main()
{
    ll q;
    scanf("%lld",&q);
    while(q--)
    {
        solve();
    }
    return 0;
}

  

标签:J2022T2,P8814,pq,正整数,ed,ll,mid,题解,check
From: https://www.cnblogs.com/blacktee/p/CSP-J2022T2.html

相关文章

  • AtCoder Beginner Contest 276 A~G 题解
    今天凌晨CFD题差一句判断AC,晚上ABCG题把插板法和快速幂搞混差点AC。事不过三,再这样一次我直接紫砂。太简单的题就不放翻译和代码了。(事实上这场A-E都是大水题......
  • 个人比赛实况和题解
    CodeforcesCF1740:实况:https://pan.baidu.com/s/1BYjUp2Atvqkpqe3jVogPTQ(提取码:1104);题解:https://www.cnblogs.com/lucius7/p/16861747.html。AtCoderabc275:实况:https://p......
  • 洛谷P8757 [蓝桥杯 2021 省 A2] 完美序列 题解
    思路为使描述方便,先令题目描述中的“完美序列”反转(即序列单调递增且每一个数都是上一个数的倍数)。原“完美序列”与反转后的本质相同。先考虑最大长度。显然,当完美序列......
  • 洛谷P8775 [蓝桥杯 2022 省 A] 青蛙过河 题解 贪心+二分答案
    题目链接​​https://www.luogu.com.cn/problem/P8775​​题目大意小青蛙住在一条河边,它想到河对岸的学校去学习。小青蛙打算经过河里的石头跳到对岸。河里的石头排成了一条......
  • 洛谷-P8814 题解
    前言蒟蒻感叹!许多大佬的思路真的很复杂,于是为了部分没学过的人写了这篇题解(其实就是为了咕值),值得一看!正文♦算法:式子推导从题中可得\(\begin{cases}n_i=p_i\times......
  • 「题解报告」[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......