• poj 1716 Integer Intervals


    Description

    An integer interval [a,b], a < b, is a set of all consecutive integers beginning with a and ending with b. 
    Write a program that: finds the minimal number of elements in a set containing at least two different integers from each interval.

    Input

    The first line of the input contains the number of intervals n, 1 <= n <= 10000. Each of the following n lines contains two integers a, b separated by a single space, 0 <= a < b <= 10000. They are the beginning and the end of an interval.

    Output

    Output the minimal number of elements in a set containing at least two different integers from each interval.

    Sample Input

    4
    3 6
    2 4
    0 2
    4 7
    

    Sample Output

    4

    以前做的是选一个点,这个题是选两个点,不过做法都一样,都是选区间最后两个点
    #include<iostream>
    #include<cstdio>
    #include<map>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #include<vector>
    #include<set>
    
    using namespace std;
    const int maxn=10000+10;
    
    struct node
    {
              int x,y;
    }a[maxn];
    bool vis[maxn];
    
    bool cmp(node xx,node yy)
    {
              return xx.y<yy.y;
    }
    
    int main()
    {
              int n;
              while(scanf("%d",&n)!=EOF)
              {
                        for (int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
                        sort(a+1,a+n+1,cmp);
                        memset(vis,0,sizeof(vis));
                        vis[a[1].y]=1;
                        vis[a[1].y-1]=1;
                        int ans=2;
                        for (int i=2;i<=n;i++)
                        {
                                  int m=0;
                                  for (int j=a[i].x;j<=a[i].y;j++)
                                  {
                                            if (vis[j]) m++;
                                            if (m==2) break;
                                  }
                                  if (m==0)
                                  {
                                            vis[a[i].y]=1;
                                            vis[a[i].y-1]=1;
                                            ans+=2;
                                  }
                                  if (m==1)
                                  {
                                            vis[a[i].y]=1;
                                            ans++;
                                  }
                        }
                        printf("%d
    ",ans);
              }
              return 0;
    }
  • 相关阅读:
    杨中科 向HtmlAgilityPack道歉:解析HTML还是你好用
    感觉这个JQuery不错,查询方便
    数据库异步操作
    Command 设计模式
    osg 细节裁剪 SAMLL_FEATURE_CULLING
    errno错误代码
    清空std::stringstream
    eclipse android javabuilder +CDTbuilder
    mfc c++ system调用 控制台窗口
    Androidndkr8e wordlist 第二个参数不是数值参数
  • 原文地址:https://www.cnblogs.com/chensunrise/p/3791078.html
Copyright © 2020-2023  润新知