問題はこちら
No.84 悪の算盤 - yukicoder
R≠Cのとき
回転一致の仕方は2通り
回転により1-based indexの座標により(i,j)で表されるマスは(R+1-i,C+1-j)に移るので
R,Cの少なくとも一方が偶数の時、回転により自身と一致することはない
よってR*C/2-1
R,Cの両方が奇数の時、中心の1点は回転により不変
よって(R*C-1)/2+1-1=floor(R*C/2)
R=Cのとき
回転一致の仕方は4通り
R=Cが偶数の時、回転により自身と一致することはない(十字に4領域でわけると、必ず隣の領域に移る)
よってR*C/4-1
R=Cが奇数の時、中心の1点は回転により不変
よって(R*C-1)/4+1-1=floor(R*C/4)
以上をまとめる
int main(){ long R,C; scanf("%ld%ld",&R,&C); // if(R==C){ ←間違い if(R!=C){ if(R*C%2==0)printf("%ld",R*C/2-1); else printf("%ld",R*C/2); }else{ if(R*C%2==0)printf("%ld",R*C/4-1); else printf("%ld",R*C/4); } return 0; }
ところで
R*Cが奇数の時floor(R*C/2)、偶数の時R*C/2-1というのは
floor((R*C-1)/2)とまとめることができる
4で割る時も同様にまとめることができ
n; main(m){ scanf("%d%d",&n,&m); n=!printf("%ld",1L*n*m-1>>1+(n==m)); }
67B