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;
}

LuoguP7593 凑数 题解的更多相关文章

  1. P2188 小Z的 k 紧凑数 题解(数位DP)

    题目链接 小Z的 k 紧凑数 解题思路 数位DP,把每一个数位的每一个数对应的可能性表示出来,然后求\(num(1,r)-num(1,l-1)\),其中\(num(i,j)\)表示\([i,j]\)区 ...

  2. NOIP 2008提高组第三题题解by rLq

    啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...

  3. BestCoder Round #60 题解链接

    题解  题目 1001 GT and sequence 注意先特判000的情况:如果读入的数据有000,那么去掉所有的000且最后答案和000取一个max. 剩下的正数显然全部乘起来比较优. 对于负数 ...

  4. 2018 ACM-ICPC Asia Beijing Regional Contest (部分题解)

    摘要 本文主要给出了2018 ACM-ICPC Asia Beijing Regional Contest的部分题解,意即熟悉区域赛题型,保持比赛感觉. Jin Yong’s Wukong Ranki ...

  5. 51nod 1577 异或凑数

    思路真的是挺巧妙的. 让我惊叹,原来线性基还能这么做?!?! 好吧,这种取若干个数异或凑数的题目怎么能少的了线性基呢? 但是,问题集中在于怎么快速提取一个区间的线性基 暴力n^2 线段树维护线性基?分 ...

  6. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  7. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  8. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  9. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

随机推荐

  1. Django(76)isort工具对import导入进行排序

    前言 我们在开发项目时经常会进行导包有import *格式的,还有from * import *格式的,最后就会显示的很乱,那么有没有什么工具能对导包进行一键排序呢?答案是有的,使用isort工具 i ...

  2. DP 优化方法大杂烩 & 做题记录 I.

    标 * 的是推荐阅读的部分 / 做的题目. 1. 动态 DP(DDP)算法简介 动态动态规划. 以 P4719 为例讲一讲 ddp: 1.1. 树剖解法 如果没有修改操作,那么可以设计出 DP 方案 ...

  3. 嵌入式Linux利用ppp实现4G模块联网

    https://blog.csdn.net/qq361294382/article/details/52136126 https://blog.csdn.net/qq361294382/article ...

  4. C++类虚函数内存分布(这个 你必须懂)

    转自:http://www.cnblogs.com/jerry19880126/p/3616999.html C++类内存分布 书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来 ...

  5. mysql 不等于 符号写法

    今天在写sql语句的时候,想确认下mysql的不等于运算符是用什么符号表示的 经过测试发现mysql中用<>与!=都是可以的,但sqlserver中不识别!=,所以建议用<> ...

  6. Python os模块与sys模块

    1.os模块简单使用及说明 # -*- coding:utf-8 -*- """ os模块主要用于系统,处理程序与系统交互问题 大部分如属性等功能在linux系统中会使用 ...

  7. ansible-playbook 安装redis 主从

    ansible-playbook 安装redis 主从 手动在测试机上安装一遍redis,最好使用utils下面的install_server.sh安装服务,然后将redis的配置文件和init需要的 ...

  8. day31 协程

    day31 协程 一.死锁与递归锁 ​ 所谓死锁:是指两个或者两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产 ...

  9. How does “void *” differ in C and C++?

    C allows a void* pointer to be assigned to any pointer type without a cast, whereas C++ does not; th ...

  10. Advanced C++ | Conversion Operators

    In C++, the programmer abstracts real world objects using classes as concrete types. Sometimes it is ...