題目鏈接:Codeforces Round #275 (Div. 2) C - Diverse Permutation
題意:一串排列1~n。求一個序列其中相鄰兩項差的絕對值的個數(指絕對值不同的個數)爲k個。求序列、
思路:1~k+1。構造序列前段,之後直接輸出剩下的數。前面的構造可以根據,兩項差的絕對值爲1~k構造。
AC代碼:
#include <stdio.h>
#include <string.h>
int ans[200010];
bool vis[100010];
int n,mark;
int iabs(int a)
{
if(a<0) return -a;
return a;
}
int main()
{
int i,cnt,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
int x,y;
memset(vis,0,sizeof vis);
ans[0]=1;
x=1,y=k+1;
cnt=k;
for(i=1; i<=k; i++,cnt--)
{
int temp=ans[i-1]+cnt;
if(temp>k+1)
temp=ans[i-1]-cnt;
else if(vis[temp])
temp=ans[i-1]-cnt;
ans[i]=temp;
vis[temp]=true;
}
for(i=k+1; i<n; i++)
ans[i]=i+1;
for(i=0; i<n-1; i++)
printf("%d ",ans[i]);
printf("%d\n",ans[i]);
}
return 0;
}