9
T1.午枫的切蛋糕
题目大意
小枫有n个朋友,加上自己共n+1人,需要将蛋糕平均分成n+1份,每刀沿直径或半径切,求最少刀数。
题目思路分析
总人数m = n+1,如果m=1,无需切刀输出0。如果m为偶数,沿直径切m/2刀,每刀分两份,可平均分。如果m为奇数,沿半径从中心切m刀,直接分m份。代码通过判断m的奇偶性直接计算结果。
易错点注意
注意n=0时m=1,输出0而非其他。边界如n=1(m=2,偶,输出1)需验证奇偶逻辑正确。
AC代码
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T2.午枫的卡片游戏
题目大意
小枫卡片顺序固定为a[0..n-1],小午卡片b可任意排列,每轮比大小,相同算小枫胜,求小午能否胜超过n/2轮(严格多数)。
题目思路分析
将a和b升序排序,从大到小匹配:用小午的最大b[j]尝试赢小枫的最大未匹配a[i],若b[j]>a[i]则小午胜一轮,同时i--,j--,否则只i--丢弃a[i]。统计胜轮c,若c >= n/2 +1则YES否则NO。此贪心确保小午用最小必要的大牌赢最多轮。
易错点注意
注意相同算小枫胜,故比时严格>才计小午胜。n=1时n/2+1=1,需仔细检查边界。
AC代码
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T3.午枫的分割数组
题目大意
将数组v分割成前后两非空部分,小午前小枫后,各选<=k1/k2个数,最优使各自子集中频率最高数的数值最大,求小午是否一定胜(其值>小枫值)。
题目思路分析
由于k1,k2>=1,各部分最优频率最高数的值即部分最大值(选只含最大值的子集即可)。计算前缀最大p[i](0到i的最大)和后缀最大s[i](i到n-1的最大)。遍历分割点i=0到n-2,若存在p[i] > s[i+1]则小午取前获胜,输出YES否则NO。
易错点注意
注意分割必须非空,故i<n-1。数组索引从0,p[0]=v[0],s[n-1]=v[n-1]需正确初始化。
AC代码
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T4.小午的构造
题目大意
用x个a、y个c、z个w构造ac、aa、wa三种单词,最大化单词数m,并在m最大下最小化wa数。
题目思路分析
先用min(x,y)做ac,剩余ra = x - min(x,y)个a。最大wa为mw = min(ra,z),最大m = ac + mw + (ra - mw)/2(剩余a做aa)。从wa=0到mw枚举,计算m = ac + wa + (ra - wa)/2,找到首个达最大m的wa作为最小wa。
易错点注意
注意ra - wa须偶数才能全做aa,否则/2 floor。T<=1e5,x,y,z<=100,枚举wa<=100高效。
AC代码
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T5.午枫的MEX
题目大意
求mex{i ⊕ j | i ∈ [1, n], j ∈ [1, n]},多组查询n<=1e18。
题目思路分析
对于n<=2,直接输出1(验证集合缺1或为{0,3}缺1)。对于n>2,i xor j范围[0,2n-1]内,集合覆盖[0,2k2^k2k -1]其中2k2^k2k > n-1的最大幂,mex为2k2^k2k(floor(log2(n-1))+1位)。代码计算n-1的最高位k+1,输出1LL<<k。
易错点注意
n=1或2特殊处理,避免log2(0)未定义。n=1e18用ll,移位小心溢出。
AC代码
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T6.午枫的陪伴时间
题目大意
n选项Each从aia_iai 起连续t天陪伴,costicost_icosti ,或不选买v_i礼物;选后[aia_iai ,aia_iai +t-1]内其他选项不可选,求最小总花费。
题目思路分析
初始花费s = sum viv_ivi (全买礼物)。每个选项收益w = viv_ivi - costicost_icosti ,若w>0更新起始d=a_i的最大b[d]。用dp f[i]表示前i个起始日最大收益:f[i] = max(f[i-1], f[i-t] + max(0,b[i])),避免重叠。最终花费s - f[m],m=n-t+1。
易错点注意
aia_iai <=n-t+1,b[1..m]。dp索引从1,f[0]=0,i-t>=0检查。
AC代码
有帮助,赞一个