其他分享
首页 > 其他分享> > Codeforces Round #665 (Div. 2) B - Ternary Sequence

Codeforces Round #665 (Div. 2) B - Ternary Sequence

作者:互联网

Codeforces Round #665 (Div. 2) B - Ternary Sequence

题意

给定两个长度为\(n\) 的序列\(A ,B\) ,他们中分别由\(x_i,y_i,z_i\) 个$ 0 , 1, 2$ 构成,要求构造出这样的\(A,B\)

使得\(\sum C_i\) 最大

\[c_i = \begin{cases} a_ib_i,a_i > b_i\\ 0 , a_i = b_i \\ -a_ib_i , a_i < b_i \end{cases} \]

题解

容易发现\(c_i\) 的取值为(-2,0,2) .

\(c_i\) = -2 当且仅当 \(a_i = 1\) 且 \(b_i = 2\)

\(c_i\) = 2 当且仅当 $a_i = 2 $ 且\(b_i = 1\)

其他情况都是0

贪心策略就是使得\(pair(2,1)\) 尽可能多,\(pair(1,2)\) 尽可能少

因此我们可以使\((1,0),(0,2),(2,1)\) 尽可能多

代码

int main(){
	int T = readint();
	while(T--){
		int tmp, res, x1, y1, z1, x2, y2, z2;
		res = 0;
		scanf("%d%d%d%d%d%d",&x1,&y1,&z1,&x2,&y2,&z2);
		tmp = min(x1, z2);
		x1 -= tmp;
		z2 -= tmp;
		tmp = min(y1, x2);
		y1 -= tmp;
		x2 -= tmp;
		tmp = min(z1, y2);
		z1 -= tmp;
		y2 -= tmp;
		res += tmp << 1;
		res -= min(y1,z2) << 1;
		printf("%d\n",res);
	}
}

标签:tmp,Sequence,665,d%,Codeforces,y1,x2,x1,z1
来源: https://www.cnblogs.com/hznumqf/p/13546000.html