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

メモ

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

yukicoder No.268 ラッピング(Easy)

問題はこちら
No.268 ラッピング(Easy) - yukicoder

縦横高さをa,b,cとすると、各向き1周の長さは2*(a+b),2*(a+c),2*(b+c)となる。
なので、長いところの回数を少なく、短いところの回数を多くするようにすれば良い

int main(){
	int a,b,c,p,q,r;
	scanf("%d%d%d%d%d%d",&a,&b,&c,&p,&q,&r);
	if(a>b)a^=b^=a^=b;
	if(b>c)c^=b^=c^=b;
	if(a>b)a^=b^=a^=b;
	//a,b,cのソート
	if(p>q)p^=q^=p^=q;
	if(q>r)r^=q^=r^=q;
	if(p>q)p^=q^=p^=q;
	//p,q,rのソート
	printf("%d",2*(a+b)*r+2*(a+c)*q+2*(b+c)*p);
	return 0;
}

scanfとソートが長いので、読み込みながらソートしよう
こういう方針

a,b,c,d,e,f;
main(i){
	for(i=1;i<=6;i++){
		scanf("%d",&f);
		e>f?f^=e^=f^=e:0;
		d>e?d^=e^=d^=e:0;
		if(i%3){d=e;e=f;}
		if(i==3){a=d+e;b=d+f;c=e+f;d=e=f=0;}
	}
	printf("%d",a*f+b*e+c*d<<1);
}

ということでぎゅっとして

a,b,c,d,e,f,n;
main(i){for(;n=~scanf("%d",&f);i++%3?d=e,e=f:i-7?a=d+e,b=d+f,c=e+f,d=e=f=0:printf("%d",a*f+b*e+c*d<<1))e>f?f^=e^=f^=e:0,d>e?d^=e^=d^=e:0;}

152B
全然いいアイディアが浮かばない