构造题
假设考虑一种比较简单的情况,
序列里只有两类元素 A=k/n , B=k/n+1
那么可知数组中有 n mod k 个B类元素,其余为A类元素
于是令S1=A , Sn=B
还有(n mod k) −1个B类元素需要确定位置
找规律/分析可发现 Sp=B,p=i∗n/(n mod k)+1 & p∈(1,n)
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<ctime>
#include<iostream>
#include<algorithm>
const int MAXN = 1005;
int n,k;
int ans[MAXN] = {0},f,g;
int main()
{
#ifndef ONLINE_JUDGE
freopen("sgu137.in","r",stdin);
freopen("sgu137.out","w",stdout);
#endif
scanf("%d%d",&n,&k);
f = k/n; g = k%n;
for(int i = 1; i <= n ; i++)ans[i] = f;
for(int i = 1 ; i < g ; i++)ans[i*n/g+1] ++;
ans[n] ++;
for(int i = 1 ; i <= n ;i++)printf("%d ",ans[i]);
#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
#endif
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
本文探讨了一种构造序列的算法,特别关注序列中包含两类元素A和B的情况。通过数学分析,确定了序列中B类元素的数量及位置,提供了一个有效的算法实现,并附带源代码示例。
195

被折叠的 条评论
为什么被折叠?



