Codeforces 1515 B

1515 B

题意

有n只袜子(n为偶数),但左袜子有L只,右袜子有R只,每只袜子的颜色为Ci,可以进行以下操作:换袜子的方向、或者将袜子变色,问进行多少次操作后变成(n/2)对袜子

思路

很曲折,想了很久后终于想清楚,排除配对的袜子后,对于某类袜子i,剩下c2 (假设剩下的是右边)只,它的配对情况要分类讨论:如果总体的右袜子多于左边,那么它可以变换一只袜子的方向配成一对,否则不能变换,举个例子,r1=2,r2=1,r3=1,如果直接将1袜子变换方向配对,那么总花费为3,实际上最少花费为2.

代码

void solve() 
{
	cin>>n>>L>>R;
	for(int i=1;i<=n;i++) l[i]=r[i]=0;
	for(int i=1,x;i<=n;i++) 
	{
		cin>>x;
		if(i<=L) l[x]++;
		else r[x]++;
	}
	int ans=0;
	for(int i=1;i<=n;i++) 
	{
		int x=min(l[i],r[i]);
		l[i]-=x,r[i]-=x;
		L-=x,R-=x;
	}
	for(int i=1;i<=n;i++) 
	{
		while(l[i]>=2&&L>R) 
		{
			l[i]-=2;
			ans++;
			L-=2;
		}
		while(r[i]>=2&&R>L) 
		{
			r[i]-=2;
			ans++;
			R-=2;
		}
	}
	ans+=min(L,R) + abs(L-R);
	cout<<ans<<endl;
}

posted @   Liang2003  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示