AtCorder比赛笔记

\(\color{orange}\text{ARC-158}\)

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

\(\color{purple}\text{A - +3 +5 +7}\)

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

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

\(\color{purple}\text{B - Sum-Product Ratio}\)

\(\color{RED}\text{Difficulty:1446}\)
题意:给定 \(n\) 个非零数,求 \(\frac{x_i+x_j+x_k}{x_ix_jx_k}\) 的最大与最小值,其中三个数编号互不相同。

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

\(\color{purple}\text{C - All Pair Digit Sums}\)

\(\color{RED}\text{Difficulty:1875}\)
题意:给定 \(n\) 个整数,设 \(f(x)\)\(\text{x}\) 各位数字的和。
\(\sum_{i=1}^{n}\sum_{j=1}^{n}f(a[i]+a[j])\)\(n\le 2e5\)

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

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

\(\color{orange}\text{ARC-157}\)

\(\color{RED}\text{Performance:1067}\)
\(\color{GREEN}\text{time:2023.3.16}\)
打的很差,先是把 \(B\) 题目看错,然后又调不出来,耗时 \(\text{1.5 h}\) 也没做出来。

\(\color{purple}\text{A - XXYYX}\)

\(\color{RED}\text{Difficulty:348}\)
题意:求是否存在一个字符串,由 \(X\)\(Y\) 组成,长度为 \(N\) ,且字符串中有 \(A\) 个子串为 \(XX\) ,有 \(B\) 个子串为 \(XY\) ,有 \(C\) 个子串为 \(YX\) ,有 \(D\) 个子串为 \(YX\) ,且 \(A+B+C+D=n-1\)

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

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

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

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

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

\(\color{purple}\text{B - XYYYX}\)

\(\color{RED}\text{Difficulty:1529}\)
其实答案就是 \(y\) 的总数减去 \(y\) 的段数,但是某人代码能力太差。
受不了。

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

\(\color{purple}\text{C - YY Square}\)

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

\(\color{orange}\text{ARC-156}\)

\(\color{RED}\text{Performance:1425}\)
\(\color{GREEN}\text{time:2023.3.16}\)

\(\color{purple}\text{A - Non-Adjacent Flip}\)

\(\color{RED}\text{Difficulty:510}\)

\(\color{purple}\text{B - Mex on Blackboard}\)

\(\color{RED}\text{Difficulty:1415}\)
首先,每次写在黑板上的数只能是 \([0,mex]\)\(mex\) 是目前现在的数的 \(mex\) ,显然,当写的数为 \([0,mex-1]\) 时,\(mex\) 不变,写 \(mex\) 时,下次 \(mex\) 会发生改变。

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

\(\color{purple}\text{C - Tree and LCS}\)

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

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

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

\(\color{orange}\text{YZOI-20230319}\)

\(\color{red}\text{Performance:157/300/400 (实际分数/期望分数/满分)}\)
\(\color{GREEN}\text{time:2023.3.19}\)

\(\color{purple}\text{A-weights}\)

\(\color{RED}\text{Difficulty:}\) ★★★

\(\color{lightblue}\text{Solution 1}\)

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

\(\color{lightblue}\text{Solution 2}\)

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

\(\color{purple}\text{B-data}\)

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

\(\color{purple}\text{C-Galaxy Union}\)

\(\color{RED}\text{Difficulty:}\) ★★★☆
重题,博客以前写过了

\(\color{orange}\text{ABC-294}\)

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

\(\color{purple}\text{E - 2xN Grid}\)

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

\(\color{purple}\text{F - Sugar Water 2}\)

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

posted @ 2023-03-19 13:12  FJOI  阅读(156)  评论(0)    收藏  举报