zoukankan      html  css  js  c++  java
  • 2372: 给牛照相

    2372: 给牛照相

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 40  解决: 8
    [提交][状态][讨论版][命题人:外部导入]

    题目描述

    农夫约翰想给他的N (2 <= N <= 1,000,000,000) 头牛照相,这些牛站成一排分别编号为1..N。每张照片可以拍摄连续的一些牛,并且约翰想让每头牛至少出现在一张照片上。
    不幸的是有一些牛脾气不合,不想出现在同一张照片上,不合的牛有K(1 <= K <= 1000)对。给出这K对不合关系,算一下约翰最少需要拍多少张照片。

    输入

    第1行,两个整数N和K
    第2到K+1行,每行两个数A和B,表示位置在A和B的两头牛不合,因此不能在同一张照片中。

    输出

    一个整数,表示约翰最少需要拍多少张照片数。

    样例输入

    7 3
    1 3
    2 4
    5 6

    样例输出

    3

    提示

    约翰需要拍3张照片。

    第一张拍1-2号牛

    第二张拍3-5号牛

    第三张拍6-7号牛
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    struct s
    {
        int a1;
        int a2;
    }a[1010];
    bool cmp(const s & a, const s & b)
    {
        return a.a1 < b.a1;
    }
    int main()
    {
        int n, k, x, y;
        cin >> n >> k;
        for(int i = 0; i < k; ++i)
        {
            cin >> x >> y;
            a[i].a1 = x > y ? y : x;
            a[i].a2 = x > y ? x : y;
        }
        sort(a, a + k, cmp);
        int t = 0, sum = 1;
        int flag1, flag2;
        for(int i = t; i < k; i = t)
        {
            flag1 = a[i].a1;
            flag2 = a[i].a2;
            for(int j = i + 1; j < k; ++j)
            {
                if(a[j].a1 >= flag1 && a[j].a1 <= flag2)
                {
                    flag1 = a[j].a1;
                    flag2 = a[j].a2 > flag2 ? flag2 : a[j].a2;
                    t = j;
                }
            }
            t++;
            sum++;
        }
        cout << sum << endl;
        return 0;
    }
    

      

  • 相关阅读:
    在vue.js中mixin和页面执行顺序问题
    【转载】Node.js 教程(菜鸟教程系列)
    【转载】一致性hash算法释义
    多线程还是多进程的选择及区别
    腾讯
    gdb命令与调试方法
    面试题56:链表中环的入口节点
    面试题52:缺少i的乘积数组
    UML类图
    面试题51:数组中重复的数字
  • 原文地址:https://www.cnblogs.com/mjn1/p/9866376.html
Copyright © 2011-2022 走看看