牛客练习赛34 D little w and Exchange(归纳)
题意:
给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(归纳)的更多相关文章
- 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)
牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...
- 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)
牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...
- 牛客练习赛34 little w and Segment Coverage (差分区间)
链接:https://ac.nowcoder.com/acm/contest/297/C来源:牛客网 题目描述 小w有m条线段,编号为1到m. 用这些线段覆盖数轴上的n个点,编号为1到n. 第i条线段 ...
- 牛客练习赛48 D 小w的基站网络
链接:https://ac.nowcoder.com/acm/contest/923/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 牛客练习赛48 E 小w的矩阵前k大元素
E 思路: 优先队列,将迭代器变量作为结构体的变量. 迭代器走的时候只能像一个方向走,另外一个方向只有最开始才走.如下图所示: 如果两个方向同时走,同一个值会被遍历多次,像上图那样就能保证每个位置都走 ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- 牛客练习赛11 假的字符串 (Trie树+拓扑找环)
牛客练习赛11 假的字符串 (Trie树+拓扑找环) 链接:https://ac.nowcoder.com/acm/problem/15049 来源:牛客网 给定n个字符串,互不相等,你可以任意指定字 ...
随机推荐
- FTP服务器虚拟用户配置
FTP服务配置问题及解决方案 使用被动模式,设置云主机IP为被动模式数据传输地址:在配置文件内添加 pasv_enable=YES pasv_promiscuous=YES pasv_address= ...
- C# 阿里云查询、删除文件
class Program { static string regionId = "cn-shanghai"; static string accessKeyId = " ...
- 深入理解协程(三):async/await实现异步协程
原创不易,转载请联系作者 深入理解协程分为三部分进行讲解: 协程的引入 yield from实现异步协程 async/await实现异步协程 本篇为深入理解协程系列文章的最后一篇. 从本篇你将了解到: ...
- 【GeneXus】开发移动APP时,如何使用Canvas进行布局?
当我们开发移动端APP的时候,经常遇到一种布局方式,那就是层级的布局,比如:一张照片我想在照片的上面显示它的名称,但不影响我照片展示的布局大小,也就是这个名称是浮在照片上的,如图: 如果要实现这样的布 ...
- 【设计模式】 (2)关于UML
UML -- Unified Modeling Lanaguage(统计建模语言),是一种软件系统分析和设计的语言工具,他用于帮助软件开发人员进行思考和记录思路的结果. UML本身是一套符号的规定,就 ...
- 虚拟机安装(Vmware14)
下载Vmvare,然后安装. 安装成功后,对两个版本的了解:简单来说Pro的版本更复杂. 创建新的虚拟机时遇到提示BIOS固件问题,提示说Intel的Uirtualizatuion未被激活,解决方案关 ...
- 三、Nginx原理解析
Nginx原理解析 一.反向代理 工作流程 用户通过域名发出访问Web服务器的请求,该域名被DNS服务器解析为反向代理服务器的IP地址: 反向代理服务器接受用户的请求: 反向代理服务器在本地缓存中查找 ...
- Babel+vscode实现APICloud开发中兼容ES6及以上代码
本文出自APICloud官方论坛, 感谢论坛版主 penghuoyan 的分享. 使用APICloud开发时,考虑到兼容问题一直使用ES5开发,时间越久感觉越落后,整理了一个兼容ES6的开发环境, ...
- target 和 currentTarget的区别
target是当前点击的组件,currentTarget是扑捉到事件的组件
- Redis Sentinel 高可用机制
内容目录: Sentinel 如何工作的? 核心配置项 怎么选出新 master 的? Sentinel 有多个,具体谁来执行故障转移? Sentinel 是怎么发现 slave 和其他 sentin ...