AT5749 Subarray Sum
Posted Coros_Trusds
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AT5749 Subarray Sum相关的知识,希望对你有一定的参考价值。
前言
一道比较简单的题。(
完了完了完了要开学了要开学了。。。
题目大意
给定三个整数 \\(N,K,S\\)。
请你找到一个 \\(N\\) 个元素的整数序列,其中每一个元素在区间 \\([1,10^9]\\) 内。这个序列满足 \\(K\\) 个子序列的和为 \\(S\\)。
分析
要求有 \\(K\\) 个子序列的和是 \\(S\\),那么我们直接输出 \\(K\\) 个 \\(S\\),剩下的我们就让它始终不能出现和为 \\(S\\) 就行了,那么可以就可以再输出 \\(n-k\\) 个 \\(10^9\\),这可以在大部分情况下保证正确性。
上面仅仅是大部分情况下。
说一下特殊情况,比如说 4 2 1000000000
这样的例子,当 \\(S=10^9\\) 时,我们则输出 \\(n-k\\) 个 \\(10^9-1\\) 即可。
代码
//2021/8/30
#include <iostream>
#include <cstdio>
#define debug(c) cerr<<#c<<" = "<<c<<endl
namespace Newstd
{
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<\'0\' || ch>\'9\')
{
if(ch==\'-\')
{
f=-1;ch=getchar();
}
}
while(ch>=\'0\' && ch<=\'9\')
{
x=x*10+ch-48;ch=getchar();
}
return x*f;
}
inline void print(int x)
{
if(x<0)
{
putchar(\'-\');x=-x;
}
if(x>9)
{
print(x/10);
}
putchar(x%10+\'0\');
}
}
using namespace Newstd;
using namespace std;
int main(void)
{
int n,k,s;
scanf("%d%d%d",&n,&k,&s);
for(register int i=1;i<=k;i++)
{
printf("%d ",s);
}
for(register int i=k+1;i<=n;i++)
{
if(s==1e9)
{
printf("99999999 ");
}
else
{
printf("1000000000 ");
}
}
return 0;
}
以上是关于AT5749 Subarray Sum的主要内容,如果未能解决你的问题,请参考以下文章
lc 862. Shortest Subarray with Sum at Least K
862. Shortest Subarray with Sum at Least K
maximum sum of a subarray with at-least k elements.