[蓝桥杯]真题讲解:抓娃娃(思维+二分)

[蓝桥杯]真题讲解:抓娃娃(思维+二分)

一、视频讲解

[蓝桥杯]真题讲解:抓娃娃(思维+二分))

在这里插入图片描述

二、正解代码

1、C++

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int,int> pii;
const int N = 1e5 + 10;
int n, m;

int main()
{
	cin >> n >> m;
	vector<pii>a(n);
	vector<double>b(m);

	for(int i = 0; i < n; i ++) {
		int L, R; cin >> L >> R;
		double mid = (L + R) / 2.0;
		b[i] = mid;
	}
	for(int i = 0; i < m; i ++) {
		cin >> a[i].x >> a[i].y;
	}
	sort(b.begin(), b.end());

	auto check1 = [&](int mid, int i) {
		return b[mid] >= a[i].x;
	};

	auto check2 = [&](int mid, int i) {
		return b[mid] <= a[i].y;
	};

	for(int i = 0; i < m; i ++) {
		int L = a[i].x, R = a[i].y;
		int l1 = 0, r1 = n - 1;
		while(l1 < r1) {
			int mid = l1 + r1 >> 1;
			if(check1(mid, i))
				r1 = mid;
			else
				l1 = mid + 1;
		}
		int l2 = 0, r2 = n - 1;
		while(l2 < r2) {
			int mid = l2 + r2 + 1 >> 1;
			if(check2(mid, i))
				l2 = mid;
			else
				r2 = mid - 1;
		}
		if(b[l1] >= L && b[l2] <= R) {
			cout << l2 - l1 + 1 << endl;
		}else{
      		cout << 0 << endl;
    	}
	}
	return 0;
}

2、python3

n, m = map(int, input().split())
tmp = [list(map(int, input().split())) for _ in range(n)]
b = []
for x, y in tmp:
    b.append ((x + y) / 2.0)

a = [list(map(int, input().split())) for _ in range(m)]

b.sort()

def check1(mid: int, i: int)->bool:
    return b[mid] >= a[i][0]

def check2(mid: int, i: int)->bool:
    return b[mid] <= a[i][1]

for i in range(m):
    L, R = a[i]
    l1, r1 = 0, n - 1
    while l1 < r1:
        mid = (l1 + r1) // 2
        if check1(mid, i):
            r1 = mid
        else:
            l1 = mid + 1
    l2, r2 = 0, n - 1
    while l2 < r2:
        mid = (l2 + r2 + 1) // 2
        if check2(mid, i):
            l2 = mid
        else:
            r2 = mid - 1
    if b[l1] >= L and b[l2] <= R:
        print(l2 - l1 + 1)
    else:
        print(0)

3、Java

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static int n, m;
    public static double[] b;
    public static int[][] a;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        b = new double[n];
        a = new int[n][2];
        for(int i = 0; i < n; i ++) {
            int L = sc.nextInt();
            int R = sc.nextInt();
            double mid = (L + R) / 2.0;
            b[i] = mid;
        }
        for(int i = 0; i < m; i ++) {
            a[i][0] = sc.nextInt();
            a[i][1] = sc.nextInt();
        }
        Arrays.sort(b);
        for(int i = 0; i < m; i ++) {
            int L = a[i][0], R = a[i][1];
            int l1 = 0, r1 = n - 1;
            while(l1 < r1){
                int mid = l1 + r1 >> 1;
                if(check1(mid, i)) {
                    r1 = mid;
                }else{
                    l1 = mid + 1;
                }
            }
            int l2 = 0, r2 = n - 1;
            while(l2 < r2) {
                int mid = l2 + r2 + 1 >> 1;
                if(check2(mid, i)){
                    l2 = mid;
                }else{
                    r2 = mid - 1;
                }
            }
            if(b[l1] >= L && b[l2] <= R) {
                System.out.println(l2 - l1 + 1);
            }else{
                System.out.println(0);
            }
        }
    }
    private static boolean check1(int mid, int i) {
        return b[mid] >= a[i][0];
    }
    private static boolean check2(int mid, int i){
        return b[mid] <= a[i][1];
    }
}

相关推荐

  1. 题解:P9426 [ 2023 国 B] 娃娃

    2024-05-10 11:00:05       33 阅读
  2. web阵营,比高低

    2024-05-10 11:00:05       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 11:00:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 11:00:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 11:00:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 11:00:05       18 阅读

热门阅读

  1. 替换掉Springboot框架中的Tomcat,使用undertow

    2024-05-10 11:00:05       16 阅读
  2. https忽略ssl证书校验

    2024-05-10 11:00:05       9 阅读
  3. STM32 定时器最佳分频

    2024-05-10 11:00:05       9 阅读
  4. npm i 与npm install的区别,接上回的npm ERR! code 128

    2024-05-10 11:00:05       12 阅读
  5. 木钻:muzuan.cn

    2024-05-10 11:00:05       11 阅读