博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 5090 组题
阅读量:4696 次
发布时间:2019-06-09

本文共 1175 字,大约阅读时间需要 3 分钟。

题目大意:

一个数列,求一段长度不少于k的数 使平均值最大

思路:

把所有数列里的数,转换为(i,sum i)的点

然后求一个下凸包,在这个过程中对于长度特殊处理一下,使栈内至少有一段长度大于等于k

下凸包的最后一段即为所求

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #define inf 214748361110 #define ll long long11 #define MAXN 10101012 using namespace std;13 inline int read()14 {15 int x=0,f=1;16 char ch;ch=getchar();17 while(!isdigit(ch)) { if(ch=='-') f=-1;ch=getchar();}18 while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}19 return x*f;20 } 21 ll n,l,T;22 ll q[MAXN],s[MAXN],head,tail,ans,x;23 ll cmp(ll x1,ll x2,ll x3,ll x4) { return (s[x2]-s[x1])*(x4-x3)-(s[x4]-s[x3])*(x2-x1);}24 ll gcd(ll a,ll b) { return !b?a:gcd(b,a%b);}25 int main()26 {27 head=tail=0;28 n=read(),l=read();29 for(ll i=1;i<=n;i++)30 x=read(),s[i]=s[i-1]+x;31 ll al=0,ar=l;32 for(ll i=l;i<=n;i++)33 {34 while(head
<0) tail--;35 q[tail++]=i-l;36 while(head
0) head++;37 if(cmp(q[head],i,al,ar)>0||(cmp(q[head],i,al,ar)==0&&(i-q[head]
View Code

orz bzoj11月赛做出来的唯一一道题

转载于:https://www.cnblogs.com/yyc-jack-0920/p/8159078.html

你可能感兴趣的文章
开源软件之七宗罪以及背后的阴谋
查看>>
BZOJ1863 [Zjoi2006]trouble 皇帝的烦恼
查看>>
poj 2442 Sequence
查看>>
Oracle SQL语句之常见优化方法总结
查看>>
HTML表格相关
查看>>
上传图片
查看>>
对称加密和非对称加密
查看>>
纯css的下拉导航条(改用JQuery)
查看>>
第30节:Java基础-内部类
查看>>
Apache中RewriteCond规则参数介绍
查看>>
P1983 车站分级
查看>>
selenium去掉下载弹窗
查看>>
psp软件设计需求分析
查看>>
[Spark][Python]DataFrame select 操作例子
查看>>
增强学习————K-摇臂赌博机
查看>>
Latex Tips:
查看>>
chrome 开发者工具,查看元素 hover 样式
查看>>
多校题解
查看>>
HackerRank Extra long factorials
查看>>
js和jquery的基本应用
查看>>