Entries

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

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

コメント

コメントの投稿

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

トラックバック

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

SRM457 DIV2 HARD - TheHexagonsDivTwo (この記事を編集する[管理者用])

Source

TopCoder SRM457 DIV2 HARD (1000pt)
Problem Statement

問題概要

六角格子7マスをn以下の数字を埋めたい.
ただし,同じ数字は2回以上使えない,隣り合う数字はmod kで等しいとダメ.
回転して同じものは同じとみなす.
何通り入れ方があるか?
kは9以下.

解法

k^7通りの入れ方を全部試す.

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 TheHexagonsDivTwo {
public:
long long count(int n, int k) {
  int a,b,c,d,e,f,g,i;
  int rest[9];
  long long res=0, tmp;

  rep(i,k) rest[i]=0;
  rep(i,n) rest[(i+1)%k]++;

  rep(a,k) rep(b,k) rep(c,k) rep(d,k) rep(e,k) rep(f,k) rep(g,k){
    tmp=1;
    tmp *= rest[a]--;
    tmp *= rest[b]--;
    tmp *= rest[c]--;
    tmp *= rest[d]--;
    tmp *= rest[e]--;
    tmp *= rest[f]--;
    tmp *= rest[g]--;

    if(a==b || a==c || a==d || a==e || a==f || a==g || b==c || c==d || d==e || e==f || f==g || g==b);
    else res += tmp;

    rest[a]++; rest[b]++; rest[c]++; rest[d]++; rest[e]++; rest[f]++; rest[g]++;
  }

  return res/6;
}

};

コメント

コメントの投稿

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

トラックバック

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

Appendix

Recent Articles

ブログ内検索

Ads


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