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

メモ

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

yukicoder No.45 回転寿司

問題はこちら
No.45 回転寿司 - yukicoder

「今の皿をとった時の最高点」「取らなかった時の最高点」をそれぞれ保存する

int main(){
	int n,i,p=0,q=0,t;
	//pがとった時、qが取らなかった時
	scanf("%d",&n);
	while(n--){
		scanf("%d",&i);
		t=q+i;
		//今の皿をとったときの点
		q=p>q?p:q;
		//今の皿を取らない時の最高点は、前の皿までで決まる
		p=t;
	}
	printf("%d",p>q?p:q);
	return 0;
}

潰すだけ

t,p,q;
main(a){
	for(;~scanf("%d",&a);q=p>q?p:q,p=t,t=1)t=q+a*t;
	p=!printf("%d",p>q?p:q);
}

85B
最後が冗長なので、どうにかしてループを1回多くしたいのだけど、どうにもうまく行かず

t,p,q;main(a){for(;~scanf("%d",&a);q=p>q?p:q,p=t,t=1)t=q+a*t;p=!printf("%d",p>q?p:q);}
//↑上述の85B
t,p,q,a;main(i){for(;i;t=q+a*t,q=p>q?p:q,p=t,t=1)i=~scanf("%d",&a);p=!printf("%d",q);}
t,p,q,a;main(i){for(;~scanf("%d",&a)||i--;q=p>q?p:q,p=t,t=1)t=q+a*t;p=!printf("%d",q);}
t,p,i=2,a;main(q){for(;i-=scanf("%d",&a)<0;q=p>q?p:q,p=t)t=q+a*!!p;p=!printf("%d",q-1);}
p,q,i=2,t;main(a){for(;i-=scanf("%d",&a)<0;q=p>q?p:q,p=t,t=1)t=q+a*t;p=!printf("%d",q);}

以下の83BだとRE

p,q,a,i;
main(t){
	i=~scanf("%d",&a);
	t=q+a*!t;
	q=p>q?p:q;
	p=t;
	i?main(0):printf("%d",q);
}