メモ

yukicoderでゆるふわgolf

yukicoder No.643 Two Operations No.2

問題はこちら
No.643 Two Operations No.2 - yukicoder

いろんな解説が出来て楽しいのでいろいろ紹介
偏角を見る
座標平面(X,Y)の点との対応を考える。偏角をθとする。
操作によりθ=45°とすることが目的である。
操作1は直線Y=Xでの対称移動であり、操作2は直線Y=(tan22.5°)Xでの対称移動となる。
よって操作1によりθは90°-θに移り、操作2によって45°-θに移る。
これらの操作ではmod 45°でθまたは-θにしか移らないことから、θ=0 mod 45°であることが必要。
そのような(X,Y)の組は(X,0),(X,X),(0,X),(X,-X)の4種しかないので、具体的に確かめることができる。

○線形変換のなす部分群を考える
A=\left(\begin{array}{cc}0&1\\1&0\end{array}\right),\ B=\left(\begin{array}{cc}1&1\\1&-1\end{array}\right)とおく。
操作1はAに、操作2はBに対応する線形変換である。
A,Bが生成するGL(2,\mathbb{R})の部分群を定数倍で割ったもの、< A,B >/\lambda Iを考える。
(以下、行列は定数倍で割った同値類で考えるものとする)
AA=I,\ BB=I,\ ABAB=BABAが成り立つことがわかるので、
< A,B >/\lambda I=\{I,A,B,AB,BA,ABA,BAB,ABAB\}となることがわかる。よってこれらを具体的に計算することで求めることができる。

○射影空間へうつす
X=Y=0なら明らか。そうでないとする。
操作1をf、操作2をgと書く。またα(X,Y)=X/Yとおく。
1/0=∞、1/∞=0など適当な演算を定める。ただし∞は正負を区別しない(要するにαはR^2\{0}からP^1への自然な写像
関数の合成について
αf=1/α、αgg=α、αgf=-αg
となることが計算により確かめられるので、f,gの操作を行って得られるものは
±α、±1/α、±αg、±1/αgのみであることがわかる。
よってこれらのいずれかが1となるためにはα(X,Y)=±1またはα(X+Y,X-Y)=±1が必要。
これらについては具体的に考えることができる。

main(){
	scanf("%d%d",&x,&y);
	if(x==y)puts("0");
	else if(y==0)puts("1");
	else if(x==0)puts("2");
	else if(x==-y)puts("3");
	else puts("-1");
}

はい

main(x,y){
	scanf("%d%d",&x,&y);
	printf("%d",x-y?y?x?x+y?-1:3:2:1:0);
}

67B