一道比较简单的题。(
完了完了完了要开学了要开学了。。。
给定三个整数 \(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; }