Entries

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

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

コメント

コメントの投稿

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

トラックバック

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

Facebook Hacker Cup 2011 Qualification Round C問題 - Studious Student (この記事を編集する[管理者用])

Source

Facebook Hacker Cup 2011 Qualification Round C問題
Facebook Hacker Cup 2011 Qualification Roundの参加記録

問題概要

10文字以下の文字列がN個 (9以下) 与えられる.
それらを繋げてできる文字列のうち辞書順で最小のものを求める問題.

解法

効率良く解く方法もあるのだけど,今回はNが小さいのでN!通り全部試せば良い.

C++言語のスパゲッティなコード
#include<cstdio>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<algorithm>
#include<string>
#include<utility>
using namespace std;

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

int main(){
  int i,j,k,l,m,n;
  int d[10];
  string in[10];
  string res, tmp;
  char buf[100];
  int size;

  scanf("%d",&size);
  while(size--){
    fprintf(stderr,"%d\n",size);
    scanf("%d",&n);
    rep(i,n) scanf("%s",buf), in[i] = buf;

    res = ""; rep(i,n) res += in[i];

    rep(i,n) d[i]=i;
    do{
      tmp = "";
      rep(i,n) tmp += in[d[i]];
      if(tmp < res) res = tmp;
    }while(next_permutation(d,d+n));

    printf("%s\n",res.c_str());
  }

  return 0;
}

コメント

コメントの投稿

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

トラックバック

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

Appendix

Recent Articles

ブログ内検索

Ads


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