ABC334

B - Christmas Trees

在x轴上种树,种树的坐标为A+kMA+kMA+kM
L,RL,RL,R之间(闭区间)有几棵树


首先将LRLRLR平移A,这样种树坐标为kMkMkM
然后求LLL能包含的kkkRRR能包含的kkk
最后求出区间树的数量,注意两边都是闭区间。C++64位会越界,用python写就好了。

C - Socks 2

NNN对袜子,每种袜子都是一种颜色Ci=iC_i=iCi=i
现在有一些颜色A1,A2,...AkA_1,A_2,...A_kA1,A2,...Ak少了一只,需要将其重新配对,若只剩奇数只袜子则扔掉一只。
配对后每对袜子的分数是∣Ci−Cj∣|C_i-C_j|CiCj
最小化总分之和。


首先是贪心配对,如单独的袜子是偶数,那么按小到大两两组合。
如例子[1,3][1,3][1,3]
如果是[1,2],[2,3][1,2],[2,3][1,2],[2,3],答案总分和[1,3],[2,2][1,3],[2,2][1,3],[2,2]是一样的。
我们在单独的袜子中观察,因为相邻的两项如果中间有成对袜子
ai<b<aja_i<b<a_jai<b<aj,其中ai,aja_i,a_jai,aj是单独袜子,而bbb是成对袜子
那么(b−ai)+(aj−b)=(aj−ai)+(b−b)(b-a_i)+(a_j-b)=(a_j-a_i)+(b-b)(bai)+(ajb)=(ajai)+(bb)
也就是分数和成对袜子无关,只需要将单独袜子排序。当单独袜子是偶数时,直接两两组合。
如单独的袜子是奇数,那么需要遍历每一只可能丢弃的袜子
[1,3,5,6,7][1,3,5,6,7][1,3,5,6,7]
首先3−1+6−53-1+6-531+65
然后3−1+7−5=(3−1+6−5)−6+73-1+7-5=(3-1+6-5)-6+731+75=(31+65)6+7
然后3−1+7−6=(3−1+7−5)+6−53-1+7-6=(3-1+7-5)+6-531+76=(31+75)+65
然后5−1+7−6=(3−1+7−6)−3+55-1+7-6=(3-1+7-6)-3+551+76=(31+76)3+5
…交错进行更新。

D - Reindeer and Sleigh

NNN只雪橇,每只雪橇都是由AiA_iAi只驯鹿拉动。
现在给出XXX只鹿,问最多能拉几只雪橇。


裸考lower_bound的使用方法。

E - Christmas Color Grid 1

N∗NN*NNN的方格里面,每个格子为红或者绿。
随机抽一个红色的格子将其转换为绿格子,问转换后绿色的连通格个数的期望值。


首先dfs一遍绿色的连通格子数原来有几个cntcntcnt,并对不同连通块标上号。
然后对于每个红格子,求其周围有几个不同的连通块szszsz,答案就是cnt−(sz−1)cnt-(sz-1)cnt(sz1)

F - Christmas Present 2

圣诞老人要给平面坐标上的NNN个小朋友发礼物
他从Sx,SySx,SySx,Sy点的家里出发,依次访问1....n1....n1....n号小朋友,最后需要回到家。
但是他一次只能携带KKK件礼物,因此送完KKK件礼物后需要回到家。
问圣诞老人最少的行程距离。


dp滑动窗口最值。
很明显的有1...n1...n1...n的状态划分,不要想去上一步维护礼物的数量,而是干脆用回到家作为一个状态结束的标志,然后维护kkk步。
f(i)f(i)f(i)为访问完iii个小朋友后回到家的最短距离。从i−ki-kik切分状态。
f(i)=min⁡{f(i−k)+di+di−k+1+path(i−k+1,i)}f(i)=\min \bigg \{ f(i-k)+d_i+d_{i-k+1} + path(i-k+1,i) \bigg \}f(i)=min{f(ik)+di+dik+1+path(ik+1,i)}
其中path(i−k+1,i)path(i-k+1,i)path(ik+1,i)代表从i−k+1i-k+1ik+1点到iii点的路径距离,这个距离可以用前缀和求出来:
s[i]−s[i−k+1]s[i]-s[i-k+1]s[i]s[ik+1]
整理可得:
f(i)=min⁡{f(i−k)+di+di−k+1+si−si−k+1}k<=Kf(i)=\min \bigg \{ f(i-k)+d_i+d_{i-k+1}+s_i-s_{i-k+1} \bigg \} \quad k<= Kf(i)=min{f(ik)+di+dik+1+sisik+1}k<=K
这里把iii相关的提出来,剩下的部分为:
f(i)=min⁡{f(i−k)+di−k+1−si−k+1}+si+dik<=Kf(i)=\min \bigg \{ f(i-k)+d_{i-k+1}-s_{i-k+1} \bigg \} + s_i+d_i \quad k<= Kf(i)=min{f(ik)+dik+1sik+1}+si+dik<=K
剩下的那部分就交由最小堆来解决。

G - Christmas Color Grid 2

N∗NN*NNN的方格里面,每个格子为红或者绿。
随机抽一绿色的格子将其转换为红格子,问转换后绿色的联通格个数的期望值。


前面和E题类似。求连通图的个数。
然后建图。tarjan求对每个节点割完后的连通子图个数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值