湖南附中模拟day1 收银员
4.1 题意描述
花花家的超市是 24 小时营业的,现在需要招聘收银员。
超市每个小时都需要不同数量的收银员,用 ai 表示一天中 i 点到 i + 1 点这一小时内需要
的收银员数量,特别地 a23 表示 23 点到次日 0 点需要的收银员数量。每个时刻可以有多于 ai
的收银员工作,但是绝对不能少于 ai 人。现有 n 人应聘,每个人愿意从一个特定的整点开始
连续工作 8 小时。花花想知道最少要招多少人。
若无解请输出 -1。
4.2 输入格式
输入第一行包括一个正整数 t,表示测试组数。
接下来 2t 行,每两行表示一个测试点:
其中第一行包括 24 个非负整数 ai(i 2 [0; 23]),表示至少需要 ai 个人从 i 点工作到 i + 1
点(特别地 a23 表示 23 点到次日 0 点)。
第二行包括 24 个非负整数 bi(i 2 [0; 23]),表示应聘的人中有 bi 个人愿意从 i 点工作到
i + 1 点(特别地 b23 表示 23 点到次日 0 点)。
4.3 输出格式
对于每个测试组,输出一行包含一个整数表示最少要招多少人或 -1。
4.4 样例输入
1
0 0 0 0 0 0 0 0 2 2 1 5 2 0 3 1 1 4 1 4 2 6 3 3
1 1 1 0 1 0 0 0 0 1 3 2 0 0 4 0 3 0 1 0 0 2 0 0
4.5 样例输出
12
4.6 样例解释
一种最优的招聘方案为:
0 0 1 0 1 0 0 0 0 0 2 2 0 0 0 0 3 0 1 0 0 2 0 0
4.7 数据规模与约定
• 对于 50% 的数据: n ≤ 20; t = 1;
• 另有 20% 的数据: n ≤ 100; t = 1;
• 另有 20% 的数据: n ≤ 500;
• 对于所有编号为奇数的数据: ai = 0; i 2 [0; 7];
• 对于 100% 的数据: n ≤ 1000; ∑bi = n; 0 ≤ ai ≤ n; t ≤ 10。
/*
查分约束系统,做过的题并不多,所以写起来很费事。我们很容易想到前缀和,前缀和中
①s[i-1]<=s[i]
②s[i-8]+a[i]<=s[i](i>8)
③s[i+16]+a[i]-s[24]<=s[i]
④s[i]-b[i]<=s[i-1]
求最长路
然而我们发现,③并不满足查分约束系统的形式,我们考虑到枚举s[24],使s[24]等于一个数,注意这里不能用二分,为什么?比正解大的数并不能保证他的成立,因为由过大的s[24]退出来的其他s是错误的,但如果s[24]恰巧是正解,就不会出现这个问题
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const int maxn = ;
int read(){
char ch=getchar();
int x=,f=;
while(!(ch>=''&&ch<='')){if(ch=='-')f=-;ch=getchar();};
while(ch>=''&&ch<=''){x=x*+(ch-'');ch=getchar();};
return x*f;
}
struct edge{
int v;
int w;
int nxt;
}e[maxn*];
int T,a[maxn],b[maxn];
int vis[maxn],d[maxn],flag;
int head[maxn],cnt;
void ins(int u,int v,int w){
cnt++;
e[cnt].v = v;
e[cnt].w = w;
e[cnt].nxt = head[u];
head[u] = cnt;
}
bool spfa(int s){
flag++;
queue<int> q;
for(int i = ;i <= ;i++){
d[i] = -;
}
d[] = ;
q.push();
vis[] = flag;
int now,to;
while(!q.empty()){
now = q.front();
q.pop();
//cout<<now<<" "<<d[now]<<endl;
for(int i = head[now];i;i = e[i].nxt){
if(d[e[i].v] < d[now] + e[i].w){
d[e[i].v] = d[now] + e[i].w;
if(d[e[i].v] > s)return false;
if(vis[e[i].v] != flag){
vis[e[i].v] = flag;
q.push(e[i].v);
//cout<<now<<" "<<e[i].v<<" "<<d[now]<<" "<<e[i].w<<" "<<d[e[i].v]<<endl; }
}
}
vis[now] = ;
}
return true;
}
bool check(int s){
//cout<<s<<endl;
cnt = ;
for(int i = ;i <= ;i++){
head[i] = ;
}
for(int i = ;i <= ;i++) ins(i-,i,a[i]);
for(int i = ;i <= ;i++) ins(i+,i,a[i]-s);
for(int i = ;i <= ;i++) ins(i-,i,);
for(int i = ;i <= ;i++) ins(i,i-,-b[i]);
ins(,,s);
ins(,,-s);
return spfa(s);
}
void dvd(){
int l = ,r = ,mid,ans;
while(){
if(l > ){
cout<<-<<endl;
break;
}
if(check(l)){
cout<<l<<endl;
break;
}else{
l++;
}
}
}
int main(){
freopen("cashier.in","r",stdin);
freopen("cashier.out","w",stdout);
T = read();
while(T--){
for(int i = ;i <= ;i++) a[i] = read();
for(int i = ;i <= ;i++) b[i] = read();
dvd();
}
return ;
}
湖南附中模拟day1 收银员的更多相关文章
- 湖南附中模拟day1 瞭望塔
/* 这个题要用到树的性质,一般比较难的图论题会往这方面靠拢,这样用很容易出错,应该先写暴力,然后再去一点点想正解 */ //暴力70分 #include<iostream> #inclu ...
- 湖南附中模拟day1 金坷垃
题意描述"没有金坷垃,怎么种庄稼?"花花家有一块田,所有庄稼排成了 N 行 M 列.初始时,每棵庄稼都有一个自己的高度hi;j.花花每次可以使用 1mol 的金克拉使一棵庄稼的高度 ...
- 【NOIP模拟赛】收银员(一道差分约束好题)
/* s[]表示最优方案的序列中的前缀和,那么s[23]就是最优方案 由题意我们可以列出这样一些式子: s[i]+s[23]-s[16+i]>=a[i] (i-8<0) s[i]-s[i- ...
- Acwing 393. 雇佣收银员
算法1: 差分约束 + 枚举 O(Tn2028) 由于牵扯到 \([i - 8 + 1, i]\) 这段区间的和的约束,所以用前缀和更好表达一些. 设 \(num[i]\)表示 \(i\) 时刻有多少 ...
- poj1275收银员——差分约束
题目:http://poj.org/problem?id=1275 做的第一道差分约束题... 首先,根据题意得出一些不等关系(f为前缀和雇佣人数): 0 <= f[i] - f[i-1] &l ...
- python面向过程编程小程序- 模拟超市收银系统
6.16自我总结 功能介绍 程序功能介绍: 商品信息再读取修改买卖均已xlsx格式 且生成购物记录也按/用户名/购买时间.xlsx格式生成 账号密码输入错误三次按照时间进行冻结 用户信息已json格式 ...
- 移动零售批发行业新的技术特色-智能PDA手持移动扫描打印销售开单收银仪!!
提起便利店或者超市,大家的第一印象一定是前台那个笨重的POS机和站在POS机后的收银员.传统的零售店中,笨重的POS机随处可见. 变革前,零售盘点多烦忧 一个顾客要结账,就需要通过POS机.小票打印机 ...
- C++ 大作业 超市收银系统
#include<iostream> #include<fstream> #include<string> #include<iomanip> #inc ...
- [Python设计模式] 第2章 商场收银软件——策略模式
github地址: https://github.com/cheesezh/python_design_patterns 题目 设计一个控制台程序, 模拟商场收银软件,根据客户购买商品的单价和数量,计 ...
随机推荐
- Git 常见问题整理
在学习git的过程中,遇到如下问题,特整理如下: 1 error:src refspec master does not match any 问题产生 a git服务器使用如下命令新建一个项目 $ c ...
- SublimeREPL快捷键设置
SublimeREPL 允许你在 Sublime Text 中运行各种语言(NodeJS , Python,Ruby, Scala 和 Haskell 等等).所以对于程序员来说,这是很重要的一个插件 ...
- python模块xlrd安装-处理excel文件必须
我安装了很久,网上查了很多资料,但都不太适合,综合 了一下,再写一写,希望有用... 官网下载xlrd:官网xlrd下载地址, 真的很难下,我用讯雷,有时候断断续续 下面是我的百度网盘地址,分享出来, ...
- Alpha版本十天冲刺——Day 8
站立式会议 会议总结 队员 今天完成 遇到的问题 明天要做 感想 鲍亮 无 同时发送图片和其它字段信息(string)到服务器,找不到好方法实现 完成发帖接口 心累,写好了一个传送文件的接口,但是后端 ...
- 【Alpha阶段】第五次Scrum例会
由于软工整个项目规划延期1周,我们将停止2天的Scrum,进行相应的修整 会议信息 时间:2016.10.21 22:30 时长:20min 地点:大运村1号公寓5楼楼道 类型:日常Scrum会议 个 ...
- python字符编码(二)
一.什么是字符编码 计算机要想工作必须通电,也就是说‘电’驱使计算机干活,而‘电’的特性,就是高低电压(高低压即二进制数1,低电压即二进制数0),也就是说计算机只认识数字 编程的目的是让计算机干活,而 ...
- response压缩响应
思路:1.通过filter向目标页面传递一个自定义的response对象 2..在这个response对象中通过重写getOutputStream方法和getWriter方法使目标资源调用 该方法输出 ...
- HTTPS 客户端验证 服务端证书流程
网上的文章很多, 但是对摘要的验证流程不够通俗易懂. QQ截图20160420114804.png 证书预置和申请 1:客户端浏览器会预置根证书, 里面包含CA公钥2:服务器去CA申请一个证书3: C ...
- Matlab小技巧
记录一些用Matlab的技巧. //imshow全屏 subplot(1,3,3); imshow(topSketMat); hold on; set(gcf, 'units', 'normalize ...
- 自然语言20.1 WordNet介绍和使用 _
http://blog.csdn.net/ictextr9/article/details/4008703 Wordnet是一个词典.每个词语(word)可能有多个不同的语义,对应不同的sense.而 ...