メモ

yukicoderでゆるふわgolf

yukicoder No.564 背の順

問題はこちら
No.564 背の順 - yukicoder

最初は1位で、高い人が現れるたびに順位は1つ下がる

h,n,t,S;
main(){
	scanf("%d%d",&h,&n);
	S=1;
	for(int i=1;i<n;i++){
		scanf("%d",&t);
		if(t>h)S++;
	}
	printf("%d",S);
	if(S%10==1)puts("st");
	else if(S%10==2)puts("nd");
	else if(S%10==3)puts("rd");
	else puts("th");
}

最初の順位を0位にしておけば最初の処理がまとめられる
また、文字の出力部分は適当なフォーマット指定により短くできる(はじめて知った)

h,t,s;
main(i){
	for(;~scanf("%d",&t);){
		if(!h)h=t;
		if(i--)s+=t>=h;//nだけ読み飛ばし
	}
	printf("%d%.2s",s,"thstndrd"+(s%10<4)*s%10*2);
}
h,t,s;
main(i){
	for(;~scanf("%d",&t);s+=i--&&t/h)h=h?:t;
	printf("%d%.2s",s,"thstndrd"+(s%10<4)*s%10*2);
}

101B