题意:

给n个数,和m

问这组数是否可以构成[1, m]中的每一个数

思路:

先将a数组排序。

先算算构成前几个数需要什么,至少需要a[1]=1

需要a[2] = 1,2

在a[2] = 1的情况下a[3] = 1, 2, 3, 在a[2] = 2的情况下a[3] = 1, 2, 3, 4 (不能等于5及以上,否则无法构成4)

然后我们想决定a[4]的选择取决于什么,设s = a[1] + a[2] + a[3], 意味着前3个最多可以构成s

同时还意味着前三个可以构成[1, s],

因为a[4] >= a[3],这是我们排序的前提,

若我们取a[4] = a[3],此时前四个可以构成[1, s + a[3]],

(s+1到s+a[3]-1的值方法: 设要构成的数为x,先选全部的数,值为s+a[3],然后去掉s+a[3]-x,去掉的这个数范围为[1, a[3] - 1],这个范围在[1, s]之内,可以在之前的3个数中选)

所以这个a[3]就是下限了!

我们再想想刚才那个判断下限的过程,一个特殊点在于区间[1, a[3] - 1]包含于[1, s]

前者与a[4]的选择有关!!!

前者实际上就是[1, a[4]], 为了满足上述区间包含的关系,a[4]最多可以为s+1!

所以a[4]的取值范围就是[a[3], s + 1]

不只是a[4],我们上述过程其实呈现了一个归纳的过程,上述结论可以扩展到

对于满足题意的有序数组a,设$\displaystyle s = \sum_{j=1}^i a[j]$,一定有$\displaystyle a[i] \leq a[i+1] \leq s+1$

检查满不满足即可

代码:

#include<bits/stdc++.h>
using namespace std;
int a[ + ];
int main(){
int n, m;
scanf("%d %d", &n, &m);
for(int i = ; i <= n; i++){
scanf("%d", &a[i]);
}
sort(a+, a++n);
int tmp = ;
for(int i = ; i <= n; i++){
if(a[i] <= tmp+){
tmp += a[i];
}
else break;
}
if(tmp >= m)printf("YES");
else printf("NO");
return ;
}

牛客练习赛34 D little w and Exchange(归纳)的更多相关文章

  1. 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)

    牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...

  2. 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)

    牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...

  3. 牛客练习赛34 little w and Segment Coverage (差分区间)

    链接:https://ac.nowcoder.com/acm/contest/297/C来源:牛客网 题目描述 小w有m条线段,编号为1到m. 用这些线段覆盖数轴上的n个点,编号为1到n. 第i条线段 ...

  4. 牛客练习赛48 D 小w的基站网络

    链接:https://ac.nowcoder.com/acm/contest/923/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  5. 牛客练习赛48 E 小w的矩阵前k大元素

    E 思路: 优先队列,将迭代器变量作为结构体的变量. 迭代器走的时候只能像一个方向走,另外一个方向只有最开始才走.如下图所示: 如果两个方向同时走,同一个值会被遍历多次,像上图那样就能保证每个位置都走 ...

  6. 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

  7. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B

    牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...

  8. 最小生成树--牛客练习赛43-C

    牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 ​ 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...

  9. 牛客练习赛11 假的字符串 (Trie树+拓扑找环)

    牛客练习赛11 假的字符串 (Trie树+拓扑找环) 链接:https://ac.nowcoder.com/acm/problem/15049 来源:牛客网 给定n个字符串,互不相等,你可以任意指定字 ...

随机推荐

  1. FTP服务器虚拟用户配置

    FTP服务配置问题及解决方案 使用被动模式,设置云主机IP为被动模式数据传输地址:在配置文件内添加 pasv_enable=YES pasv_promiscuous=YES pasv_address= ...

  2. C# 阿里云查询、删除文件

    class Program { static string regionId = "cn-shanghai"; static string accessKeyId = " ...

  3. 深入理解协程(三):async/await实现异步协程

    原创不易,转载请联系作者 深入理解协程分为三部分进行讲解: 协程的引入 yield from实现异步协程 async/await实现异步协程 本篇为深入理解协程系列文章的最后一篇. 从本篇你将了解到: ...

  4. 【GeneXus】开发移动APP时,如何使用Canvas进行布局?

    当我们开发移动端APP的时候,经常遇到一种布局方式,那就是层级的布局,比如:一张照片我想在照片的上面显示它的名称,但不影响我照片展示的布局大小,也就是这个名称是浮在照片上的,如图: 如果要实现这样的布 ...

  5. 【设计模式】 (2)关于UML

    UML -- Unified Modeling Lanaguage(统计建模语言),是一种软件系统分析和设计的语言工具,他用于帮助软件开发人员进行思考和记录思路的结果. UML本身是一套符号的规定,就 ...

  6. 虚拟机安装(Vmware14)

    下载Vmvare,然后安装. 安装成功后,对两个版本的了解:简单来说Pro的版本更复杂. 创建新的虚拟机时遇到提示BIOS固件问题,提示说Intel的Uirtualizatuion未被激活,解决方案关 ...

  7. 三、Nginx原理解析

    Nginx原理解析 一.反向代理 工作流程 用户通过域名发出访问Web服务器的请求,该域名被DNS服务器解析为反向代理服务器的IP地址: 反向代理服务器接受用户的请求: 反向代理服务器在本地缓存中查找 ...

  8. Babel+vscode实现APICloud开发中兼容ES6及以上代码

    本文出自APICloud官方论坛, 感谢论坛版主 penghuoyan 的分享.   使用APICloud开发时,考虑到兼容问题一直使用ES5开发,时间越久感觉越落后,整理了一个兼容ES6的开发环境, ...

  9. target 和 currentTarget的区别

    target是当前点击的组件,currentTarget是扑捉到事件的组件

  10. Redis Sentinel 高可用机制

    内容目录: Sentinel 如何工作的? 核心配置项 怎么选出新 master 的? Sentinel 有多个,具体谁来执行故障转移? Sentinel 是怎么发现 slave 和其他 sentin ...