题目背景

西西艾弗岛的购物中心里店铺林立,商品琳琅满目。为了帮助游客根据自己的预算快速选择心仪的商品,IT 部门决定研发一套商品检索系统,支持对任意给定的预算 x,查询在该预算范围内(≤x)价格最高的商品。如果没有商品符合该预算要求,便向游客推荐可以免费领取的西西艾弗岛定制纪念品。

假设购物中心里有 n 件商品,价格从低到高依次为 A1,A2⋯An,则根据预算 x 检索商品的过程可以抽象为如下序列查询问题。

题目描述

A=[A0,A1,A2,⋯,An] 是一个由 n+1 个 [0,N) 范围内整数组成的序列,满足 0=A0<A1<A2<⋯<An<N。(这个定义中蕴含了 n 一定小于 N。)

基于序列 A,对于 [0,N) 范围内任意的整数 x,查询 f(x) 定义为:序列 A 中小于等于 x 的整数里最大的数的下标。具体来说有以下两种情况:

  1. 存在下标 0≤i<n 满足 Ai≤x<Ai+1

此时序列 A 中从 A0 到 Ai 均小于等于 x,其中最大的数为 Ai,其下标为 i,故 f(x)=i。

  1. An≤x

此时序列 A 中所有的数都小于等于 x,其中最大的数为 An,故 f(x)=n。

令 sum(A) 表示 f(0) 到 f(N−1) 的总和,即:
sum(A)=∑i=0N−1f(i)=f(0)+f(1)+f(2)+⋯+f(N−1)

对于给定的序列 A,试计算 sum(A)。

输入格式

从标准输入读入数据。

输入的第一行包含空格分隔的两个正整数 n 和 N。

输入的第二行包含 n 个用空格分隔的整数 A1,A2,⋯,An。

注意 A0 固定为 0,因此输入数据中不包括 A0。

输出格式

输出到标准输出。

仅输出一个整数,表示 sum(A) 的值。

样例1输入

3 10
2 5 8

样例1输出

15

样例1解释

A=[0,2,5,8]

i 0 1 2 3 4 5 6 7 8 9
f(i) 0 0 1 1 1 2 2 2 3 3

如上表所示,sum(A)=f(0)+f(1)+⋯+f(9)=15。

考虑到 f(0)=f(1)、f(2)=f(3)=f(4)、f(5)=f(6)=f(7) 以及 f(8)=f(9),亦可通过如下算式计算 sum(A):
sum(A)=f(0)×2+f(2)×3+f(5)×3+f(8)×2

样例2输入

9 10
1 2 3 4 5 6 7 8 9

样例2输出

45

子任务

50% 的测试数据满足 1≤n≤200 且 n<N≤1000;

全部的测试数据满足 1≤n≤200 且 n<N≤10^7。

提示

若存在区间 [i,j) 满足 f(i)=f(i+1)=⋯=f(j−1),使用乘法运算 f(i)×(j−i) 代替将 f(i) 到 f(j−1) 逐个相加,或可大幅提高算法效率。

题目分析

根据提示的信息我们可以找到解答题目的规律,比如样例1中A数组为[0,2,5,8],对应的下标i为(0,1,2,3),所给定的N为10,那么必定有a[i+1]-a[i]个f(i)相等,f(i)的值就等于下标i,以此类推可以计算到N-a[n]个f(n-1)相等且值为n。以下附上具体代码供参考:

AC代码

#include<iostream>
using namespace std;
int n,N;
int a[202];
int main(){int sum=0,l;cin>>n>>N;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++){l=a[i]-a[i-1];sum+=l*(i-1);}l=N-a[n];sum+=l*n;cout<<sum<<endl;return 0;
}

202112-1 序列查询相关推荐

  1. CCF 202112-2 序列查询新解 python 满分

    CCF 202112-2 序列查询新解 python 满分 题目叙述 问题描述:略 输入格式:略 输出格式:略 样例 满分证明 解题思路 01Python超时70分 02满分python思路 第一,计 ...

  2. CCF202112-1 序列查询

    试题编号: 202112-1 试题名称: 序列查询 时间限制: 300ms 内存限制: 512.0MB 问题描述:   解题思路: 顺序暴力枚举,因为对于数组a,a[i] < a[i+1] ,且 ...

  3. CCF CSP202112-2 序列查询新解

    CCF CSP202112-2 序列查询新解 题目背景 上一题"序列查询"中说道: A=[A0,A1,A2,⋯,An]A=[A_0,A_1,A_2,⋯,A_n]A=[A0​,A1​ ...

  4. CCF CSP202112-1 序列查询

    CCF CSP202112-1 序列查询 题目背景 西西艾弗岛的购物中心里店铺林立,商品琳琅满目.为了帮助游客根据自己的预算快速选择心仪的商品,IT 部门决定研发一套商品检索系统,支持对任意给定的预算 ...

  5. CSP 202112-1 序列查询 python

    CSP 202112-1 序列查询 python 题目描述 思路 其实这道题,我觉得提示给的非常清楚了,这个提示啊,直接送分了哈哈哈,所以我们只要根据提示,利用乘法运算,计算就可以得到结果 代码 # ...

  6. csp序列查询(C语言)

    csp序列查询 #include<stdio.h>int main(){int n, N, i, sum, j;int A[200];A[0] = 0;sum = 0;scanf(&quo ...

  7. ~5 ccf 2021-12-2 序列查询新解

    序列查询新解 题目描述 输入 输出 样例输入 样例输出 子任务 源代码 关于这题 题目描述 输入 输出 样例输入 样例1 3 10 2 5 8 样例2 9 10 1 2 3 4 5 6 7 8 9 样 ...

  8. ~4.2 ccf 2021-12-1 序列查询

    序列查询 题目描述 输入 输出 样例输入 样例输出 子任务 源代码 题目描述 输入 输出 样例输入 样例一 3 10 2 5 8 样例二 9 10 1 2 3 4 5 6 7 8 9 样例输出 样例一 ...

  9. CCF CSP 序列查询新解

    CCF CSP 序列查询新解(C语言) 题目背景 上一题"序列查询"中说道: A=[A0,A1,A2,⋯,An] 是一个由 n+1 个 [0,N) 范围内整数组成的序列,满足 0= ...

  10. CSP CCF: 202112-2 序列查询新解 (C++)

    题目链接:计算机软件能力认证考试系统 试题编号: 202112-2 试题名称: 序列查询新解 时间限制: 1.0s 内存限制: 512.0MB 题目背景 上一题"序列查询"中说道: ...

最新文章

  1. Linux添加用户组和添加用户
  2. “Assign Random Colors” is not working in 3ds Max 2015
  3. Ubuntu下ibus在firefox浏览器中选中即删除的解决办法
  4. CloudStack设计思想
  5. 数据库,唯一索引,重复数据处理
  6. thinkphp集成系列之phpmailer批量发送邮件
  7. QT的QScriptValue类的使用
  8. Web 绘图—服务器端绘图
  9. Win XP2实用的修复工具
  10. 对cookie和子cookie操作的封装
  11. springboot 配置多个请求服务代理
  12. mysql的安装以及开启远程访问
  13. AWS DeepRacer 强化学习RL,工作流程
  14. opcode加密php代码,总结Opcode缓存和PHP代码的加密
  15. ECharts 示例——双Y轴
  16. 达观数据爱心公益再出发,走进广西桥业小学开展捐书助学活动
  17. 蛋白结构分析实操教程
  18. Oracle所有错误类型
  19. Xshell 免密连接云主机(以Vultr云服务为例)
  20. TypeScript:Aho–Corasick算法实现敏感词过滤

热门文章

  1. 【图像识别】基于BP神经网络实现手写体大写字母识别附matlab代码
  2. 菜刀怎么接mysql_chopper菜刀一句话操作mysql数据库乱码问题 -电脑资料
  3. linux内存硬件检测工具,13种在 Linux 系统上检测 CPU 信息的工具
  4. 【赠书】阿里云天池大赛赛题解析,深度学习篇!
  5. PHP应用加速工具软件
  6. 2021年化工自动化控制仪表考试资料及化工自动化控制仪表考试试题
  7. 18岁生日所经过的总天数
  8. Python 查看文件列表
  9. 电脑中的图片怎么加密?
  10. HTML5游戏引擎(十五)-时间控制——Timer计时器 Ticker心跳-startTick-stopTick 帧事件-ENTER_FRAME