kmjp's blog

競技プログラミング参加記です

お誕生日コンテスト : A - A + B

2月はことごとくSRMと用事がぶつかってSRMの頻度が減るため、こちらに出てみました。
ABCは何とか時間内に解いて、EFXで微妙な部分点を取って終了。1ページ目には残れずでした。
http://birthday0410.contest.atcoder.jp/tasks/birthday0410_a

問題

AとBを足すプログラムが3つ与えられる。
これらのプログラムに誤答をさせる入力を作成せよ。

解法

プログラムの詳細AtCoderのサイト参照。

1つめは、入力の終了をA+B!=0で判定しているので、"1 -1"を与えると不正に終了する。
2つめは、絶対値を取る処理をしているため、-2^31を与えると符号反転で値がおかしくなる。
3つめは、負の値を考慮してないので、適当な負の値を突っ込んでおかしくなったものを与えればよい。

void solve() {
	int f,i,j,k,l,x,y;
	cin>>x;
	if(x==1) {
		_P("1 -1\n");
	}
	if(x==2) {
		_P("-2147483648 0\n");
	}
	if(x==3) {
		_P("-10000000 -100000000\n");
	}
	_P("0 0\n");
	
}

まとめ

さすが普段のSRMやCFとは異なる趣の問題。