期望得分:100+100+60=260

实际得分:100+85+0=185

二分最后一条相交线段的位置

#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 100001 int x[N],y[N];
struct node
{
int b;
double k;
}Point[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} int main()
{
freopen("geometry.in","r",stdin);
freopen("geometry.out","w",stdout);
int n; read(n);
for(int i=;i<=n;++i) read(x[i]);
for(int i=;i<=n;++i) read(y[i]);
sort(x+,x+n+);
sort(y+,y+n+);
for(int i=;i<=n;i++)
{
Point[i].b=y[i];
Point[i].k=-y[i]*1.0/x[i];
}
int m; read(m);
int a,b; double g;
int l,r,mid,ans;
while(m--)
{
read(a); read(b);
g=1.0*b/a;
l=;r=n; ans=;
while(l<=r)
{
mid=l+r>>;
if(Point[mid].b/(g-Point[mid].k)<=a) ans=mid,l=mid+;
else r=mid-;
}
printf("%d\n",ans);
}
}

差分约束

设s[i]表示前i个时刻实际招的人数

那么可得约束条件:

a[i]<=s[i]-s[i-7]<=b[i]  i>=7

a[i]<=s[i]+s[23]-s[16+i]<=b[i]  i<7

0<=s[i]-s[i-1]<=b[i]

第二个式子中含有3个未知数

只有两个与i有关

设s[23]=T

那么枚举T,判断当前情况是否有解即可

#include<cstdio>
#include<cstring>
#include<queue> #define N 25 using namespace std; int a[N],b[N]; int front[N],nxt[],to[],tot,val[]; int d[N];
bool vis[N]; void add(int u,int v,int w)
{
to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; val[tot]=w;
} bool spfa()
{
queue<int>q;
memset(vis,false,sizeof(vis));
memset(d,-,sizeof(d));
d[]=; vis[]=true;
q.push();
int now;
while(!q.empty())
{
now=q.front(); q.pop(); vis[now]=false; for(int i=front[now];i;i=nxt[i])
if(d[to[i]]<d[now]+val[i])
{
d[to[i]]=d[now]+val[i];
if(d[to[i]]>) return false;
if(!vis[to[i]]) vis[to[i]]=true,q.push(to[i]);
}
}
return true;
} bool solve(int t)
{
memset(front,,sizeof(front)); tot=;
for(int i=;i<;i++)
{
add(i-,i+,a[i]);
// printf("%d %d %d\n",i-7,i+1,a[i]);
}
for(int i=;i<=;i++)
{
// printf("%d %d %d\n",i+17,i+1,a[i]-t);
add(i+,i+,a[i]-t);
}
for(int i=;i<;i++)
{
// printf("%d %d\n",i,i+1);
add(i,i+,);
}
for(int i=;i<;i++)
{
// printf("%d %d %d\n",i+1,i,-b[i]);
add(i+,i,-b[i]);
}
add(,,t); add(,,-t);
return spfa();
} int main()
{
freopen("cashier.in","r",stdin);
freopen("cashier.out","w",stdout);
int T,ans;
scanf("%d",&T);
while(T--)
{
for(int i=;i<;i++) scanf("%d",&a[i]);
for(int i=;i<;i++) scanf("%d",&b[i]);
ans=;
while()
{
if(++ans>) { ans=-; break; }
if(solve(ans)) break;
}
printf("%d\n",ans);
}
}

考场85分贪心

枚举时刻i,作为首先招人满足的时刻

从 它即它往前7个点, 招人,招的人时刻尽可能的靠后

满足它之后,枚举j 到 i-1 再 同样的方法招人

此贪心成立的前提是,存在一个时刻招的人=min(a[i],b[i])

但最优解可能不是这样

假设前面招了x1、x2、x3……个人

最后面招了y个人

这个y会覆盖前面的x1、x2、x3……

#include<cstdio>
#include<algorithm>
using namespace std;
int need[],have[];
int now[],rest[];
int main()
{
freopen("cashier.in","r",stdin);
freopen("cashier.out","w",stdout);
int T;
scanf("%d",&T);
int ans;
while(T--)
{
ans=1e9;
for(int i=;i<;i++) scanf("%d",&need[i]);
for(int i=;i<;i++) scanf("%d",&have[i]);
for(int k=;k<;k++)
{
if(!need[k]) continue;
for(int i=;i<;i++) rest[i]=have[i],now[i]=need[i];
int j=k,cnt=,sum=;
while(now[k] && cnt<)
{
if(j==-) j=;
cnt++;
if(rest[j]<now[k])
{
for(int h=;h<;h++) now[(h+j)%]-=rest[j];
sum+=rest[j];rest[j]=;
}
else
{
int cut=now[k];
for(int h=;h<;h++) now[(h+j)%]-=cut;
rest[j]-=cut;sum+=cut;
}
j--;
}
if(now[k]) continue;
bool f=true;
for(int i=k+,t=;t<=;t++,i++)
{
if(i==) i=;
if(now[i]<=) continue;
j=i; cnt=;
while(now[i] && cnt<)
{
if(j==-) j=;
cnt++;
if(rest[j]<now[i])
{
for(int h=;h<;h++) now[(h+j)%]-=rest[j];
sum+=rest[j];rest[j]=;
}
else
{
int cut=now[i];
for(int h=;h<;h++) now[(h+j)%]-=cut;
rest[j]-=cut,sum+=cut; }
j--;
}
if(now[i]) { f=false; break; }
}
if(f) ans=min(ans,sum);
}
printf("%d\n",ans==1e9 ? - : ans);
}
}

就是这个http://www.cnblogs.com/TheRoadToTheGold/p/7679195.html

2017 国庆湖南 Day6的更多相关文章

  1. 2017 国庆湖南 Day5

    期望得分:76+80+30=186 实际得分:72+10+0=82 先看第一问: 本题不是求方案数,所以我们不关心 选的数是什么以及的选的顺序 只关心选了某个数后,对当前gcd的影响 预处理 cnt[ ...

  2. 2017 国庆湖南 Day1

    卡特兰数 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ] ...

  3. 2017 国庆湖南 Day3

    期望得分:100+30+60=190 实际得分:10+0+55=65 到了233 2是奇数位 或223 第2个2是偶数位就会223 .233 循环 #include<cstdio> #de ...

  4. 2017 国庆湖南 Day4

    期望得分:20+40+100=160 实际得分:20+20+100=140 破题关键: f(i)=i 证明:设[1,i]中与i互质的数分别为a1,a2……aφ(i) 那么 i-a1,i-a2,…… i ...

  5. 2017 国庆湖南Day2

    期望得分:100+30+100=230 实际得分:100+30+70=200 T3 数组开小了 ..... 记录 1的前缀和,0的后缀和 枚举第一个1的出现位置 #include<cstdio& ...

  6. 学大伟业 2017 国庆 Day1

    期望得分:100+100+20=220 实际得分:100+100+20=220 (好久没有期望==实际了 ,~\(≧▽≦)/~) 对于 a........a 如果 第1个a 后面出现的第1个b~z 是 ...

  7. 2017国庆 清北学堂 北京综合强化班 Day1

    期望得分:60+ +0=60+ 实际得分:30+56+0=86 时间规划极端不合理,T2忘了叉积计算,用解析几何算,还有的情况很难处理,浪费太多时间,最后gg 导致T3只剩50分钟,20分钟写完代码, ...

  8. 牛客国庆集训day6 B Board (模拟标记思维或找规律或分块???)

    链接:https://www.nowcoder.com/acm/contest/206/B来源:牛客网 题目描述 恬恬有一个nx n的数组.她在用这个数组玩游戏: 开始时,数组中每一个元素都是0. 恬 ...

  9. 2017.10.1 国庆清北 D1T1 zhx的字符串题

    题目背景 2017国庆清北D1T1 题目描述 你是能看到第一题的 friends 呢. ——hja 何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx.何大爷今天为 字符串定义了新的权值计算方法 ...

随机推荐

  1. 【BZOJ1189】紧急疏散(二分答案,最大流)

    [BZOJ1189]紧急疏散(二分答案,最大流) 题面 Description 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一块空地:如果是 ...

  2. 【网络流24题】最长k可重区间集(费用流)

    [网络流24题]最长k可重区间集(费用流) 题面 Cogs Loj 洛谷 题解 首先注意一下 这道题目里面 在Cogs上直接做就行了 洛谷和Loj上需要判断数据合法,如果\(l>r\)就要交换\ ...

  3. sspanel 添加远程节点问题汇总

    链接数据库错误: InternalError: (1130, u"Host '97.64.40.100' is not allowed to connect to this MySQL se ...

  4. Developer Survey Results 2017

    概观 今年,超过64,000名开发人员告诉我们他们学习和升级的方式,他们使用的工具和他们想要的东西. 自2011年以来,Stack Overflow每年都会向开发者询问他们最喜爱的技术,编码习惯,工作 ...

  5. 如何使用Vue

    我在学习前端框架的时候面临了很多的选择,比较流行的有react,angularJS,还有另外一个就是Vue,Vue相对于另外两个出现时间更晚,也更符合响应式(Reactive)组件化(Composab ...

  6. 常用Oracle进程资源查询语句(运维必看)

    (一)根据程序名称查找相关信息select A.process,B.spid,A.sid,A.serial#,A.sql_address,A.username,A.program,A.status,A ...

  7. 数组Array、数组API

    1.数组:批量管理多个数据的存储空间. 数组的作用:现实中,批量管理多个数据都是集中分组存放,良好的数据结构,可极大提高程序的执行效率! 优点:方便查找 2.创建数组:(4种方式) (1)var 变量 ...

  8. asp.net跳出iframe结构转向登录

    在网页编程时,我们经常需要处理,当session过期时,我们要跳到登陆页面让用户登陆,由于我们可能用到IFrame框架,所以我们我登陆页面需要显示在整个页面,而不是一个IFrame中,大部分的网友是用 ...

  9. 【MyBatis】MyBatis自动生成代码查询之爬坑记

    前言 项目使用SSM框架搭建Web后台服务,前台后使用restful api,后台使用MyBatisGenerator自动生成代码,在前台使用关键字进行查询时,遇到了一些很宝贵的坑,现记录如下.为展示 ...

  10. Error400

    关于Error400,研究了几天终于弄明白了.不是FQ的问题,也不是DNS污染的问题.之前网上很多帖子说Error400可以通过删除 cookies来解决.但是其实这个并不管用.也就是说.原因并不是由 ...