(unrated)TopCoder SRM 651 Div2 参加記


SRM651参加しました。…が今回コンテストに不具合があったらしく、年明けコンテスト同様unratedになりました。

unrated通知がきてからも、一応コンテスト自体は動いていたようですが、私は手を止めてしまったので、通知が来るまでの分だけ貼っておきます。

またしても、unrated コンテストだったうえに、そこで止めてしまったので実質250しか通せていませんでした。

こうしてまとめてみると、unratedで止めたと言っても、Mediumも通せるか怪しい感じで結構今回ボロボロでした。
安定度が前よりも落ちている気がするので、ちゃんと解き直して治しておかないと…

解き直ししたら追記、もしくは別記事に書きます。

250 : RobotOnMoonEasy

問題概要

以下の命令を受け付ける月面探査ロボットがあり、ロボットの初期位置(board配列内の’S’)や障害物の情報が配列boardで与えられる。

  • U : board上の上に移動する
  • D : board上の下に移動する
  • L :  board上の左に移動する
  • R : board上の右に移動する

ただし、移動先に障害物(board配列では’#’表記)がある場合、移動せずに次の命令に進める。board外にロボットが出ると壊れてしまう。

ロボットへの命令が文字列Sで与えられるので、その命令を処理した際、ロボットが壊れているか否かを判定する。

解法

この問題は、単純に命令をシュミレーションしていき、その課程あるいは結果でロボットが場外に出ていないか否かを判定するだけでOKです。ただ、障害物の処理やロボットの初期状態がboard上の表記で与えられるので、その処理が少々注意が必要です。

コード


class RobotOnMoonEasy {
public:
string isSafeCommand(vector<string> board, string S) {
int x,y;
for (int i=0; i<board.size(); i++) {
for (int j=0;j<board[i].size(); j++) {
if(board[i][j]=='S')
{
x=j;
y=i;
board[i][j]=='.';
break;
}
}
}
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
string move="UDLR";
for(int i=0;i<S.size();i++)
{
for(int j=0;j<4;j++)
{
if(move[j]==S[i])
{
int nx=x+dx[j];
int ny=y+dy[j];
if(nx<0 ||nx>=board.size() ||
ny<0 || ny>=board[x].size())
return "Dead";
if(board[nx][ny]=='.')
{
x+=dx[j];
y+=dy[j];
}
break;
}
}
}
return "Alive";
}
};

500 : FoxAndSouvenirTheNext

問題概要

整数の配列valueが与えられる。この配列から、合計が同じかつ、整数の個数が同じである2つの集合に分けられるか否かを判定する。

解法

解法考えている途中でunrated通知がきたので、解ききれませんでした。
後日practiceで解けたら追記します。

1000 : FoxConnection4

問題開く前にunrated通知がきたので、こちらもmid同様後日practiceで解けたら追記します。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください