题目大意
题目链接 给定n
,k
,s
。 总共k+1
个空,第一个空已经填上了1
,用不超过n
的正整数去填这些空。要求相邻数差的绝对值之和为s
且必须保证相邻的数不相同。一个数允许被填多次。 输出一种填法。
构造,还行。
eachstep = s/k
得到平均每一步的值,即相邻数之差绝对值的平均值 rest = s%k
得到多出来的步数
三种情况会输出 NO:
eachstep > n-1
说明相邻数之差绝对值的平均值大于n-1
了,那显然不可能构造出来;eachstep == n-1 && rest != 0
说明相邻数之差绝对值的平均值为n-1
,但是余数不为0,表示还差几步到s
,因此也构造不出来;eachstep < 1
说明相邻数之差绝对值的平均值小于1,要求相邻数不相同,因此这种情况也构造不出来。可能会有人忘掉这个条件吧。
输出YES: 挺常用的一种思路,多出来的这几步(即rest),顺序、均匀分给每两个相邻的数。(顺序是保证后进行跳跃时不会越界,这部分太细节了就不细说了) 用数组保存相邻数之间的差值的绝对值,循环遍历,加或减保存的值进行输出即可。
注意:记得开LL
代码#include
using namespace std;
typedef long long ll;
const int N = 2e5+10;
ll n, s, rest, eachstep, ans[N];
int k;
int main()
{
cin>>n>>k>>s;
ll eachstep = s/k;
ll rest = s%k;
if(eachstep > n-1 || (eachstep == n-1 && rest) || eachstep
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?