2017 国庆湖南 Day6
期望得分: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的更多相关文章
- 2017 国庆湖南 Day5
期望得分:76+80+30=186 实际得分:72+10+0=82 先看第一问: 本题不是求方案数,所以我们不关心 选的数是什么以及的选的顺序 只关心选了某个数后,对当前gcd的影响 预处理 cnt[ ...
- 2017 国庆湖南 Day1
卡特兰数 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ] ...
- 2017 国庆湖南 Day3
期望得分:100+30+60=190 实际得分:10+0+55=65 到了233 2是奇数位 或223 第2个2是偶数位就会223 .233 循环 #include<cstdio> #de ...
- 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 ...
- 2017 国庆湖南Day2
期望得分:100+30+100=230 实际得分:100+30+70=200 T3 数组开小了 ..... 记录 1的前缀和,0的后缀和 枚举第一个1的出现位置 #include<cstdio& ...
- 学大伟业 2017 国庆 Day1
期望得分:100+100+20=220 实际得分:100+100+20=220 (好久没有期望==实际了 ,~\(≧▽≦)/~) 对于 a........a 如果 第1个a 后面出现的第1个b~z 是 ...
- 2017国庆 清北学堂 北京综合强化班 Day1
期望得分:60+ +0=60+ 实际得分:30+56+0=86 时间规划极端不合理,T2忘了叉积计算,用解析几何算,还有的情况很难处理,浪费太多时间,最后gg 导致T3只剩50分钟,20分钟写完代码, ...
- 牛客国庆集训day6 B Board (模拟标记思维或找规律或分块???)
链接:https://www.nowcoder.com/acm/contest/206/B来源:牛客网 题目描述 恬恬有一个nx n的数组.她在用这个数组玩游戏: 开始时,数组中每一个元素都是0. 恬 ...
- 2017.10.1 国庆清北 D1T1 zhx的字符串题
题目背景 2017国庆清北D1T1 题目描述 你是能看到第一题的 friends 呢. ——hja 何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx.何大爷今天为 字符串定义了新的权值计算方法 ...
随机推荐
- [BZOJ1000] A+B Problem
Description Calculate a+b Input Two integer a,b (0<=a,b<=10) Output Output a+b Sample Input 1 ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十一)
前言 小伙伴们, 大家好,我是Rector. 最近Rector忙于换工作,没有太多时间来更新我们的ASP.NET MVC 5系列文章 [一步一步创建ASP.NET MVC5程序Repository+A ...
- mysql url 连接配置的一个小坑。 工作中不会遇到。 学习的时候会
<property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> & ...
- Spring Boot Security 基于角色的访问控制
@Override protected void configure(HttpSecurity http) throws Exception { //如果配置为需要登录 if (needLogin) ...
- JDK源码及其他框架源码解析随笔地址导航
置顶一篇文章,主要是整理一下写过的JDK中各个类的源码及其他框架源码解析的文章,方便自己随时阅读也方便网友朋友们阅读与指正 基础篇 从为什么String=String谈到StringBuilder和S ...
- 深度剖析HashMap的数据存储实现原理(看完必懂篇)
深度剖析HashMap的数据存储实现原理(看完必懂篇) 具体的原理分析可以参考一下两篇文章,有透彻的分析! 参考资料: 1. https://www.jianshu.com/p/17177c12f84 ...
- 微信小程序初探【类微信UI聊天简单实现】
微信小程序最近很火,火到什么程度,只要你一打开微信,就是它的身影,几乎你用的各个APP都可以在微信中找到它的复制版,另外官方自带的跳一跳更是将它推到了空前至高的位置.对比公众号,就我的感觉来说,有以下 ...
- kali linux安装搜狗输入法的方法
kali linux安装搜狗输入法比较麻烦,因为有很多依赖项,不过安装好就很好用,觉得麻烦的一般安装ibus,经典,也常更新. 下面就说说怎么安装搜狗输入法: 先去http://http.kali.o ...
- ubuntu系统备份与恢复(也适用于其他linux系统)
在windows环境下面,有很多的备份恢复软件,系统也自带了备份恢复功能,比较知名的软件比如ghost等,为什么要备份系统,我之前一直都是系统出现问题就全新安装原版的windows,然后各种设置,各种 ...
- Asp.Net MVC 文件管理Demo(文件展示,上传,下载,压缩,文件重命名等)
之前 ,有想做一个文件管理页面. 参考了 许多资料,终于完成了一个基于Asp.net MVC 的文件管理Demo.界面如下. 一,实现功能及相关技术 文件管理Demo基于Asp.NET MVC , ...