清华大学机试 剩下的树 Easy *贪心的区间思想

基本思想:

自己想到了贪心区间里面进行区间排序的思想;

但是还有一种更简单的,直接进行构建一个标记数组,然后按个数进行标记即可;

关键点:

注意区间包含问题;

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

struct node {
    int st;
    int ed;
};

int n, m;

vector<node>vec;
vector<node>res;

bool cmp(node a, node b) {
    return a.st < b.st;
}

int main() {
    while (cin>>n>>m){
        node no;
        for (int i = 0; i < m; i++) {
            cin >> no.st >> no.ed;
            vec.push_back(no);
        }
        sort(vec.begin(), vec.end(), cmp);
        int s = vec[0].st;
        int e = vec[0].ed;
        for (int i = 1; i < vec.size(); i++) {
            if (vec[i].st <= e&&vec[i].ed>e) {
                //可以进行衔接;
                e = vec[i].ed;
            }
            else if(vec[i].st>e){
                //不可以进行衔接;
                no.st = s;
                no.ed = e;
                res.push_back(no);
                s = vec[i].st;
                e = vec[i].ed;
            }
        }
        //装入最后的节点;
        no.st = s;
        no.ed = e;
        res.push_back(no);
        //进行数据枚举遍历;
        int cnt = 0;
        for (int i = 0; i < res.size(); i++) {
            cnt += res[i].ed - res[i].st + 1;
        }
        cout << n+1 - cnt << endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/songlinxuan/p/12404307.html

时间: 2024-11-03 08:44:59

清华大学机试 剩下的树 Easy *贪心的区间思想的相关文章

清华大学机试 反向输出 Easy

基本思想: 无: 关键点: 无: #include<iostream> #include<vector> #include<algorithm> #include<string> #include<cmath> #include<set> using namespace std; int main() { string s; while (cin >> s) { for (int i = s.size() - 1; i &

清华大学机试 球的半径和体积 Easy

基本思路: 无: 关键点: 无: #include<iostream> #include<vector> #include<algorithm> #include<string> #include<cmath> #include<set> #include<map> using namespace std; int main() { double x0, y0, z0; double x1, y1, z1; while (

清华大学机试 最大最小值 Easy

基本思想: 无: 关键点: 无: #include<iostream> #include<vector> #include<algorithm> #include<string> #include<cmath> #include<set> #include<map> using namespace std; const int maxn = 10010; int ma[maxn]; int main() { int n;

清华大学机试 特殊乘法 Easy

基本思想: 无: 关键点: 无: #include<iostream> #include<vector> #include<string> using namespace std; int charge(string a, string b) { int cnt=0; for (int i = 0; i < a.size(); i++) { for (int j = 0; j < b.size(); j++) { cnt += int(a[i] - '0')

北京大学机试 首字母大写 Easy *注意空格还包括制表符

基本思想: 其实如果只有空格完全可以stringstream来做: 关键点: 无: #include<iostream> #include<vector> #include<string> #include<sstream> using namespace std; int main() { string s; while (getline(cin, s)) { if (s[0] >= 'a'&&s[0] <= 'z') s[0]

机试指南hash的应用练习题2剩下的树

题目描述 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,...,L共L+1个位置上有L+1棵树.     现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树.     可能有M(1<=M<=100)个区间,区间之间可能有重叠.现在要求移走所有区间的树之后剩下的树的个数. 输入描述:     两个整数L(1<=L&l

清华大学软件2014机试

清华大学软件2014机试 By 钟桓 9月 24 2014 更新日期:9月 24 2014 今天刚刚机试完,乘者还没忘记,把自己知道的记下来,也算是泽被后来人吧~~~ 这次的机试题,相对来说,会更简单一点,总共3题,时间是3小时. 1 超级幸运数 题目大致描述: 一个数字,若是只含有1和4,这个数字就是幸运数,例如,14,114.但是514这样的就不是了,因为含有其它数字. 若这个幸运数字中,1和4的数量相同,那么就是超级幸运数,例如14,1144,41等等. 题目要求,输入一个n,n的范围是[

清华大学软件2016机试

机试完几天了,两个月的准备就是为了这三小时的三道题,趁着没忘记,把题目贡献出来,也算是继承学长的光荣传统,泽被后人吧! 1.大数乘法 先输入一个数字m,表示后面将输入m个数,接着输入m个0到9的数,以空格隔开(至少有一个不为0),这些数可构成一个十进制数a, a的三次方为数b, 求b的各个位的数字,输出时以空格隔开,不要输出多余的空格. 输入示例: 4 1 2 3 4 输出示例: 1 8 7 9 0 8 0 9 0 4 思路:题目不难,用大数乘法做之  2.最短时间 给一个有向图,图的各个顶点的

华为校招机试—传送门

华为机试-多个数的最大公约数 华为机试-算日期 华为机试-拼音翻译成阿拉伯数字(只有数字拼音) 华为机试-拼音翻译成阿拉伯数字(有Wan,Qian,Bai,Shi单位) 华为机试-输出大写字母 华为机试-亮着电灯的盏数(优化过的双重for) 华为机试-从考试成绩中划出及格线 华为机试-亮着电灯的盏数(1-N完全平方数的个数) 华为机试-大数相减 华为机试-姓名的夫妻相 华为机试-元素按奇偶排序 (金字塔) 华为机试-地铁换乘(图文吐血整理) 华为机试-"十七进制"转"十进制&