AtCorder比赛笔记

ARC-158

Performance:1703
time:2023.3.12
比赛状态:切了 A,B ,两发罚时。(写 B忘删调试复制粘贴导致变量名写错)。C 题调了 50 分钟结果因为离散化写错 TLE

A - +3 +5 +7

Difficulty:720
题意
给定三个整数,每次操作可以对三个数分别 +3+5+7 ,求最少多少次操作后三个数相同。不可能输出 "1" 。

Solution:我们考虑对三个数排序,操作等价于对两个数分别 2+2 ,每次对最大最小值分别 +22,直到两个数相同,接下来每三次操作一循环,例如:“3,3,9”,操作为“ +2,+2,2 ”如此让数值逼近至相同。

B - Sum-Product Ratio

Difficulty:1446
题意:给定 n 个非零数,求 xi+xj+xkxixjxk 的最大与最小值,其中三个数编号互不相同。

Solution:反正这类题就是最大最小正数,最大最小负数,然后乱搞,我们可以无脑一点,直接找到这四类数每类三个,然后暴力枚举。

C - All Pair Digit Sums

Difficulty:1875
题意:给定 n 个整数,设 f(x)x 各位数字的和。
i=1nj=1nf(a[i]+a[j])n2e5

Solution:显然两个数相加,f(a[i]+a[i])=f(a[i])+f(a[j])9×g(a[i],a[j])g(a[i],a[j]) 表示两数相加各位数的进位次数之和。所以我们只需要求出有多少次进位。考虑从个位,十位,百位依次想上考虑,对于 a[i] ,对他能在千位进位的数只要满足 a[j]%1000>=1000a[i]%1000(千位时为 1000 ,其他依次类推),就可以了,考虑用树状数组离散化后求解。复杂度 O(15nlogn)

alarming:至于我为什么调了 50 分钟,赛后发现离散话写错,导致某些时候离散化从零开始赋值,树状数组碰到 0 直接就死循环了。可叹。

ARC-157

Performance:1067
time:2023.3.16
打的很差,先是把 B 题目看错,然后又调不出来,耗时 1.5 h 也没做出来。

A - XXYYX

Difficulty:348
题意:求是否存在一个字符串,由 XY 组成,长度为 N ,且字符串中有 A 个子串为 XX ,有 B 个子串为 XY ,有 C 个子串为 YX ,有 D 个子串为 YX ,且 A+B+C+D=n1

Solution:显然是把 ABCD 拼接起来。那么如果一个点能接上下一个点就建边。

可见 ABCD 形成了一个大环,可以同时消耗。

int _4=min(min(A,B),min(C,D));
A-=_4,B-=_4,C-=_4,D-=_4;

然后剩下的三个点(或两个)特判一下。因为 AD 有自环,如果有一个 BC 他们一定能消耗掉。而 BC 则只能一比一消除。所以:

if(A && D && !C && !B){
	printf("No\n");
	return 0;
}
if(abs(B-C)<=1)printf("Yes\n");
else printf("No\n");

B - XYYYX

Difficulty:1529
其实答案就是 y 的总数减去 y 的段数,但是某人代码能力太差。
受不了。

  1. 忘记break。
  2. 忘记排序。
  3. 忘记特判没有 y 的情况。

C - YY Square

Difficulty:1802
如果求的是权值和,那么这题很好做,直接 DP ,可惜求的是平方和。我们意识到 f[i1][j]=a12+a22+a32 ,假设到这个点时权值加一,实际加的是 (a1+1)2+(a2+1)2+(a3+1)2 ,也就等于 (a12+a22+a32)+2×(a1+a2+a3)+3,然后这道常规题就结束了,同时维护权值与权值的平方即可。

ARC-156

Performance:1425
time:2023.3.16

A - Non-Adjacent Flip

Difficulty:510

B - Mex on Blackboard

Difficulty:1415
首先,每次写在黑板上的数只能是 [0,mex]mex 是目前现在的数的 mex ,显然,当写的数为 [0,mex1] 时,mex 不变,写 mex 时,下次 mex 会发生改变。

设第 imexG[i] 。(这个可以预处理)我们枚举黑板上的数最大不超过是第 i+1mex ,但大于等于第 imex ,那么必须先放下第 i 个数,分别为第 1>imex ,所以剩下方案就是 ki 个空,每个空取值为 [0,G[i+1]1],这个可以用组合数求(我脑瓜有点问题这一步卡了半天),用插板法,每个取值对应一个区间,但是有时候一个值可以每人选,即区间为空,这样不好弄,所以我们自费给每个区间多一个空,然后保证每个区间至少一个空,答案就是 Cki+G[i+1]1G[i+1]1

C - Tree and LCS

Difficulty:2155
简化题意 :给定一棵树,对每个点赋予一个 [1,n] 的值,且每个点的值都不同,求所有树上路径值的序列编号序列 LCS 的最大值的最小值的构造方案。

Solution:首先这个最小值可以到 1 。我们考虑下图这种情况:

假设我们手摸出了一棵 5 个节点的树,圆外的是节点的值,圆内是编号,当我们加入新的节点 67 时,显然只要交换两者的值就可以把答案维护在 1 ,利用这种思路,我们可以考虑如何构造:
每次取出树中两个入度为 0 的节点,让他们分别以对方的编号为值,这题就解决了。

YZOI-20230319

Performance:157/300/400 (实际分数/期望分数/满分)
time:2023.3.19

A-weights

Difficulty: ★★★

Solution 1

推推推,假设我们选择数的集合是 A ,那么他们能表示的最小数是 gcd(A1,A2...An) ,如果剩下的数都是 gcd(A1,A2...An) 的倍数,那么他们就是能被表示的。于是我们可以一直选数直到所有数都是 gcd(A1,A2...An) 的倍数,但是选数的顺序是什么呢?退退退,使用模拟退火 确定选数顺序,这题就解决了。

Solution 2

显然根据人类智慧 ,这个答案不会太大。我们直接暴力搜索每个数选或不选,基本剪枝后就能过。

B-data

Difficulty: ★★☆
考虑没有原序列,那么这就是个裸的动态开点线段树,复杂度 O(1e5log1e9) 。有原序列的话我们可以用 ST 表查询原序列的最小值。
没想到原题是远古CF2300

C-Galaxy Union

Difficulty: ★★★☆
重题,博客以前写过了

ABC-294

Performance:2122
time:2023.3.19
ex 题很难,ACer 不大于 10 。这场主要输在 F 题,想了半天。 B 题眼瞎贡献一次罚时。总体还是比较好。

E - 2xN Grid

Difficulty:792
采用双指针,两列齐头并进,每次只要移动落在后面的指针,考虑移动后超过与不超过两种情况。

F - Sugar Water 2

Difficulty:1891
我们考虑二分答案 C,然后求出有多少个组合浓度大于 C ,让这个数量等于 k ,那么重点在于求有多少个组合浓度大于 C
100(xi+xj)xi+yi+xj+yj ,整理得: 100xik(xi+yi)>=k(xj+yj)100xj 。然后们把这个值在两个数组分别从小到大排序,用双指针即可求解。但是这简单题做了 30min ,主要原因是这类题做的少,其实以前做过类似的一道,我还写成博客来着,没有那题得经验这题可能甚至切不出来。

posted @   FJOI  阅读(116)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
点击右上角即可分享
微信分享提示