【研路导航】揭秘北航复试上机题,2018年最全解析与高效解题技巧

欢迎来到【研路导航】 栏目!在这里,我们汇集了各种实用的保研干货,包括面试技巧、时间规划、备考方法等。这里不仅有详细的策略分享,还有经验丰富的专家和学长学姐们为你解读和分析每个关键步骤。

更多保研,夏令营,预推免与信息时间节点资讯可以在文章末尾领取!

在这里插入图片描述

写在前面

今天我们来解析一下 2018 年北航的复试上机试题。希望能帮助大家更好地理解和应对类似的题目。

01 二维空间线段连通问题

在二维空间中给定一定数量的线段,线段的右端点的横坐标必然比左端点的横坐标大。输入 n(n < 10000),表示一共有 n 条线段。之后输入 n 行,每一行依次输入左端点的横、纵坐标,右端点的横、纵坐标;一些线段可以连在一起,规定连接的规则只能是一条线段的左端点和另一条线段的右端点相连。要求输出连在一起的大线段最多有多少条线段,以及最大线段起点(左端点)的横、纵坐标。输入的数据规模不会超过 int 型变量范围。

02 代码及解析

这道题可以使用贪心算法解决。关键在于按起点(左端点)的横坐标排序,然后递归枚举每条线段来判断能连接的线段数。

Step 1: 定义数据结构和变量

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

const int maxn = 10010; // 定义最大线段数量
int cnt[maxn], temp = 0; // cnt数组用于存储每个线段的连通数量,temp用于临时存储连通数量
int n, s, t; // n为线段数量,s和t为暂存变量

struct line {
   
   
    int sx, sy, tx, ty; // 定义线段的起点和终点坐标
}l[maxn];

在这部分代码中,我们定义了一些全局变量和一个 line 结构体来存储每个线段的信息。cnt 数组用于存储每个线段的连通数量。

Step 2: 检查线段是否连通

void check(int i, int now) {
   
    
    for(int j = now + 1; j < n; j++) {
   
   
        if(l[j].sx == l[now].tx && l[j].sy == l[now].ty) {
   
    // 若此时重合
            temp++;
            check(i, j);
            temp--;
        } else if(l[j].sx > l[now].tx) {
   
    // 因已按横坐标排序,此句用于加速判断,可以不写
            return;
        }
    }
    if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值