zoukankan      html  css  js  c++  java
  • Network Coverage

    Network Coverage

     

     题意:有 (n) 个城市围成一圈,第 (i) 个城市有 (a_{i}) 个网络需求,每个城市建有一个网络站,第 (i) 个城市的网络站可以提供 (b_{i}) 个网络需求;且 第 (i) 个城市的网络站只能提供需求给第 (i)和 (i+1) 个城市 (left ( n+1=1 ight )),是否存在合理分配使得所有城市的所有需求都被满足

    解题思路

    当一个城市的网络站的提供给第一个城市的设备数(left ( 这里假设分了x个 ight ))确定之后 , 剩下的城市就可以通过贪心来分配;

    (x) 越大 , 第 (2到n) 个城市可能被分配的个数就会减少,可能会造成断流,某个城市得不到足够的分配

    (x)如果太小的话,第 (n) 个城市网络站给第一个城市分配的设备数加上 (x) 就可能小于 (a_{1}) ,

    所以(x)必须是在一定范围内的,那么我们就可以二分(x),

    当第 (2到n) 个城市不够分配时 , 我们让 r= mid - 1

    当第 (n) 个城市网络站给第一个城市分配的设备数 + (x) < (a_{1}) 时 ,l = mid + 1

    AC_Code:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 1e6+5;
     5 
     6 int n,a[maxn],b[maxn];
     7 
     8 int judge(int mid){
     9     int pre=b[1]-mid;
    10     for(int i=2;i<=n;i++){
    11         int f=a[i]-pre;
    12         f=max(0,f);//有可能pre比a[i]多,但是pre多出来的不能再用了;
    13         int ff=b[i]-f;
    14         pre=ff;
    15         if( pre<0 ) return -1;//中间断流了,第一个分多了
    16     }
    17     if( pre+mid<a[1] ) return 0;//第一个分少了
    18     else return 1;
    19 }
    20 
    21 int main()
    22 {
    23     ios::sync_with_stdio(false);
    24     int t;
    25     cin>>t;
    26     while( t-- ){
    27         cin>>n;
    28         for(int i=1;i<=n;i++) cin>>a[i];
    29         for(int i=1;i<=n;i++) cin>>b[i];
    30         int l=0,r=b[1],flag=0;
    31         while( l<=r ){
    32             int mid=(l+r)>>1;
    33             if( judge(mid)==-1 ) r=mid-1;
    34             else if( judge(mid)==0 ) l=mid+1;
    35             else{
    36                 flag=1;
    37                 break;
    38             }
    39         }
    40         if( !flag ) cout<<"NO
    ";
    41         else cout<<"YES
    ";
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    javascript 创建节点和新增节点
    javascript 操作节点的属性
    javascript window对象常用方法
    为什么要用线程池?
    一个request请求然后锁定等待异步接口处理结果
    双端队列实现串行处理实现并发
    线程池创建线程的方式一定效率高吗?
    PriorityBlockingQueue 和 Executors.newCachedThreadPool()
    核心记账业务可用jdk7的PriorityBlockingQueue优先阻塞队列结合乐观锁实现
    对spring、AOP、IOP的理解 (转)
  • 原文地址:https://www.cnblogs.com/wsy107316/p/13272290.html
Copyright © 2011-2022 走看看