川のブログ

川の適当気ままなブログです。 

AOJ 0556 Tile

こんにちは川です。

今回は、規則性を見出す問題ですかね。

赤である場合は

(縦1列) ai % 3 == 1   で ai - bi が 0 以上 で N - bi が 3 * (ai / 3)  もしくは、

(横1列) bi % 3 == 1 で bi - ai が 0 以上 で N - ai が 3 * (bi / 3)

 

青である場合は

(縦1列) ai % 3 == 2   で ai - bi が 0 以上 で N - bi が 3 * (ai / 3) -1  もしくは、

(横1列) bi % 3 == 2 で bi - ai が 0 以上 で N - ai が 3 * (bi / 3) -1

 

それ以外が黄ですね。

やってみればわかります。

 

ソースコード

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int N,n;
    cin>>N>>n;
    for(int i=0,ai,bi;i<n;i++){
        cin>>ai>>bi;
        if(ai>(N+1)/2)ai=N-ai+1;
        if(bi>(N+1)/2)bi=N-bi+1;
        if(ai%3==1&&bi-ai>=0&&N-bi>=3*(ai/3)||
           bi%3==1&&ai-bi>=0&&N-ai>=3*(bi/3))cout<<"1\n";
        else if(ai%3==2&&bi-ai>=0&&N-bi>=3*(ai/3)-1||
                bi%3==2&&ai-bi>=0&&N-ai>=3*(bi/3)-1)cout<<"2\n";
        else cout<<"3\n";
    }
}