問題はこちら
No.85 TVザッピング(1) - yukicoder
ループを見つける問題なので始点は関係ない
場合分け
少なくとも一方が1の時
他方が2ならYES、3以上ならNO
n*mが奇数の時
市松模様による塗り分けを考えれば不可能
n*mが偶数の時
必要なら全体を90度回転させて、横が偶数として良い
この時左上からスタートし、まず右上までまっすぐ右へ動き、その後W字状に残りの全てのマスを辿って左上に戻ることができる
まとめると
NO⇔「((n=1 or m=1) and n*m≧3) or n*m%2==1」
YES⇔「(n>1 and m>1 and n*m%2==0) or n*m==2」
NOの方は条件がややこしいのでYESの方を使う
int main(){ int n,m; scanf("%d%d",&n,&m); puts(n*m==2||(n>1&&m>1&&n*m%2==0)?"YES":"NO"); return 0; }
頑張ってまとめる
n;main(m){n=scanf("%d%d",&n,&m)>puts(n>1&m>1&~(n&m)|n*m<3?"YES":"NO");}
71B