Entries

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

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

コメント

コメントの投稿

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

トラックバック

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

SRM523 DIV2 EASY - AlphabetPath (この記事を編集する[管理者用])

Source

TopCoder SRM523 DIV2 EASY (250pt)
Problem Statement

問題概要

幅50以下,高さ50以下のグリッドが与えられ,各セルは空白かアルファベット大文字が一文字が書かれている.
各26種類のアルファベットは,ちょうど1回だけ,書かれている.
上下左右に隣接しているとして,Aから順番に移動して,Zまで移動する長さ26のパスが存在するかどうかを求める問題.

解法

各アルファベットについて,自分より1つ先のものが隣にあるかどうかを調べた.

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 AlphabetPath {
public:
string doesItExist(vector <string> letterMaze) {
  int i, j, k;
  int x, y;
  char bef, aft;
  int bef_x, bef_y, aft_x, aft_y;

  x = letterMaze.size();
  y = letterMaze[0].size();

  REP(k,1,26){
    bef = 'A' + k - 1;
    aft = 'A' + k;

    rep(i,x) rep(j,y){
      if(letterMaze[i][j]==bef) bef_x = i, bef_y = j;
      if(letterMaze[i][j]==aft) aft_x = i, aft_y = j;
    }

    if( abs(bef_x-aft_x)+abs(bef_y-aft_y) != 1 ) return "NO";
  }

  return "YES";
}

};

コメント

コメントの投稿

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

トラックバック

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

Appendix

Recent Articles

ブログ内検索

Ads


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