首页 > 其他分享 >[Codeforces] CF1744E1 Divisible Numbers (easy version)

[Codeforces] CF1744E1 Divisible Numbers (easy version)

时间:2023-12-16 18:12:55浏览次数:28  
标签:Divisible ll mid Codeforces version easy Lcm check

CF1744E1 Divisible Numbers (easy version)

题意

给你四个数 \(a,b,c,d\),你需要找出一组 \(x,y\) 使得 \(a<x\leq c,b<y\leq d\) 并且 \(x\cdot y\) 能被 \(a\cdot b\) 整除,如果没有输出 -1 -1

思路

最暴力的思路肯定是枚举,更肯定的一点是会TLE

但是注意到,如果\(x\)一定,那么他的\(xy\)越大,\(y\)也就越大

换句话说,当\(x\)一定时,\(xy\)和\(y\)呈正比,也就是有单调性

那么考虑二分,即每次枚举\(x\),看看当前情况下能否构造出一个符合条件的\(y\)即可

再来看看细节:

  • 如何二分:

    注意到存在一个\(k\)使得\(\frac{ab}{gcd(ab,x)}\times k=y\),并且\(x\)和\(y\)均符合条件,所以二分\(k\)即可

  • 如何check:

    这道题的check需要分成三种状态:

    1. 符合题目要求

    2. \(y\leq b\)

    3. \(y>d\)

    只需要让他在不同状态下返回值不同即可。

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a,b,c,d,Lcm;
int check(ll i)
{
    ll y=Lcm*i;
    if(b<y && y<=d) return 1;
    else if(y<=b) return 2;
    else return 0;
}
int find(ll x)
{
    ll l,r,mid,ans=0;l=1,r=1e5;
    while(l<=r)
    {
        mid=(l+r)>>1;
        int re=check(mid);
        if(re==1)
        {
            ans=mid*Lcm;
            break;
        }
        else if(re==2) l=mid+1;
        else r=mid-1;
    }
    return ans;
}
void run()
{
    cin>>a>>b>>c>>d;
    for(int i=a+1;i<=c;i++)
    {
        Lcm=a*b/__gcd(a*b,(ll)i);
        if(find(i))
        {
            cout<<i<<" "<<find(i)<<endl;
            return;
        }
    }
    cout<<-1<<" "<<-1<<endl;
}
int main()
{
    int t;
    cin>>t;
    while(t--) run();
}

标签:Divisible,ll,mid,Codeforces,version,easy,Lcm,check
From: https://www.cnblogs.com/lyk2010/p/17905113.html

相关文章

  • ICEE-Microchip-MPLAB X IDE-MCC Plugin + MCC Core + MHC(MCC Harmony Core) versio
    https://microchip.my.site.com/s/article/MPLAB-X-MCC-plugin--MCC-Core-and-MCC-Harmony-Core-versions-and-compatibilityAug17,2023•KnowledgerticleNumber:000014642Title:MPLABXMCCplugin,MCCCoreandMCCHarmonyCoreversionsandcompatibilityArticl......
  • Keil uVersion 4单片机开发指南
    1软件安装双击打开C51V901.exe弹出安装界面,点击Next>>点击同意协议勾选框,接着点击Next>>点击Browse...选择合适的目录,接着点击Next>>按要求填写相关信息,然后点击Next>>软件安装中,等待安装完成点击Finish完成安装2注册激活桌面右键打开KeiluVision4,弹出菜单后选......
  • [Codeforces] CF1740D Knowledge Cards
    CF1740DKnowledgeCards题意有一个\(n\timesm\)的棋盘。现在\((1,1)\)中有一个栈,你可以按照一定的顺序进行出栈操作,每次都可以移动一个卡片到一个相邻的空白位置,但是卡片不能重合。问,能否通过若干次操作,将\((1,1)\)中全部的卡片移动到\((n,m)\)的栈中并使得这个栈按照从栈......
  • [Codeforces] CF1722G Even-Odd XOR
    CF1722GEven-OddXOR题意给定一个正整数\(n\),请你找出一个长度为\(n\)数组\(a\),满足数组是由互不相同的非负且小于\(2^{31}\)的整数组成,并且该数组中奇数项上元素的异或值与偶数项上元素的异或值要相等。思路根据异或的交换律,可以发现:奇偶位异或值相等,那么全局异或值位......
  • CF1784C Monsters (hard version) 题解 线段树
    题目链接:https://codeforces.com/problemset/problem/1784/C题目大意:你面前有\(n\)只怪兽,每只怪兽都有一个初始血量,你可以进行两类操作:操作1:选择任意一个血量大于\(0\)的怪兽,并将它的血量降低\(1\);操作2:将所有存活的怪物的血量各自减去\(1\),如果存在怪物的血量恰好降为......
  • hive Metastore 启动报错 Version information not found in metastore报错处理
    修改conf/hive-site.xml中的hive.metastore.schema.verification 设置为false。 hive Metastore 启动报错 [main]:MetastoreThriftServerthrewanexception...org.apache.hadoop.hive.metastore.api.MetaException:Versioninformationnotfoundinmetastore......
  • CodeForces 838D Airplane Arrangements
    洛谷传送门CF传送门考虑加入第\(n+1\)个位置,这样座位构成了一个环。每个位置被覆盖的概率相等,为\(\frac{m}{n+1}\),然后算出概率再乘方案数就行了。code//Problem:D.AirplaneArrangements//Contest:Codeforces-IndiaHacks2ndElimination2017(unofficial,......
  • Codeforces Round 787 (Div. 3)D. Vertical Paths
    题目链接题意:给定一棵树,将这棵树划分成几天互不相交的链,要求最小化链的数量思路:每个叶子节点一定在一条链中,所以链的数量就是叶子节点的数量,从叶子节点往上跳直到根节点,边跳边标记,路径上所有点都属于这条链。坑:数据大时,不要轻易使用memset不然会t到起飞vector不要开太多就比......
  • Codeforces Round 814 (Div. 2)
    基本情况又是过了ABC。A、B思路更多的是从数据上分析出来的,过的很顺。C经典拿评测机来调试,甚至还RE了一次,最后终于过了。C.FightingTournamentProblem-C-Codeforces第一次改错这题我的思路是找到规律后,优先队列加二分查找。但是一直WA第二个点,这是我一开始的代码:......
  • Codeforces Round 812 (Div. 2)
    基本情况第一次赛时做出div2的ABC。然而B题是秒的最快的?A题卡了一段时间经典+4,C题代码实现卡了一段时间。A.TravelingSalesmanProblemProblem-A-Codeforces卡题分析主要原因在少了特判,没有自己多构造几个特殊情况数据。这是一开始的代码voidsolve(){ intn,......