传送门

分析

我们设pre[i]为到第i个时段的雇佣员工的总数量,sum[i]表示时段i的可雇佣员工的总数量,r[i]表示时段i所需工人的数量。由此我们不难求出:

0<=pre[i]-pre[i-1]<=sum[i]

pre[i]-pre[i-8]>=r[i],i∈[8,24]

pre[i-8+24]-pre[i]>=lim-r[i],i∈[0,8]

=>这表示熬夜干活,我们在数轴上画一画可以发现可以表示为pre[i]-pre[i-8]>=r[i]-lim,进而可以得到这个式子

pre[24]-pre[0]>=lim

注意这里面的lim表示雇佣的员工的数量上限。

于是我们可以二分解决。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define pb push_back
#define mp make_pair
int r[],sum[],n,d[],vis[],iq[];
vector<pair<int,int> >v[];
queue<int>q;
inline int spfa(int lim){
memset(vis,,sizeof(vis));
memset(d,-0x3f,sizeof(d));
memset(iq,,sizeof(iq));
while(!q.empty())q.pop();
d[]=;
vis[]=;
q.push();
iq[]=;
while(!q.empty()){
int x=q.front();
q.pop();
iq[x]=;
for(int i=;i<v[x].size();i++){
int y=v[x][i].first,z=v[x][i].second;
if(d[y]<d[x]+z){
d[y]=d[x]+z;
if(!iq[y]){
vis[y]++;
if(vis[y]>=)return ;
q.push(y);
iq[y]=;
}
}
}
}
return d[24]==lim;
}
inline int ck(int lim){
int i,j,k;
for(i=;i<;i++)v[i].clear();
for(i=;i<;i++){
v[i-].pb(mp(i,));
v[i].pb(mp(i-,-sum[i]));
}
for(i=;i<;i++)v[i-].pb(mp(i,r[i]));
for(i=;i<=;i++)v[i+].pb(mp(i,r[i]-lim));
v[].pb(mp(,lim));
return spfa(lim);
}
int main(){
int n,m,i,j,k,t,lb,ub;
scanf("%d",&t);
while(t--){
for(i=;i<=;i++)scanf("%d",&r[i]);
scanf("%d",&n);
memset(sum,,sizeof(sum));
for(i=;i<=n;i++){
int x;
scanf("%d",&x);
sum[x+]++;
}
if(ck()){puts("");continue;}
k=,lb=,ub=n;
while(ub-lb>){
int mid=(lb+ub)>>;
if(ck(mid))k=,ub=mid;
else lb=mid;
}
if(k)printf("%d\n",ub);
else puts("No Solution");
}
return ;
}

loj10088 出纳员问题的更多相关文章

  1. BZOJ 1503: [NOI2004]郁闷的出纳员

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 10526  Solved: 3685[Submit][Stat ...

  2. NOI2004 郁闷的出纳员

    Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...

  3. [BZOJ1503][NOI2004]郁闷的出纳员

    [BZOJ1503][NOI2004]郁闷的出纳员 试题描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是 ...

  4. BZOJ 1503: [NOI2004]郁闷的出纳员 splay

    1503: [NOI2004]郁闷的出纳员 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作 ...

  5. 【BZOJ1503】 [NOI2004]郁闷的出纳员 splay

    splay模板题,都快把我做忧郁了. 由于自己调两个坑点. 1.删除时及时updata 2.Kth 考虑k满足该点的条件即r->ch[1]->size+1<=k && ...

  6. 【BZOJ】1503: [NOI2004]郁闷的出纳员(Splay)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1503 这题没有看题解就1a了-好开心,, 其实后面去看题解发现他们的都很麻烦,其实有种很简单的做法: ...

  7. c++之路进阶——codevs1286(郁闷的出纳员)

    1286 郁闷的出纳员 2004年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master       题目描述 Description OIER公司 ...

  8. NOI 2004 郁闷的出纳员(平衡树)

    题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...

  9. Java多线程之银行出纳员仿真

    package concurrent; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Qu ...

随机推荐

  1. CCEditBox

    EditBox 创建添加 以及 一些函数参数的解析 #include "GUI/CCEditBox/CCEditBox.h" #include "GUI/CCContro ...

  2. itext生成pdf(附带页眉,页脚,页码)

    package cn.picclife.mwx.salesupport.marketactivity.util; import java.io.File; import java.io.FileOut ...

  3. AngularJs出现错误Error: [ng:areq]

    1.没有对应的控制器 2.有控制器但是路径没有配对

  4. nodejs渲染到页面的理解

    一般逻辑都是: 打开页面,前端发请求到服务端,服务端返回数据到前端,前端根据数据生成DOM节点,然后append到DOM中. 如果是nodejs渲染到页面,我的理解是: 打开页面,服务端直接把数据查询 ...

  5. kibana 统计field所有值百分比

    步骤: 1.创建新的Visualize——Pie chart 2.工具栏设置 metrics: slice size Count (默认) buckets:Split Slices 注意调整size: ...

  6. ubuntu lts install licode tag pre-v5.4

    1. Requirements Ubuntu 14.04 LTS 2. Clone Licode codeYou first need to clone our code from github.Yo ...

  7. System.Data.SQLite.dll控件常规安装方法

    原文地址:http://www.jb51.net/dll/System.Data.SQLite.dll.html 文件运行必须安装   Microsoft Visual C++ 2010 SP1 Re ...

  8. 浅析Java中的native关键字

    浅析Java中的native关键字 native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中.Java语言本身不能对操作系统底层进 ...

  9. 机器学习:模型泛化(L1、L2 和弹性网络)

    一.岭回归和 LASSO 回归的推导过程 1)岭回归和LASSO回归都是解决模型训练过程中的过拟合问题 具体操作:在原始的损失函数后添加正则项,来尽量的减小模型学习到的 θ 的大小,使得模型的泛化能力 ...

  10. 【转】 Pro Android学习笔记(八五):了解Package(4):lib项目

    目录(?)[-] 什么是lib项目 小例子 Lib的实现 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowing ...