数对

数对

https://www.nowcoder.com/practice/bac5a2372e204b2ab04cc437db76dc4f

题目难度:三星
考察点:数学、枚举

方法1:暴力算法

  1. 分析:
    从1-n挨个枚举x,y,对于每个数对(x,y)判断是否x%y>=k,如果满足条件结果ans++,最后输出ans即可。
  2. 复杂度分析:
    时间复杂度:O(n^2)
    空间复杂度:O(1)
  3. 代码:
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    int main() {
     int n, k; cin>>n>>k;
     int ans = 0;
     for(int x=1; x<=n; x++) {
         for(int y=1; y<=n; y++) {
             if(x%y>=k) ans++;
         }
     }
     cout<<ans<<endl;
     return 0;
    }

方法2: 数学

  1. 分析:
    由于需要满足的条件是 x%y>=k,那么y的取值范围显然属于区间[k+1, n],因为如果y<=k,一定不满足x%y>=k这个必要条件。那么我们就根据y的取值范围进行枚举,即对于每一个y来统计满足x%y>=k条件的个数,将答案记录相加即可。现在的问题是对于某个特定的y如何计算满足条件的个数,由于x属于[1,n]区间,我们在将其划分为若干个小区间如下:
    [1, 2, ..., y]
    [y+1, y+2, ..., 2y]
    [2
    y+1, 2y+2, ..., 3y]
    ...
    [ty+1, ty+2, ..., n]
    其中上述的t=n/y。
    那么对于上述的前t个区间来说,每个小区间对y取模得到的值就是它在小区间中的下标-1,那么在小区间中找到>=k的个数就很好找了,即个数=y-k。举个例子:y=5,k=3:所以一定有如下区间存在:
    [1, 2, 3, 4, 5]
    那么显然x%5>=3的个数为5-3=2个,即4和5两个数,其它小区间同理。
    那么一共有多少个小区间呢?显然有t=n/y个,然后我们在判断最后一个小区间中有多少个>=k的个数,显然为n%y-k+1个,当然也有可能为0个,所以两者取最大值。那么答案显然易见:对于当前枚举的y来说,有多个的x满足x%y>=k的条件。最后我们将y从k+1一直枚举到n,将每个y得到的满足条件的个数相加即可。
    Tips:
    (1) 需要特殊判断当k=0的情况,直接就是n*n。
    (2) 注意结果需要用long long。

  2. 复杂度分析:
    时间复杂度:O(n)
    空间复杂度:O(1)

  3. 代码:

    #include &lt;bits/stdc++.h&gt;
    using namespace std;
    typedef long long LL;
    int main() {
     int n, k; cin&gt;&gt;n&gt;&gt;k;
     if(k == 0) {
         cout&lt;&lt;1ll*n*n&lt;&lt;endl;
         return 0;
     }
     LL ans = 0;
     for(int i=k+1; i&lt;=n; i++) {
         int tmp = (n-n/i*i-k+1);//n-n/i*i == n%i
         if(tmp &lt; 0) tmp = 0;
         ans += 1ll*(i-k)*(n/i)+tmp;
     }
     cout&lt;&lt;ans&lt;&lt;endl;
     return 0;
    }
    

```

全部评论

相关推荐

叁六玖:你看,最后不是让你加油,就是鼓励你,还祝福你求职顺利。
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
正在热议
更多
# 你的mentor是什么样的人? #
3895次浏览 28人参与
# 你觉得mentor喜欢什么样的实习生 #
10253次浏览 284人参与
# 平安产险科技校招 #
2404次浏览 0人参与
# 帮我看看,领导说这话什么意思? #
6110次浏览 25人参与
# 没有家庭托举的我是怎么找工作的 #
12292次浏览 158人参与
# 怎么给家人解释你的工作? #
1371次浏览 16人参与
# 智慧芽求职进展汇总 #
17823次浏览 106人参与
# 求职低谷期你是怎么度过的 #
5208次浏览 91人参与
# 26届秋招公司红黑榜 #
11934次浏览 41人参与
# 从哪些方向判断这个offer值不值得去? #
6545次浏览 93人参与
# 同bg的你秋招战况如何? #
158817次浏览 927人参与
# 度小满求职进展汇总 #
10078次浏览 51人参与
# 实习必须要去大厂吗? #
146625次浏览 1541人参与
# 校招泡的最久的公司是哪家? #
4531次浏览 22人参与
# 你有哪些缓解焦虑的方法? #
37173次浏览 835人参与
# 面试紧张时你会有什么表现? #
1694次浏览 20人参与
# 你喜欢工作还是上学 #
77572次浏览 860人参与
# 入职第一天,你准备什么时候下班 #
85471次浏览 467人参与
# 秋招想进国企该如何准备 #
97706次浏览 487人参与
# 简历无回复,你会继续海投还是优化再投? #
103582次浏览 819人参与
# 机械人的工作环境真的很差吗 #
25014次浏览 119人参与
# 独居后,你的生活是更好了还是更差了? #
28125次浏览 263人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务