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

メモ

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

yukicoder No.246 質問と回答

問題はこちら
No.246 質問と回答 - yukicoder

二分探索(10^9<2^30)
整数の二分探索といえば普通は終了条件high-low>1にして(low,high)を
(low+(high-low)/2,high)か(low,high-(high-low)/2)に更新していくのだけど
d=high-lowとして終了条件をd>0、(low,d)を(low+d/2,d/2)か(low,d/2)に更新していく方が個人的には直感的にわかりやすいので、こちらで実装した

int main(){
	int i,d=1<<30,s=0;
	while(d){
		d/=2;
		printf("? %d\n",s+d);
		fflush(0);
		scanf("%d",i);
		if(i==1)s+=d;
	}
	printf("! %d\n",s);
	return 0;
}

printfが2つあるのは冗長に見えるのでなんとかしてまとめたい
ということでループ終了条件をprintf文の後ろに持って行った

d=1<<30,s;main(i){for(;fflush(!printf("%c %d\n",d?63:33,s+(d/=2))),d;s+=i*d)scanf("%d",&i);}

REにはならないらしい
92B