Entries

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

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

コメント

コメントの投稿

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

トラックバック

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

Open 2010 Qual. 1 EASY - GirlsAndBoys (この記事を編集する[管理者用])

Source

TopCoder Open 2010 Algorithm Qualification Round 1 EASY (250pt)
Problem Statement

問題概要

男女が一列に50人以下並んでいる.
異性が隣り合う数が最小になるように並び替えたい.
隣同士をswapすることで並び替えるとして,最小のスワップ回数を求める問題.

解法

 男軍団女軍団

 女軍団男軍団
の両方に対して,スワップの回数を求めて小さい方を返す.
スワップの回数を求めるのには,転倒数を用いた.

C++によるスパゲッティなソースコード
// #includeとusing namespace std;は略

#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)

class GirlsAndBoys {
public:
int sortThem(string in) {
  int i,j,n=in.size();
  int a=0,b=0;

  rep(i,n) REP(j,i+1,n){
    if(in[i]=='G' && in[j]=='B') a++;
    if(in[i]=='B' && in[j]=='G') b++;
  }

  return min(a,b);
}

};

コメント

コメントの投稿

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

トラックバック

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

Appendix

Recent Articles

ブログ内検索

Ads


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