Content

给定 \(n\) 个整数 \(1,2,\dots,n\),请问是否能从这 \(n\) 个数中恰好选 \(k\) 个数,使得这 \(k\) 个数的和为 \(s\)。

数据范围:\(t\) 组数据,\(1\leqslant t\leqslant 10^3\),\(1\leqslant k\leqslant n\leqslant 10^9\),\(1\leqslant s\leqslant 10^{18}\)。

Solution

我们都知道,从 \(1\) 到 \(n\) 中选出 \(k\) 个数,最小和是 \(1\sim k\) 的和,最大和是 \(n-k+1\sim n\) 的和,而在此之间的所有的整数和都能够通过最小和和最大和当中的某些数进行加减得到,比如说 \(1\sim 5\) 中选出 \(3\) 个数,最小和是 \(6\),最大和是 \(12\),那么可以构造出如下的整数和的方案:

  • 选出的数的集合为 \(\{1,2,3\}\),总和为 \(6\)。
  • 选出的数的集合为 \(\{1,2,4\}\),总和为 \(7\)。
  • 选出的数的集合为 \(\{1,2,5\}\),总和为 \(8\)。
  • 选出的数的集合为 \(\{1,3,5\}\),总和为 \(9\)。
  • 选出的数的集合为 \(\{1,4,5\}\),总和为 \(10\)。
  • 选出的数的集合为 \(\{2,4,5\}\),总和为 \(11\)。
  • 选出的数的集合为 \(\{3,4,5\}\),总和为 \(12\)。

其实这也给出了一种构造出从 \(1\) 到 \(n\) 中选出 \(k\) 个数和为 \(s\) 的一种方案:

  • 首先,先选出 \(1\sim k\)。
  • 然后,从最后一个数(第 \(k\) 个数)开始往前推,如果当前到了第 \(i\) 个数,直接加到 \(n-k+i\),再根据是否超过了 \(s\) 进行判断。如果当前和 \(\geqslant s\),那么将当前数减回去到刚好使和等于 \(s\),否则继续往前推。
  • 依此下去,就能够构造出一种满足题目要求的方案。

因此我们先算出 \(s_{\min}=\sum\limits_{i=1}^k i=\dfrac{k(k+1)}2\) 和 \(s_{\max}=\sum\limits_{i=1}^kn-k+i=\dfrac{(2n-k+1)k}2\),然后再拿 \(s_{\min},s_{\max}\) 与 \(s\) 进行比较。如果 \(s_{\min}\leqslant s\leqslant s_{\max}\),那么显然能够恰好选出和为 \(s\) 的 \(k\) 个数,否则就不行。

Code

int main() {
MT {
ll n = Rll, k = Rll, s = Rll;
((2 * n - k + 1) * k / 2 < s || (1 + k) * k / 2 > s) ? No : Yes;
}
return 0;
}

最新文章

  1. JSONObject.fromObject(map)(JSON与JAVA数据的转换)
  2. mysql metadata lock(三)
  3. datatables使用
  4. EasyUI-draggable
  5. [原]Django慢请求分析工具--dogslow
  6. mysql的text类型长度问题
  7. oracle中的数据读取与查找
  8. 在Linux(Ubuntu/openSUSE/CentOS)下配置ASP.NET(Apache + Mono)转载+补充
  9. UVA 10041 Vito&#39;s Family (中位数)
  10. 转载Linq中GroupBy方法的使用总结
  11. 【Android】Intent的使用-返回数据给上一个活动
  12. Best Time to Buy and Sell Stock I &amp;&amp; II
  13. css中的em用法
  14. 改变UITableView选中行高亮的颜色
  15. iOS-CYLTabBarController【好用的TabbarController】
  16. Linux系统Vi/Vim编辑器的简单介绍、安装/卸载、常用命令
  17. vue mand-mobile ui Stepper步进器默认值传字符串进去不起作用
  18. PHP curl_setopt函数用法介绍中篇
  19. 002.比较vector对象是否相等
  20. sql 自定义split

热门文章

  1. linux的ip文件参数说明
  2. 程序员需要达到什么水平才能顺利拿到 20k 无压力?
  3. SpringCloud升级之路2020.0.x版-44.避免链路信息丢失做的设计(1)
  4. Java设计模式之(十一)——享元模式
  5. C++ and OO Num. Comp. Sci. Eng. - Part 5.
  6. 【R】write.table输出数据带有行名?
  7. Shell中 ##%% 操作变量名
  8. 43-Reverse Nodes in k-Group
  9. LR SP PC
  10. 联盛德 HLK-W806 (六): I2C驱动SSD1306 128x64 OLED液晶屏