首页 > 其他分享 >Codeforces 1515 B

Codeforces 1515 B

时间:2023-06-08 17:34:51浏览次数:40  
标签:袜子 ++ Codeforces ans 1515 配对

1515 B

题意

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

思路

很曲折,想了很久后终于想清楚,排除配对的袜子后,对于某类袜子\(i\),剩下\(c \geq 2\) (假设剩下的是右边)只,它的配对情况要分类讨论:如果总体的右袜子多于左边,那么它可以变换一只袜子的方向配成一对,否则不能变换,举个例子,\(r_1=2,r_2=1,r_3=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;
}

标签:袜子,++,Codeforces,ans,1515,配对
From: https://www.cnblogs.com/LIang2003/p/17467163.html

相关文章

  • CodeForces - 658A Bear and Reverse Radewoosh (模拟)水
    TimeLimit: 2000MS MemoryLimit: 262144KB 64bitIOFormat: %I64d&%I64uCodeForces-658ABearandReverseRadewooshSubmit StatusDescriptionLimakandRadewoosharegoingtocompeteagainsteachotherintheupcomingalgorithmiccontest.Theyareequ......
  • CodeForces - 616B Dinner with Emma (模拟)水
    TimeLimit: 1000MS MemoryLimit: 262144KB 64bitIOFormat: %I64d&%I64uCodeForces-616BDinnerwithEmmaSubmit StatusDescriptionJackdecidestoinviteEmmaoutforadinner.Jackisamodeststudent,hedoesn'twanttogotoanexpensiveres......
  • CodeForces - 659B Qualifying Contest (模拟)水
    TimeLimit: 1000MS MemoryLimit: 262144KB 64bitIOFormat: %I64d&%I64uCodeForces-659BQualifyingContestSubmit StatusDescriptionVerysoonBerlandwillholdaSchoolTeamProgrammingOlympiad.Fromeachofthe m Berlandregionsateamoftwopeo......
  • CodeForces - 670A Holidays (模拟) 水
    TimeLimit: 1000MS MemoryLimit: 262144KB 64bitIOFormat: %I64d&%I64uCodeForces-670AHolidaysSubmit StatusDescriptionOntheplanetMarsayearlastsexactly nInputThefirstlineoftheinputcontainsapositiveinteger n (1 ≤ n ≤ 1 000......
  • Codeforces Round 876 (Div. 2) 题解 A - D
    A.TheGoodArray题目大意给定两个整数\(n\)和\(k\),规定一个\(01\)数列为好的的条件是,对于\(1\simn\)中任意的\(i\),都有:\(a\)的前\(i\)个元素中至少有\(\lceil\frac{i}k\rceil\)个都是\(1\)。\(a\)的后\(i\)个元素中至少有\(\lceil\frac{i}k\rceil\)个都是......
  • codeforces.com/contest/1553/problem/B
    简单字符串哈希题意给一个字符串s和t,问从s的某个位置开始,向右到某个点后再向左,顺序遍历到的字符形成的字符串可否为t。思路数据只有500,\(O(n^3)\)可过,枚举转折点,然后枚举开头和结尾。代码intn,m,k;ullHash[1010],rHash[1010],p[1010],rp[1010],sum;voidsolve(){ ......
  • Codeforces Round 876 (Div. 2) A-D
    比赛地址A.TheGoodArray题意:定义一个数组是good的要求有:从左往右所有的i,前i个数中至少有[i/k]个数是1从右往左所有的i,前i个数中至少有[i/k]个数是1问good数组对于n而言最少需要多少个1Solution先从左往右填1,直到满足第一个条件,然后从右往左填1,直到满足第二个条件voidso......
  • ACM-CodeForces-#685(Div.2)
    A.SubtractorDivide#include<iostream>usingnamespacestd;intmain(){ intT,n; cin>>T; while(T--) { cin>>n; if(n<=3) n--; else n=2+(n&1); cout<<n<<endl; } return0;}B.Non-SubstringSubsequence#in......
  • Codeforces 1566G - Four Vertices(线段树分治)
    交了整整2页,本来想用随机化卡过去的,后来发现我的实现跑得太慢就写正常做法了。首先发现最优答案对应的四个点只可能有以下两种可能:\(a,b\)间有边,\(c,d\)间有边,此时答案是\(a,b\)边权值加\(c,d\)边权值。\(a\)与\(b,c,d\)三个点间都有边,此时答案是三条边权值之和。......
  • Codeforces 1801D The way home
    看到shortestpaths来做的。首先有一个贪心的策略,对于当前点\(u\)若不能直接往后走则肯定是选择经过的点中\(w_i\)最大的加。很好理解,证明就不需要了。所以可以定义状态\(f_{u,mx}\)为\(u\)点最大能加的值为\(h_{mx}\)的最优状态,\(h\)是\(w\)离散化后的数组。......