loj10088 出纳员问题
分析
我们设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 出纳员问题的更多相关文章
- BZOJ 1503: [NOI2004]郁闷的出纳员
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 10526 Solved: 3685[Submit][Stat ...
- NOI2004 郁闷的出纳员
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- [BZOJ1503][NOI2004]郁闷的出纳员
[BZOJ1503][NOI2004]郁闷的出纳员 试题描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是 ...
- BZOJ 1503: [NOI2004]郁闷的出纳员 splay
1503: [NOI2004]郁闷的出纳员 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作 ...
- 【BZOJ1503】 [NOI2004]郁闷的出纳员 splay
splay模板题,都快把我做忧郁了. 由于自己调两个坑点. 1.删除时及时updata 2.Kth 考虑k满足该点的条件即r->ch[1]->size+1<=k && ...
- 【BZOJ】1503: [NOI2004]郁闷的出纳员(Splay)
http://www.lydsy.com/JudgeOnline/problem.php?id=1503 这题没有看题解就1a了-好开心,, 其实后面去看题解发现他们的都很麻烦,其实有种很简单的做法: ...
- c++之路进阶——codevs1286(郁闷的出纳员)
1286 郁闷的出纳员 2004年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description OIER公司 ...
- NOI 2004 郁闷的出纳员(平衡树)
题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...
- Java多线程之银行出纳员仿真
package concurrent; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Qu ...
随机推荐
- 剑指offer--6.数值的整数次方
时间限制:1秒 空间限制:32768K 热度指数:362909 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. class S ...
- 2018.8.10 programming bat based on python
@echo off REM Current DevProg Version. Match the pip package version (x.y.z)SET currentversion=0.4.0 ...
- windows文件名非法字符过滤检测-正则表达式
过滤文件名非法字符 windows现在已知的文件名非法字符有 \ / : * ? " < > | var reg = new RegExp('[\\\\/:*?\"&l ...
- 教你用 Python 实现抖音热门表白软件
之前在群里看到有人发了一个抖音上很火的小视频,就是一个不正经的软件,运行后问你是不是愿意做我的朋友,但你没法点击到「不同意」!并且没办法直接关闭窗口! 很不正经,很流氓,有点适合我. 效果大概是这样的 ...
- notepad++怎么显示项目的目录树?
转:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1013/1762.html
- XML数据库的尝试
首先祝大家新年快乐.身体健康,平安就是福气. 对于一般的个人迷你项目,数据量不大的时候,完全没有必要使用数据库,管理数据使用XML就可以了. 自己尝试写了一个XML数据库,插入1w条小记录,大概3M大 ...
- Python函数-compile()
compile(source, filename, mode[, flags[, dont_inherit]]) 作用: 将source编译为代码或者AST对象.代码对象能够通过exec语句来执行或者 ...
- 【转载,实测好用】gitlab结合sourcetree使用
转载 的出处http://blog.csdn.net/u012764358/article/details/62886427 Gitlab和Sourcetree结合使用实现代码管理 这是本人第一次发表 ...
- Mesos问题汇总
1.Mesos的IP配置 我在虚拟机里面搭载了一个mesos,但是外主机无法通过http://ip:5050 我在虚拟机内部测试发现wget localhost:5050可以正常访问:但是wget i ...
- SQL SERVER存储过程的几种示例
1.常用系统存储过程及使用语法:exec sp_databases; --查看数据库exec sp_tables; --查看表exec sp_columns student;--查看列exec sp_ ...