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.何大爷今天为 字符串定义了新的权值计算方法 ...
随机推荐
- 【BZOJ2049】洞穴勘测(Link-Cut Tree)
[BZOJ2049]洞穴勘测(Link-Cut Tree) 题面 题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别 ...
- 【NOIP2012】【CJOJ1093】【洛谷1083】借教室
我写的是不完美算法!!! 题面 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的 ...
- java.lang.OutOfMemoryError: PermGen space有效解决方法
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决 ...
- 云计算之路-阿里云上:博客web服务器轮番CPU 100%
今天下午14:30左右开始,不知道怎么回事,博客站点负载均衡中的web服务器轮番CPU 100%.平时访问高峰5台服务器就能稳稳支撑,而今天发现CPU出现100%问题后就开始加服务器,结果到目前加到了 ...
- 封装好的MD5加密
/** * 不可逆加密类 为密码提供不可逆的加密运算,使用MD5算法 * * 使用方法: MD5 encrypt = new MD5(); encrypt.getMD5ofStr(str); //返回 ...
- 关于java构造函数,静态代码块,构造代码块,和普通代码块相关总结(一)
构造函数.构造代码块和静态代码块容易混淆,它们的执行条件和执行顺序也常常容易犯迷.这里就针对这些问题说一下我个人的一些理解,顺便对这部分内容做个小结. 一.构造函数 格式:类名(参数1,参数2,-){ ...
- jquery中的ajax方法参数
引用来自:http://www.cnblogs.com/tylerdonet/p/3520862.html jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String ...
- 直接删除undo及temp表空间文件后的数据库恢复一例
前几天,某用户研发找到我,说他们的研发库坏了,问我能恢复不?我问他们做了什么操作,一个小男孩儿说,看到空间满了,清除了点儿数据,我说是不是连数据库的文件也清除了,他说没有,他清除的是ORACLE_HO ...
- JAVA学习:面向对象编程
"算法+数据结构=程序"是一句经典名言,这句话很直接的说明了程序的本质:处理数据.产生结果.即便是最简单的HelloWorld程序,我们也可以将字符串"HelloWorl ...
- Spring源码学习:第0步--环境准备
Spring源码现在已托管于GitHub,相比于以前直接从官网下载一个压缩包的方式来说,确实方便了不少. GitHub地址:https://github.com/spring-projects/spr ...