题目背景

zzs和zzy正在被寒假作业折磨,然而他们有答案可以抄啊。

题目描述

他们共有n项寒假作业。zzy给每项寒假作业都定义了一个疲劳值Ai,表示抄这个作业所要花的精力。zzs现在想要知道,有多少组连续的寒假作业的疲劳值的平均值不小于k?

简单地说,给定n个正整数A1,A2,A3,...,An,求出有多少个连续的子序列的平均值不小于k。

输入输出格式

输入格式:

第一行两个正整数,n和k。

第二行到第n+1行,每行一个正整数Ai。

输出格式:

一个非负整数。

输入输出样例

输入样例#1:

3 2
1
2
3

输出样例#1:

4

说明

样例解释:共有6个连续的子序列,分别是(1)、(2)、(3)、(1,2)、(2,3)、(1,2,3),平均值分别为1、2、3、1.5、2.5、2,其中平均值不小于k的共有4个。

对于20%的数据,1<=n<=100;

对于50%的数据,1<=n<=5000;

对于100%的数据,1<=n<=100000;

对于100%的数据,1<=Ai<=10000,1<=k<=10000。

解题思路

  先来简化一下题意:给定一个数列a[],求有多少个子序列元素平均值大于等于k。

  遍历所有子区间复杂度最小O(n^2),可用前缀和O(1)得到任意区间和。

  想个办法吧,这类题要么用奇奇怪怪的数据结构(可能有这样的数据结构?我不知道),要么推公式。

  那就推公式——

  首先取出一段区间吧,设1<=i<=j<=n,然后这段区间(a[i]~a[j])的平均值为

    (a[i]+a[i+1]+…+a[j]) / (j-i+1)>=k

    分母不太好看,乘到右边吧——

    a[i]+a[i+1]+…+a[j] >= k*(j-i+1)

    a[i]+a[i+1]+…+a[j]>= k+…+k //(j-i+1)个k

    接下来有点关键啦

    a[i]+a[i+1]+…+a[j] - k-…-k>=0

    (a[i]-k) + (a[i+1]-k) +……+ (a[j]-k)>=0//哦?那么整齐,有意思

    那我们另设一个数组b[],使b[i]=a[i]-k吧

    b[i]+b[i+1]+…+b[j]>=0

    哦?b[]的一段区间和大于等于零?

  记得前面想暴力的时候说过用前缀和能O(1)取得任意区间和吗?给b[]套上区间和吧

  设s[i]=b[1]+b[2]+b[3]+…+b[i],特别的,令s[0]=0,那么b[i]+b[i+1]+…+b[j] = s[j]-s[i-1]。

    s[j] - s[i-1]>=0

    移项一下

    s[j]>=s[i-1],哇,快了。

    因为之前定义过i<=j,所以i-1<j,这是什么?

    是的没错!逆序对(大雾,应该叫顺序对的)!

    i-1<j且s[i-1]<=s[j],对s数组求逆序对顺序对即可。

  不会求逆序对的就先掌握这个姿势吧,也挺简单的。

  最后说一下,我不知道为什么把求逆序对的程序类比着改一下,求出来“顺序对”就是对的,反正套上去就AC了,如果有那个dalao知道,能在评论区为本蒟蒻解惑吗?谢谢了。

-------------------------------------------------分割线--------------------------------------------

2019年03月05日20:06:16:当年我找这个解法是从百度第五页找出来的,当年洛谷上这题也只有十多个人AC。今天回来一看,博客园的相似推荐,一个平衡树,其他全是这个解法……感觉自己该抒发点什么,但啥也说不出来……剧场效应导致前浪被拍死在沙滩上?或是一代代OIer的努力降低了查找资料的难度,也极大增加了获奖的难度?(今年NOI免费了,感觉自己错亿)(心里真乱)

源代码

#include<stdio.h>int n,k;
int a[100010]={0},temp[100010]={0};
long long ans=0;void merge(int s1,int e1,int s2,int e2)
{int s=s1,e=e2,i=s1;while(s1<=e1&&s2<=e2){if(a[s1]<=a[s2]){ans+=e2-s2+1;//求逆序对在"a[s1]>a[s2]"里,求顺序对反过来temp[i++]=a[s1++];}elsetemp[i++]=a[s2++];}while(s1<=e1) temp[i++]=a[s1++];while(s2<=e2) temp[i++]=a[s2++];for(i=s;i<=e;i++) a[i]=temp[i];
}
void msort(int l,int r)
{if(l==r) return;int mid=(l+r)>>1;msort(l,mid);msort(mid+1,r);merge(l,mid,mid+1,r);
}int main()
{scanf("%d%d",&n,&k);for(int i=1,b;i<=n;i++){scanf("%d",&b);b-=k;a[i]=a[i-1]+b;//输入a[i]时就顺带处理出了s[i],依然存在a[i]里
    }msort(0,n);printf("%lld",ans);return 0;
}

转载于:https://www.cnblogs.com/wawcac-blog/p/6914837.html

洛谷 P2717 寒假作业相关推荐

  1. 洛谷 P2717 寒假作业 1

    题目背景 zzs和zzy正在被寒假作业折磨,然而他们有答案可以抄啊. 题目描述 他们共有n项寒假作业.zzy给每项寒假作业都定义了一个疲劳值Ai,表示抄这个作业所要花的精力.zzs现在想要知道,有多少 ...

  2. 洛谷P2717 寒假作业(cdq分治+归并排序求逆序数)

    2020.6.13 君子做事得有担当,这个题目我确实不太明白什么意思,只会O(N^2)的朴素解法,看了下题解才发现有逆序数的弟弟顺序数,用归并就过了?? 先去打cf div2,等会再来研究 代码: # ...

  3. Luogu P2717 寒假作业(平衡树)

    P2717 寒假作业 题意 题目背景 \(zzs\)和\(zzy\)正在被寒假作业折磨,然而他们有答案可以抄啊. 题目描述 他们共有\(n\)项寒假作业.\(zzy\)给每项寒假作业都定义了一个疲劳值 ...

  4. 【洛谷 P6151 [集训队作业2019] 青春猪头少年不会梦到兔女郎学姐】【容斥原理+生成函数】

    题意 定义一个序列的权值为:把序列首尾相接成一个环,环上每段数字长度的乘积.有nnn种数字,求所有满足第iii种数字恰好出现aia_iai​次的排列的权值之和. n,∑ai≤2∗105n,\sum a ...

  5. 洛谷 P3216 [HNOI2011]数学作业

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P3216 [HNOI2011]数学作业 题目 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正 ...

  6. 【寒假每日一题】洛谷 P2404 自然数的拆分问题

    题目链接:P2404 自然数的拆分问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 任何一个大于 1 的自然数 n,总可以拆分成若干个小于 n 的自然数之和.现在给你一 ...

  7. 2021寒假——洛谷刷题计划(35题)

    (希望大家不要Copy) AC:Accept,程序通过. CE:Compile Error,编译错误. PC:Partially Correct,部分正确. WA:Wrong Answer,答案错误. ...

  8. 【寒假每日一题】洛谷 P5734 【深基6.例6】文字处理软件

    题目链接:P5734 [深基6.例6]文字处理软件 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 你需要开发一款文字处理软件.最开始时输入一个字符串作为初始文档.可以认为 ...

  9. 【寒假每日一题】洛谷 P7471 [NOI Online 2021 入门组] 切蛋糕

    题目链接:P7471 [NOI Online 2021 入门组] 切蛋糕 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 Alice.Bob 和 Cindy 三个好朋友得到 ...

最新文章

  1. Ubuntu18.04安装keras(tensorflow)从无到有实录
  2. python学习day-8 迭代器 生成器 装饰器
  3. MYSQL: DML/DDL/DCL
  4. 让atmega8可以和飞思卡尔xs128一样对IO引脚进行定义
  5. 160 - 11 Andrnalin.4
  6. mysql严格模式 报错_mysql严格模式
  7. [hashmap|空间换时间] leetcode 1 两数之和
  8. php date()
  9. Eviews做ARIMA模型
  10. BS7799、ISO/IEC 17799、ISO/IEC 27001 的关系
  11. 如何选择适合的伺服电机?
  12. Russ Cox:这不是Go项目的标准布局 | Gopher Daily (2021.04.28) ʕ◔ϖ◔ʔ
  13. 简单认识一下苹果笔记本以及使用MBP开发一年的心得体会
  14. 必应搜索器主页图片网址
  15. Liunx运维整理文案-网络管理命令大全
  16. 室内定位——视觉方法的发展
  17. Javascript获取元素的xpath
  18. 泛微OA集成Wps-V5版本,获取授权相关数据
  19. cropper基本用法(裁剪图片)
  20. iPhone 14 Pro灵动岛怎么设置?灵动岛启用/关闭设置教程

热门文章

  1. Optional联合Stream使用——集合判空或取值
  2. Android数据存储和读取的三种方法
  3. 未来,有关程序员的十个预言
  4. 谁说高颜值女神做不了技术?她偏做,还是百万级主链!
  5. 一个数可以由哪些数相加得到
  6. SAP ABAP 财务FI(CO-PA 行项目分录) KE21N创建凭证BAPI及范例
  7. 现代科技概论_现代科技概论课程:物理与艺术1
  8. Python实现dijkstra算法
  9. 3年研发投入将超千亿 阿里巴巴成立“达摩院”引入顶尖科学家
  10. URL编码(encode)和URL解码(decode)