AOJ : 0556 - タイル (Tile)

問題概要

http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0556&lang=jp
日本語の問題文なので, 説明は省略.
あんまりやりたくない系の問題.

アルゴリズム

(左端から ai までの距離, 右端から ai までの距離) の内で短い方を取得し, これをwidthとします.
また, (上端から bi までの距離, 下端から bi までの距離) の内で短い方を取得し, これをheightとします.

  • もし, height が height > width の範囲内なら
    • (width - 1) % 3 + 1 が答え
  • もし, 上記の範囲外ならば,
    • (height - 1) % 3 + 1 が答え

正確な if 文に落とし込むまでが難しいですが, それができれば解けます.

プログラム

int main(void){
  int n,k;
  cin>>n>>k;

  while(k--){
    int x,y;
    cin>>x>>y;

    int width = min(x,n-x+1);
    int height = min(y,n-y+1);

    if(height > width){
      cout<<(width - 1) % 3 + 1<<endl;
    }
    else{
      cout<<(height - 1) % 3 + 1<<endl;
    }
  }

  return 0;
}