Entries

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

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

コメント

コメントの投稿

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

トラックバック

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

Beta Round #41 B問題 - Game of chess unfinished (この記事を編集する[管理者用])

Source

Codeforces Beta Round #41 B問題
Problem description
Beta Round #41の自分の参加記録

問題概要

白い駒がキング1個,ルーク2個,黒い駒がキング1個与えられる.
キングは8方向で接してる関係にはない.
白がチェックメイトしている状態かどうかを判定する問題.
チェックメイトとは,
 現在白が1ターン動くと黒が取られる状況 かつ
 黒がどこに移動しようが,次のターンに白が黒を取れる
という場合.

解法

要するに,黒い駒が,1マス動くor動かない場合,全部白に取られるならばチェックメイトと出力する.

C言語のスパゲッティなコード
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)

int chk1(int dx,int dy){
  if(dx<0) dx=-dx; if(dy<0) dy=-dy;
  if(dx<=1 && dy<=1) return 1;
  return 0;
}

int chk2(int dx,int dy){
  if(dx==0 && dy==0) return 0;
  if(dx==0 || dy==0) return 1;
  return 0;
}

int main(){
  int i,j,k,l,m,n;
  int di,dj,ok;
  char in[4][4];

  while(scanf("%s%s%s%s",in[0],in[1],in[2],in[3])==4){
    ok=0;
    REP(di,-1,2) REP(dj,-1,2) {
      in[3][0] += di; in[3][1]+=dj;
      while('a'<=in[3][0]&&in[3][0]<='h' && '1'<=in[3][1]&&in[3][1]<='8'){
        if(chk1(in[2][0]-in[3][0],in[2][1]-in[3][1])) break;
        rep(i,2){
          if(chk2(in[i][0]-in[3][0],in[i][1]-in[3][1])){
            rep(k,3){
              if(in[i][1]==in[3][1] && in[i][1]==in[k][1] && ((in[i][0]<in[k][0]&&in[k][0]<in[3][0])||(in[i][0]>in[k][0]&&in[k][0]>in[3][0]))) break;
              if(in[i][0]==in[3][0] && in[i][0]==in[k][0] && ((in[i][1]<in[k][1]&&in[k][1]<in[3][1])||(in[i][1]>in[k][1]&&in[k][1]>in[3][1]))) break;
            }
            if(k==3) break;
          }
        }
        if(i<2) break;
        ok=1; break;
      }
      in[3][0] -= di; in[3][1] -= dj;
    }
    if(ok) puts("OTHER"); else puts("CHECKMATE");

    break;
  }

  return 0;
}

コメント

コメントの投稿

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

トラックバック

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

Appendix

Recent Articles

ブログ内検索

Ads


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