• CodeForces 589F Gourmet and Banquet


    给你N(1<=N<=100)个区间 l-r 求最大的子区间大小使每个区间都有这个子区间且覆盖不重复

    做法 输入的时候纪录区间最大值 然后二分求答案 

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define MAXN 101
    #define MAX 10001
    #define IMAX 2147483647
    struct DISH{int a,b;}a[MAXN];
    int N,Left=0,Right=0,ans=0;
    bool vis[MAX];
    bool cmp(DISH X,DISH Y){return X.b<Y.b;}
    bool check(int time_per_dish)
    {
        memset(vis,false,sizeof(vis));
        for(int i=1;i<=N;i++)
        {
              if(a[i].b-a[i].a<time_per_dish)   return false;
              int occupy=0;
              for(int j=a[i].a;j<a[i].b;j++)
                      if(!vis[j])//vis[j]表示j->j+1的时间是否被占用 
                      {
                            occupy++;
                            vis[j]=true;
                            if(occupy==time_per_dish)   break;
                    }
              if(occupy<time_per_dish)   return false;
        }
        return true;
    }
    int main()
    {
    #ifndef ONLINE_JUDGE 
          freopen("input.txt","r",stdin); 
          freopen("output.txt","w",stdout); 
    #endif 
        scanf("%d",&N);
        for(int i=1;i<=N;i++)
        {
              scanf("%d%d",&a[i].a,&a[i].b);
              Right=max(Right,a[i].b-a[i].a);
        }
        sort(a+1,a+1+N,cmp);
        while(Left<=Right)
        {
              int middle=(Left+Right)>>1;
              if(check(middle))
              {
                      Left=middle+1;
                      ans=max(middle,ans);
              }
              else  Right=middle-1;
              
        }
        printf("%d
    ",ans*N);
        return 0;
    }
     
  • 相关阅读:
    jquery操作删除元素
    js添加页面元素
    jQuery方法
    form表单的几种提交方式
    Comparable和Comparator
    快速失败和安全失败
    Junit 测试基础
    Spring 之AOP 面向切面编程
    spring 的核心接口
    Nginx
  • 原文地址:https://www.cnblogs.com/Aragaki/p/7134941.html
Copyright © 2020-2023  润新知