题目链接

小红浏览论坛

题目描述

小红在浏览一个有 个帖子的论坛。每个帖子都有一个点赞数 和一个反对数 。给定一个整数阈值 ,小红只喜欢阅读那些点赞数与反对数之差的绝对值大于等于 的帖子(即 )。请问在这 个帖子中,有多少个是小红喜欢阅读的?

解题思路

本题的解法非常直接,属于基础的计数问题。我们只需要根据题目给定的条件,逐一检查每个帖子,并统计满足条件的帖子数量即可。

算法步骤如下:

  1. 初始化:创建一个计数器变量,例如 count,并将其初始值设为 0。
  2. 读取输入:读取帖子的总数 和阈值
  3. 遍历与判断:循环 次,每次循环处理一个帖子。
    • 在循环内部,读取当前帖子的点赞数 和反对数
    • 使用 if 语句判断是否满足条件 。在编程中,这通常通过 abs(a - b) >= x 来实现。
    • 如果条件成立,则将计数器 count 的值加 1。
  4. 输出结果:循环结束后,count 的值就是小红喜欢阅读的帖子总数,将其输出即可。

代码

#include <bits/stdc++.h>
#include <cmath>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n, x;
    cin >> n >> x;

    int liked_posts_count = 0;
    for (int i = 0; i < n; ++i) {
        int a, b;
        cin >> a >> b;
        if (abs(a - b) >= x) {
            liked_posts_count++;
        }
    }

    cout << liked_posts_count << endl;

    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int x = sc.nextInt(); 

        int likedPostsCount = 0;
        for (int i = 0; i < n; i++) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            if (Math.abs(a - b) >= x) {
                likedPostsCount++;
            }
        }

        System.out.println(likedPostsCount);
    }
}
import sys

def solve():
    n, x = map(int, sys.stdin.readline().split())
    
    liked_posts_count = 0
    for _ in range(n):
        a, b = map(int, sys.stdin.readline().split())
        if abs(a - b) >= x:
            liked_posts_count += 1
            
    print(liked_posts_count)

solve()

算法及复杂度

  • 算法:线性扫描
  • 时间复杂度:,其中 是帖子的总数。我们对每个帖子只进行一次判断。
  • 空间复杂度:,我们只需要常数级别的额外空间来存储计数器和当前帖子的数据。