期望得分: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. C++标准库bitset类型(简单使用方法)

    转自此人博客 ```cpp #include<bister> using std::bitset; ``` 一句话定义:可自定义位数,用作记录二进制的数据类型. 一,定义和初始化 ```c ...

  2. Java集合中的HashMap类

    jdk1.8.0_144 HashMap作为最常用集合之一,继承自AbstractMap.JDK8的HashMap实现与JDK7不同,新增了红黑树作为底层数据结构,结构变得复杂,效率变得更高.为满足自 ...

  3. CodeFirst之深入了解EntityFramework

    一.概要 本文在基于CodeFirst思想之上 深入了解EntityFramework.其实我个人一直头疼的问题就是每次Entity类一有变动,无论是新增表,更改表结构等 EF一律把数据库删掉重建,这 ...

  4. C++学习-11

    虚函数表,调试下断点,指针的自动变量 含有虚函数的类,它的内部含有虚指针指向虚函数表,此时的空类占有4个字节,不管有多少个虚函数,只需要一个虚函数指针指向虚函数表就可以了 构造函数不可以是虚函数,如果 ...

  5. Fiddler抓取https设置及其原理

    iddler抓取https设置及其原理 2018-02-02 目录 1 HTTPS握手过程2 Fiddler抓取HTTPS过程3 Fiddler抓取HTTPS设置参考 数字签名是什么? 1 HTTPS ...

  6. Linux 下 vim 编辑文件,解决中文乱码,设置Tab键空格数

    vim编辑文件的时候,输入中文就出现乱码 解决办法: 以哪个用户登录的就在哪个用户目录下创建文件 vimrc vim .vimrc       (.创建的是隐藏文件) 文件内容: set tabsto ...

  7. python 练完这些,你的函数编程就ok了

    文件处理相关 1,编码问题 (1)请问python2与python3中的默认编码是什么? python 2.x默认的字符编码是ASCII,默认的文件编码也是ASCII python 2.x默认的字符编 ...

  8. ASP.NET Core 2.0 : 七.一张图看透启动背后的秘密

    为什么我们可以在Startup这个 “孤零零的” 类中配置依赖注入和管道? 它是什么时候被实例化并且调用的? 参数中的IServiceCollection services是怎么来的? 处理管道是怎么 ...

  9. 使用git提交到github,每次都要输入用户名和密码的解决方法

    使用git提交文件到github,每次都要输入用户名和密码,操作起来很麻烦,以下方法可解决,记录以下. 原因:在clone 项目的时候,使用了 https方式,而不是ssh方式. 默认clone 方式 ...

  10. 误删 /user/bin目录后的补救

    当危险的动作发生, 误删 /user/bin目录后的补救 以下是昨天晚上真实的误操作现场,模拟记录一下 (这是测试环境,所以操作得很随意,有些执行动作很不规范) 在上面编译一个软件Dboop,完事以后 ...