読者です 読者をやめる 読者になる 読者になる

メモ

yukicoderで遊んでいる競プロゆるふわ勢

yukicoder No.85 TVザッピング(1)

問題はこちら
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