首页 > 其他分享 >时代的眼泪:CF1562A The Miracle and the Sleeper 题解 2021-09-23 23:00:33

时代的眼泪:CF1562A The Miracle and the Sleeper 题解 2021-09-23 23:00:33

时间:2023-05-27 19:45:38浏览次数:45  
标签:CF1562A 23 int 题解 void 样例 答案 1000000000

CF1562A The Miracle and the Sleeper 题解

笑死, 晚上熬夜打CF比赛只过了A题还加了CF值 !?

由于本人太弱,这道橙题都干了1h

题目描述

有 \(T\) 组数据,
给出一个区间\([l,r]\),在这个区间中选择2个数a,b,使它们a % b的值最大.

注意: \(l \le r \le 10^9\), \(T \le 10^3\)

解题步骤

暴力

CZC : 暴力优化一下就是正解了

这道题暴力时间复杂度是 \(O(n^2)\) 一定是会超时的,但我们也要先敲暴力,把该拿的分都拿了(虽然CF不计分只记做题数量),我们可以得到下面这一段代码

inline void test(int a,int b) {
    int ans=-100;
    for(int i=a;i<=b;i++) for(int j=a;j<i;j++) {
        cout<<"i="<<i<<" j="<<j<<" i%j="<<i%j<<endl;
        ans=max(ans,i%j);
    }
    printf("%d\n",ans);
}

然后直接样例爆炸

由于有输出调试,我们可以很快的发现规律 : 仿佛都是线性上升的,每次增加2

在一些情况下直接

cout << ((b - 1) << 1);

答案也是正确的。 比如会超时的那个样例

在进行深入的研究就会发现答案的 \(a\) 都是 这个区间的最大值。

对于暴力的代码我们只用看 \(a\) 就可以了

inline void test(int a,int b) {
    int ans=-100;
    for(int i=b,j=a;j<i;j++) {
        cout<<"i="<<i<<" j="<<j<<" i%j="<<i%j<<endl;
        ans=max(ans,i%j);
    }
    printf("%d\n",ans);
}

积累一下经验就可以思考一下正解了

正解

其实我也是思考了很久才想到正解,丢人

我们可以分析一下极端样例

1 1000000000

怎样 \(%\) 才能让结果最大呢?

分类讨论

我们可以把 \(1 ~ 1000000000\) 分成2段。

1 500000000
50000001 1000000000

好像这两段的答案都有共同之处。

我们可以发现最大的值其实是

499999999

其实就是 1000000000 % 500000001

同时用含有 b 的式子表示就是

\[(b - 1) / 2 \]

但有一些样例不符合这个规律 比如:

99999999 1000000000

那这个答案又是什么呢?

慢慢的探索我们发现越接近 \(r / 2\) 模数越大,所以最后的答案是中间的部分,这种情况也可以这样想, 既然答案在中间,这里的区间已经不包含中间了,那答案是不是就应该为
b % a

Code

// QOJ没有这道题, 别找了!
#include<bits/stdc++.h>
using namespace std;
int T,a,b;
inline void test(int a,int b) {
    int ans=-100;
    for(int i=b,j=a;j<i;j++) {
        cout<<"i="<<i<<" j="<<j<<" i%j="<<i%j<<endl;
        ans=max(ans,i%j);
    }
    printf("%d\n",ans);
}
inline void solve(){
    scanf("%d%d",&a,&b);
    //test(a,b);
    if(a<=b/2)return (void)printf("%d\n",b-1>>1);
    return (void)(printf("%d\n",b%a));
}
int main(){
    scanf("%d",&T);
    while(T--)solve();
    return 0;
} 

标签:CF1562A,23,int,题解,void,样例,答案,1000000000
From: https://www.cnblogs.com/Zheng-XiangYu/p/17437216.html

相关文章

  • #296. 最强大脑 题解
    2021-09-2222:16:56星期三#296.最强大脑题解这是一道非常简单的bfs水题。。。。但是为什么没有人做呢?难道是因为网上搜不到?理解题意:输入为2个n*m大小矩阵。第一个矩阵表示每个点的分数值,第二个矩阵则表示这个点是否是特殊点(1&0)这里规定了一种移动方式,你可......
  • #295. 「BJWC2010」矩阵距离 题解 2021-09-23 21:42:32
    #295.「BJWC2010」矩阵距离又是一道需要真正思考了才可以做出来的水题。题目描述给出一个N*M的01矩阵,输出每个0到离这个点最近的1的距离。思考历程暴力由于$N\le10^3$如果在赛场上出现这个题,我们优先考虑暴力。暴力也是很简单,从每个为0的点出发bfs找到与最近的......
  • 第三届里奇杯编程大赛(初赛)题解(正在更新文字解释)
    A.签到签到题,直接输出即可。#include<bits/stdc++.h>usingnamespacestd;intmain(){ cout<<"HelloLiqicontest"; return0;}B.挂科读取到每个人的成绩后,判断符合挂科条件(分数$<p$)就\(res\)增加一位同学。#include<iostream>#include<algorithm>......
  • 230526 // 小数论复习
    裁决已至!称量,你的罪恶!以此身,肃正万象!人总是越活越抽象的,所以怎么还不考期末,我要考期末!A.Minhttp://222.180.160.110:1024/contest/3641/problem/1给出\(n\)个数\(A_{1\simn}\),现求一组整数序列\(X_{1\simn}\)使得\(S=A_1\timesX_1+A_2\timesX_2+\cdots......
  • C语言课程设计[2023-05-27]
    C语言课程设计[2023-05-27]C语言课程设计综合性设计实验说明设计要求:(1)功能完备,实现用户需求(2)用户界面友好易用(3)必须调试通过,能够正常运行(4)驼峰命名、合理注释、模块化程序功能实现等规范化编程(5)保证源程序可读性。对系统常量等数据要求规范处理,对于常用......
  • c++模板的引用类型参数折叠问题解释
    template<typenameT>voidf1(T&);实参可以是左值、const类型的左值,不能是右值。f1(i);  //正确,i是int型,T是intf1(c); //正确,i是constint型,T是constintf1(5); //错误 template<typenameT>voidf1(constT&);实参可以是左值、const类型的左值、......
  • 题解 P5597【【XR-4】复读】
    一道好题!挺对我脑回路的,于是秒掉了,来写个题解。下文称执行一遍指令的过程为一个周期。例如指令是LRU,那么LRULRULRULRU共执行了四个周期。看到平方的数据范围,不难想到枚举第一个周期的终点。作为一台优秀的复读机,我们知道每个周期在树上发生的相对位移是相同的。例如,如下的一......
  • 2023华为伙伴大会:ISDP发布伙伴体验中心,邀伙伴探索数智化未来
    近日,2023年华为中国合作伙伴大会于深圳国际会展中心(宝安)圆满落幕。本次大会向来自全国各个领域的1.6万多名华为新老朋友,提供一个面对面开放交流、自我展示的舞台。此次大会煤亮子、软通动力、中软国际、易宝、全采智能等多家ISDP的新老伙伴出席,一起交流行业发展与下一步合作。其中......
  • 未授权访问漏洞检测工具(CVE-2023-29922)
    ===================================免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。0x01工具介绍PowerJob<=4.3.2......
  • APIO2023 游记
    GDOI和GDKOI的游记都咕咕咕了,而且都炸了,APIO的游记提前发,就是要破釜沉舟。我是线上选手。Day-7我们原题检测,阿克了,毕竟是原题,虽然有两道博弈论黑题确实挺毒瘤的。教练让我做APIO2012的原题,第一题一开始的思路有点小问题,不过发现是启发式合并就很简单了,切了。第二题感......