Entries

スポンサーサイト (この記事を編集する[管理者用])

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rsujskf.blog32.fc2.com/tb.php/2423-50fbc5a9
この記事にトラックバックする(FC2ブログユーザー)

Round #209 DIV2 B問題 - Permutation (この記事を編集する[管理者用])

Source

Codeforces Round #209 DIV2 B問題 (1000pt)
Problem description

問題概要

要素数 $n$ の置換 $a$ で,
 $\displaystyle \sum_{i=1}^n \left| a_{2i-1} - a_{2i} \right| - \left| \sum_{i=1}^n (a_{2i-1} - a_{2i}) \right| = 2k$
となるものを $1$ つ求める問題.
$1 \leq n \leq 50000$
$0 \leq 2k \leq n$

解法

$2k \leq n$なので,適当に,どうやっても良い.
例えば,$a_1 = 1+k, a_2 = 1$ として残りは昇順にする.
または,$a_i = i$ としておいて,$k$ 箇所だけ $a_{2i-1}$ と $a_{2i}$ をスワップするなど.

C言語のスパゲッティなコード
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)

int main(){
  int k, n;
  static int res[1100000];

  int i, j;

  scanf("%d%d",&n,&k);

  if(k==0){
    rep(i,2*n) res[i] = i+1;
  } else {
    res[0] = 1+k;
    res[1] = 1;
    j = 0;
    REP(i,2,2*n){
      j++;
      if(j==1) j++;
      if(j==1+k) j++;
      res[i] = j;
    }
  }


  rep(i,2*n){
    if(i) putchar(' ');
    printf("%d",res[i]);
  }
  puts("");

  return 0;
}

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rsujskf.blog32.fc2.com/tb.php/2423-50fbc5a9
この記事にトラックバックする(FC2ブログユーザー)

Appendix

Recent Articles

ブログ内検索

Ads


(プライバシーポリシー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。