Entries

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

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

コメント

コメントの投稿

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

トラックバック

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

June 2011 Cook-Off 3問目 - Correctness of Knight Move (この記事を編集する[管理者用])

Source

codechef June 2011 Cook-Off 3問目
Problem Statement

問題概要

チェス盤 (サイズは8*8) の座標はa~hまでと1~8までをくっつけて,a7とかh3のように表す.
次の形式で座標が2つ与えられる.
 座標-座標
その座標間はナイトがちょうど1回で移動できる関係にあるかどうかを求める問題.
座標が不正,もしくは,形式が不正ならそれを指摘する問題.
各行ごとにテストケースを処理する.

解法

やるだけ.改行文字やスペースの処理に注意.

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 main(){
  int i,j,k,l,m,n;
  int dx, dy;
  char in[1000];
  int size;

  gets(in); size = atoi(in);
  while(size--){
    gets(in);
    for(i=0;;i++) if(in[i]<' ') break;
    if(i!=5){ puts("Error"); continue; }
    if('a'<=in[0] && in[0]<='h'); else {puts("Error"); continue;}
    if('1'<=in[1] && in[1]<='8'); else {puts("Error"); continue;}
    if(in[2] == '-'); else {puts("Error"); continue;}
    if('a'<=in[3] && in[3]<='h'); else {puts("Error"); continue;}
    if('1'<=in[4] && in[4]<='8'); else {puts("Error"); continue;}

    dx = in[0] - in[3];
    dy = in[1] - in[4];
    if(dx < 0) dx = -dx;
    if(dy < 0) dy = -dy;
    if(dx==1 && dy==2){ puts("Yes"); continue; }
    if(dx==2 && dy==1){ puts("Yes"); continue; }
    puts("No");
  }


  return 0;
}

コメント

コメントの投稿

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

トラックバック

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

Appendix

Recent Articles

ブログ内検索

Ads


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