ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

二月 CF 的解题报告

2021-02-19 16:04:43  阅读:296  来源: 互联网

标签:mid 小值 CF 二月 Codeforces 解题 Div times Round


就写我打了的。

并不是官方题解的翻译,是我做的方法。

部分题目没写好。

Codeforces Round #699 (Div. 2)

A. Space Navigation

判断起点到终点的方向,保留有需要的方向再判断。

B. New Colony

暴力。如果有一个进入垃圾桶,后面的肯定都进入垃圾桶。

C. Fence Painting

除了最后一个工匠以外,前面的工匠的作品都可以选择被覆盖掉。找到所有需要变化的颜色,模拟即可。

D. AB Graph

构造题

E. Sorting Books

先留着。

Codeforces Round #700 (Div. 1)

A. Searching Local Minimum

考虑三分每次可以把序列长度 \(\times \dfrac{2}{3}\)。注意边界的特判,容易 FST。

B1. Painting the Array I

过是过了,但是我的方法似乎很垃圾,所以先留着。

B2. Painting the Array II

先留着。

Codeforces Round #701 (Div. 2)

A. Add and Divide

肯定先加后除。\(b=1\) 就加到 \(2\)。枚举 \(b\) 的值就可以了,注意到 \(b\) 不应该很大。

B. Replace and Keep Sorted

先暴力写出式子,发现很多项可以消去。最后式子中只剩下首项末项。

C. Floor and Mod

注意到只要满足 \(a=xb+x\) 且 \(x<b\) 即可。对于一个 \(b\) 找到能对应多少个 \(a\)。列出式子发现式子中带有一个 \(\min\),分类讨论 \(\min\) 的取值条件。发现前半部分可以直接计算,后半部分整除分块。

D. Multiples and Power Differences

黑白染色后,黑格子 \(720720\),白格子 \(720720-x^4\)。

E. Move and Swap

题目都没看。

Educational Codeforces Round 104 (Rated for Div. 2)

A. Arena

除了最垃圾的其他都可以。

B. Cat Cycle

???为什么我的做法这么麻烦?做了 40 min 大草。

C. Minimum Ties

奇偶分类讨论。发现偶数可以做到不平局,每个人赢一半输一半。奇数的话每个人平一局,剩下的一半赢一半输。证明不会。

考虑构造,平局的话 \(1\) 和 \(2\) 平, \(3\) 和 \(4\) 平,其他类似,这样构造就好了。输赢的构造可以分奇偶。

D. Pythagorean Triples

\[b+c=a^2=c^2-b^2=(b+c)\times (c-b) \]

所以只要 \(b\) 和 \(c\) 的差为 \(1\) 的勾股数就能满足。然后可以二分或者直接算。

E. Cheap Dinner

做 \(3\) 次 DP。显然 \(3\) 次是互不干扰的。每次的时候就是扔掉有关系的,在剩下的里找最小值。然后考虑用一个数据结构维护就行了。我翻了很多人的记录,似乎就我是用线段树的。

F. Ones

我只知道贪心是错的。

G. String Counting

似乎是个字符串 DP。

Codeforces Round #702 (Div. 3)

A. Dense Array

在两个不满足条件的相邻的数之间插入若干个就好了。

B. Balanced Remainders

考虑每个数对 \(3\) 取模的值。分别找到 \(0\),\(1\),\(2\) 的个数,把大于平均数的转化。

C. Sum of Cubes

用 map 记录哪些数是三次方数。暴力枚举 \(a\) ,求出 \(x-a^3\) 观察其是否是三次方数。

D. Permutation Transformation

递归模拟。

E. Accidental Victory

按照能力值排序,求前缀和。观察每个人能否打过他前面所有人加起来的和。从后往前找到第一个不满足这个条件的人,那么后面所有人都是可行的。最后不要忘记按 \(id\) 输出。

F. Equalize the Array

计算出每个数出现的次数。枚举最后的次数 \(x\),把次数小于 \(x\) 的全部删掉,大于 \(x\) 的删掉使得他保留为 \(x\)。似乎需要前缀和。

G. Old Floppy Drive

如果转一圈后加的值是个负数,那就只能转一圈不到。如果不行的话直接 \(-1\)。

如果转一圈后加的值是个正数,那一定是可行的。计算出要转几圈,然后可以二分一下。

Codeforces Round #703 (Div. 2)

A. Shifting Stacks

对于第 \(i\) 个位置,如果前面所有积木堆在一起能堆到 \(i-1\) 个就是可行的。

B. Eastern Exhibition

根据初一数学容易发现将 \(x,y\) 分开后,\(x_{ans}\)
应该取 \(x\) 的中位数。如果有两个中位数那么取在它们之间都可以。

C1. Guessing the Greatest (easy version)

考虑答案在区间 \([l,r]\) 中,那么我们先查询 \([l,r]\) 的次小值,再查 \([l,mid]\) 和 \([mid+1,r]\)。哪个区间的次小值还是原区间的次小值,那么答案就在哪个区间内。容易发现大概是 \(2\times log_2^n\) 次。

C2. Guessing the Greatest (hard version)

考虑优化 C1 的算法。我们考虑先取出这个序列的次小值位置 \(u\)。考虑答案在区间 \([l,r]\) 中,我们扔掉“先查询 \([l,r]\) 的次小值”这个操作,利用 \(u\)。如果 \(u\) 在此区间中,查询 \([l,mid]\) 或 \([mid+1,r]\) 使得这个查询区间包含 \(u\);否则如果 \(u\) 在 \(l\) 左边,查询 \([u,mid]\) 即可,在 \(r\) 右边也同理。这样我们发现用一次操作就可以把区间缩小一半。

D. Max Median

二分答案 \(x\),判断 \(≥x\) 的解是否可行。把大于等于 \(x\) 的数替换成 \(1\),其他数替换成 \(-1\)。那么一段中位数至少是 \(x\) 转换为了这段的和是正的。所以查找新序列中有没有一个长度至少是 \(k\) 的子串满足和为正即可。这个问题可以使用前缀和,维护前缀和的前缀最小值,在线性时间内完成。所以总复杂度是 \(O(n\log n)\) 的。

E. Paired Payment

建图套路题。考虑以下建图方式:

  1. 对于一个点 \(u\) 以及一条连接 \(u\) 的边 \((u,v,w)\),建立虚点 \((u,w)\)。
  2. 对于一条边 \((u,v,w)\),我们建权值为 \(0\) 的边 \(u\to (v,w)\)。
  3. 对于一条边 \((u,v,w)\) 和一个虚点 \((u,x)\),建立权值为 \((x+w)^2\) 的边 \((u,x)\to v\)。

接下来用 dijkstra 跑最短路即可。考虑这个建图方式的复杂度正确性:

  • 操作 1 中虚点个数是 \(O(m)\)。
  • 操作 2 中边个数是 \(O(m)\)。
  • 操作 3 中边个数是 \(O(m\times \max W)\)。因为如果某个顶点的度数为 \(t\),我们将创建不超过 \(t \max W\)的边,并且所有 \(t\) 的总和为 \(2\times m\)。

标签:mid,小值,CF,二月,Codeforces,解题,Div,times,Round
来源: https://www.cnblogs.com/irty/p/14416524.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有