文系プログラマーのプログラミング備忘録

Java、競プロ、数学などについて書いてます

Ehab and another construction problem [ Codeforces Round #525 (Div. 2) A ]

codeforces.com


問題

x (1<=x<=100) が与えられる。
以下の条件を全て満たすように、a,b を選んで出力せよ。条件を満たすように a,b を選べない場合は -1 を出力せよ。


・1<= a,b <=x
・a を b で割り切ることができる
・a*b > x
・a/b < x


考察

x=1 のとき、明らかに選べないので、-1 を出力します。


x=2 以上のとき、仮に b を 2 に固定して考えてみます。
x=2 のとき、a=2, b=2 とすると


・1 <= 2,2 <= 2
・2%2 = 0
・4 > 2
・1 < 2


となって全て満たします。


x=3 のとき、同様に a=2, b=2 とすると全て満たします。
x=4 のとき、a=4, b=2 とすると全て満たします。
x=5 のとき、同様に a=4, b=2 とすると全て満たします。


このように考えていくと、どうやら x が偶数の場合は a=x, b=2、x が奇数の場合は a=x-1, b=2 とすると条件を満たすことができそうです。困ったら偶奇に逃げる癖がついていますが、この先大丈夫でしょうか……。


コード

void solve (FastScanner in, PrintWriter out) {
	
	int n = in.nextInt();
	
	if (n==1) out.println(-1);
	else {
		out.println((n%2==0?n:n-1)+" "+2);
	}

}