質問リンク: Codeforces Round #275 (Div. 2) C - Diverse Permutation
質問の意味: 一連の配置 1~n。シーケンス内の隣接する 2 つのアイテム間の差の絶対値の数 (異なる絶対値の数を指します) が k になることを求めます。シーケンス
アイデア: 1~k+1 を見つけます。シーケンスの最初の部分を作成し、残りの数値を直接出力します。前の構造は、2 つの項の差の絶対値が 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;}