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

メモ

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

yukicoder No.21 平均の差

問題はこちら
No.21 平均の差 - yukicoder

数の集合Xがあるとき、Xの任意の部分集合A対して、Aに属する数の平均はminX以上maxX以下になる(自明)
またN,K≧3なので
{最大値}{最小値}{その他全て}
と分ければmaxXとminXを達成する集合を同時に作ることができるので
maxX-minXが答え

読み込んでソートした方がわかりやすいかもしれないけど
1つずつ読み込んで最小値最大値を更新する方針を最初に思いついた

int main(){
	int i,n,m,M,t;
	scanf("%d%*d",&n);
	scanf("%d",&m);M=m;
	//最大値・最小値の暫定値として1要素目の値をいれておく
	for(i=1;i<n;i++){
		scanf("%d",&t);
		M=t>M?t:M;
		m=t<m?t:m;
	}
	printf("%d",M-m);
	return 0;
}

初期値を設定するのをやめる。
Mの初期値が0なのはいいのだが、mが0だと困るので、各要素は非0であることを利用してmが0の時は必ず代入することにする

m,t;main(M){
	for(scanf("%*d%*d");~scanf("%d",&t);m=t<m|!m?t:m,M=t>M?t:M);
	t=!printf("%d",M-m);
}

いつもどおり読み飛ばし

f,m,t;main(M){
	for(;~scanf("%d",&t);f++>1?m=t<m|!m?t:m,M=t>M?t:M:0);
	t=!printf("%d",M-m);
}

88B