zoukankan      html  css  js  c++  java
  • hiho #1305 区间求差

    #1305 : 区间求差

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    给定两个区间集合 A 和 B,其中集合 A 包含 N 个区间[ A1A2 ], [ A3A4 ], ..., [ A2N-1A2N ],集合 B 包含 M 个区间[ B1B2 ], [ B3B4 ], ..., [ B2M-1B2M ]。求 A - B 的长度。

    例如对于 A = {[2, 5], [4, 10], [14, 18]}, B = {[1, 3], [8, 15]}, A - B = {(3, 8), (15, 18]},长度为8。

    输入

    第一行:包含两个整数 N 和 M (1 ≤ NM ≤ 100000)。

    第二行:包含 2N 个整数 A1A2, ..., A2N (1 ≤ Ai ≤ 100000000)。

    第三行:包含 2M 个整数 B1B2, ..., B2M (1 ≤= Bi ≤ 100000000)。

    输出

    一个整数,代表 A - B 的长度。

    样例输入
    3 2
    2 5 4 10 14 18
    1 3 8 15
    样例输出
    8


     1 #include"iostream"
     2 #include"algorithm"
     3 #include"cstring"
     4 #define MAX 400001
     5 using namespace std;
     6 
     7 
     8 struct point
     9 {
    10     int x;
    11     int state;
    12 };
    13 
    14 point nn[MAX];
    15 
    16 bool cmp(point p1, point p2)
    17 {
    18     return p1.x < p2.x;
    19 }
    20 
    21 int main()
    22 {
    23     int n, m;
    24     int start, len=0;
    25     int A = 0, B = 0;
    26     cin >> n >> m;
    27 
    28     for (int i = 0; i < 2 * n; i += 2)
    29     {
    30         cin >> nn[i].x;
    31         nn[i].state = 0;
    32         cin >> nn[i + 1].x;
    33         nn[i + 1].state = 1;
    34     }
    35 
    36     for (int i = 2*n; i < 2 * (n+m); i += 2)
    37     {
    38         cin >> nn[i].x;
    39         nn[i].state = 2;
    40         cin >> nn[i + 1].x;
    41         nn[i + 1].state = 3;
    42     }
    43 
    44     n = 2 * (n + m);
    45     sort(nn, nn + n, cmp);
    46 
    47     for (int i = 0; i<n; i++)
    48     {
    49         switch (nn[i].state)
    50         {
    51         case 0:
    52             if (!B && !A)
    53                 start = nn[i].x;
    54             A++;
    55             break;
    56         case 1:
    57             A--;
    58             if (!B && !A)
    59                 len += nn[i].x - start;
    60             break;
    61         case 2:
    62             if (A && !B)
    63                 len += nn[i].x - start;
    64             B++;
    65             break;
    66         case 3:
    67             B--;
    68             if (A && !B)
    69                 start = nn[i].x;
    70             break;
    71         }
    72     }
    73 
    74     cout << len;
    75 
    76     return 0;
    77 }
  • 相关阅读:
    一定要在3 20前完成所有的程序开发工作
    浅谈图像处理方向的就业前景[转)
    期待牛人指教的问题?
    vc6 7工程转vc8时的问题
    今天的工作计划
    定点数与浮点数区别
    difference between texRECT and tex2D
    Render to Texture
    不明白gluperpective的fovy参数
    批处理程序教程(转)
  • 原文地址:https://www.cnblogs.com/SeekHit/p/5565009.html
Copyright © 2011-2022 走看看