| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Codeforces Round #734 (Div. 3) 题解(A-D) -> 正文阅读 |
|
[数据结构与算法]Codeforces Round #734 (Div. 3) 题解(A-D) |
Codeforces Round #734 (Div. 3) 题解(A-D)A. Polycarp and Coins题目大意:用面值为 1 1 1和面值为 2 2 2的硬币凑 n n n元钱,使得两种硬币的数量尽量接近。 解题思路:设1元硬币需要 a a a枚,2元硬币需要 b b b枚。由贪心策略可得:
代码:
B1. Wonderful Coloring - 1题目大意:给一个由小写字母组成的字符串进行染色,如果满足以下条件则这种染色方案是wonderful的:
对于给出的字符串求出在wonderful染色方案中被染成红色的数量。 解题思路:因为有相同的字符不能染成同一颜色的限制条件,所以每种字母最多只能被染色两次。 可以求出在这个限制下一共有多少字母可以被染色,然后再将总和除二下取整即可。 代码:
B2. Wonderful Coloring - 2题目大意:B 2 B2 B2和 B 1 B1 B1大致的题意一致,区别就在于 B 2 B2 B2可以染 k k k种不同的颜色,并且本题从字母变成了数字,同样要满足相同的数字不能染相同的颜色和每种颜色的数量要相同。 并且这题不是要求最多染色的数量,而是要输出具体的染色方案。 解题思路:通过上一题的启发,我们可以发现每种数字最多由最多只能涂 2 2 2次变成只能涂 k k k次,同样可以求出能被涂色的字符总和 s u m sum sum。 接下来考虑怎么给每种字母染色,我们可以采取对同一种数字进行滚动染色的方式,这样就不会使得每种字母染上相同的颜色。 要实现这种效果,我们将数字按照某种顺序排列,这样就会使得相同的数字紧靠在一起,可以用 S T L STL STL中的 p r i o r i t y q u e u e priority_queue priorityq?ueue轻松实现。 算法时间复杂度: O ( n log ? n ) O(n\log n) O(nlogn) 代码:
C. Interesting Story题目大意:如果由一个故事的组成单词中某个字符的出现次数大于其他字符出现次数的总和,那么就称这个故事是有趣的。 现在给出 n n n个由 a , b , c , d , e a,b,c,d,e a,b,c,d,e五种小写字母组成的单词,问如何最多能挑选多少个单词使得组成的故事的有趣的。 解题思路:看上去数据范围很大,其实只要分别考虑五种字母作为出现次数最多的情况即可。 假设将 a a a作为出现次数最多的字母,设每个字母a出现的次数为 n u m a num_a numa?,单词长度为 l e n len len,那么可以将每个单词的权值设为 n u m a ? ( l e n ? n u m a ) num_a-(len-num_a) numa??(len?numa?)。然后按照从大到小的顺序排序,按照贪心策略选尽可能多的单词就可以得到将 a a a作为出现次数最多的字母的最优解。 剩下四种情况同理,五种情况取一个 max ? \max max就是最终答案。 代码:
D1. Domino (easy version)题目大意:一个 n × m n\times m n×m的二维矩阵,现在要用 n ? m 2 \frac{n*m}{2} 2n?m?张多米诺骨牌将其填满,其中多米诺骨牌有两种尺寸,分别是水平的 1 × 2 1\times2 1×2和垂直的 2 × 1 2\times 1 2×1,其中水平的有 k k k张。给出 n , m , k ( 1 ≤ n , m ≤ 100 , 0 ≤ k ≤ n ? m , n ? m 2 是 偶 数 ) n,m,k(1\le n,m\le100,0\le k\le n*m,\frac{n*m}{2}是偶数) n,m,k(1≤n,m≤100,0≤k≤n?m,2n?m?是偶数),问这种情况下能否填满整个二维矩阵。 解题思路:因为 n ? m 2 \frac{n*m}{2} 2n?m?是偶数,所以我们可以分以下几种情况讨论:
代码:
D2. Domino (hard version)题目大意:跟D1题意一致,就是在输出YES的时候要输出具体方案。 解题思路:按照D1的思路,对于所有可行的方案从上到下从左到右先填水平的多米诺骨牌,然后再把垂直的多米诺骨牌填入即可。 注意:其中对于 n n n是奇数, m m m是偶数的情况要先把最上面一层填满,再填剩下的。 每次插入的字符要与周围的字符不相同,所以就每次插入之前需要check一下。 代码:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 17:57:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |