Codeforces 777 题目研讨
题目连接
题目分析
A
难度:普及−
题面翻译:
给你三张牌:\(0\),\(1\),\(2\)。
最初选一张,然后依次进行 \(n\) 次交换,交换规则为:中间一张和左边的一张,中间一张和右边一张,中间一张和左边一张……
最后问选的那张在哪个位置。
算法标签:模拟、枚举、构造、数学
题解:
注意到每 \(6\) 次操作为一个周期,在经过一周期后序列被还原成操作前的形态。因此打个表然后直接做就做完了。
B
难度:普及−
题面翻译:
有两个人 S 和 M,他们每人有一段长度为 \(N\) 的数字,两个人在每一轮游戏中都可以按顺序拿出一个数字,谁的数字小谁就接受一次惩罚。若相等两者都没有惩罚。另外,M 可以重新安排自己数字的顺序,问 M 的最少被惩罚次数和 S 的最多被惩罚次数是多少。
算法标签:博弈论、数据结构、贪心、排序
题解:
先排个序。
根据一篇著名的博弈论论文\(^{[1]}\),有以下策略:
- 若此轮能赢,则使用最小的能赢下来的牌。
- 若此轮不能赢,则出当前最小的牌。
证明在原论文内,此处略。
设 S 的牌为 \(s_i\),M 的牌为 \(m_i\)。显然,对于第一问,只要 \(s_i \ge m_i\) 就能出 \(m_i\) 这张牌。
而对于第二问,出牌条件改为 \(s_i>m_i\) 即可。
C
难度:普及+/提高
题面翻译:
给出一个 \(n\times m\) 的矩阵。对于第 \(j\) 列,如果满足 \(\forall i \in [1,n-1],a_{i,j} \leq a_{i+1,j}\),则称这一列是不下降的。
\(k\) 次询问,问如果只保留矩阵的第 \(L\)~\(R\) 行,矩阵中是否存在不下降的一列。
算法标签:二分、数据结构、动态规划、贪心、双指针
题解:
注意到本题和最长不下降子串有关。用 \(b_{i,j}\) 表示以 \(a_{i, j}\) 结尾的最长不下降子串起始位置的下标(注意不是长度),然后预处理出每一行最小的 \(b\) 即可在 \(O(1)\) 内查询。
D
难度:普及+/提高
题面翻译:
给出 \(n\) 个开头是
#的字符串,你需要通过操作使这些字符串按字典序从小到大排列。
每次操作,你可以把某一个字符串的任意后缀去掉(当然你甚至可以去掉整个字符串),要求你去掉的字符数量最少。
输出你操作完的这 \(n\) 个字符串。
算法标签:二分、贪心、字符串
题解:
不难发现,本题和排序没有任何关系。
注意到去除后缀会使字符串的字典序变小,因此 \(s_n\) 不需要变化。而对于 \(s_i(1\le i\le n-1)\),可以贪心的操作,使其刚好小于等于 \(s_{i+1}\)。因此从后往前操作即可。
E
难度:提高+/省选−
题面翻译:
给出 \(n\) 个环形零件的厚度、内径、外径,要求按以下条件装配若干圆盘后,形成的塔最高。
- 圆盘应平放。也就是说,对于每个安放的零件,侧视图应当为长方形,而俯视图应为圆环。
- 圆盘应叠放,而下方的圆盘外径应大于等于上方圆盘的外径。
- 上方圆盘的外径应严格大于下方圆盘的内径(否则上方圆盘会因重力作用掉到下方圆盘的孔里)。
算法标签:枚举、排序
题解:
这道题和最长上升子序列有点像。先按照 \(b_i\) 降序对圆环排序,方便转移。
设 \(\text{dp}_i\) 为以 \(i\) 为顶的最大塔高,则有转移:
\]
。于是你 T 了。
因此考虑引入堆优化。将先前的状态压入大根堆中(按 \(h\) 排序),直接弹出 \(a \ge b_i\) 的栈顶(因为此时堆顶不合法,接下来堆顶一定更不合法),直到合法,然后更新答案即可。
时间复杂度 \(O(n\text{log}{n})\),可以通过。
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct dat {
int a, b, h;
} ring[100010];
int n, dp[100010];
bool cmp(dat a, dat b) {
if (a.b != b.b) return a.b > b.b;
return a.a > b.a;
}
bool operator < (dat x, dat y) { return x.h < y.h; }
priority_queue<dat> q;
signed main() {
scanf("%lld", &n);
for (int i = 1; i <= n; i++) {
scanf("%lld%lld%lld", &ring[i].a, &ring[i].b, &ring[i].h);
}
sort(ring + 1, ring + n + 1, cmp);
q.push({0, 0, 0});
long long ans = 0;
for (int i = 1; i <= n; i++) {
while (q.top().a >= ring[i].b) q.pop();
dp[i] = q.top().h + ring[i].h;
q.push({ring[i].a, ring[i].b, q.top().h + ring[i].h});
ans = max(ans, dp[i]);
}
printf("%lld\n", ans);
return 0;
}
总结
这套题在 Codeforces 中属于较简单水平,有希望考场 AK(只是有希望)。
Codeforces 777 题目研讨的更多相关文章
- BUPT2017 springtraining(16) #1 ——近期codeforces简单题目回顾
这里是contest 8道题全部来源于 cf 的两场contest (出题人可真懒啊 Codeforces Round #411 (Div. 2)的ABCDE Codeforces Round #40 ...
- Codeforces 划水
Codeforces 566F 题目大意:给定$N$个数,任意两个数之间若存在一个数为另一个数的因数,那么这两个数存在边,求图中最大团. 分析:求一个图最大团为NP-Hard问题,一般不采用硬方法算. ...
- Codeforces Round# 305 (Div 1)
[Codeforces 547A] #include <bits/stdc++.h> #define maxn 1000010 using namespace std; typedef l ...
- codeforces 577
codeforces 577A 题目链接:http://codeforces.com/problemset/problem/577/A 题目大意:给出一个n*n的表格,每个表格对应的值为横坐标*纵坐标 ...
- Codeforces Round #144 (Div. 2) D table
CodeForces - 233D 题目大意给你一个n*m 的矩阵,要求你进行涂色,保证每个n*n的矩阵内都有k个点被涂色. 问你一共有多少种涂色方案. n<=100 && m& ...
- Codeforces 675E Trains and Statistic - 线段树 - 动态规划
题目传送门 快速的vjudge通道 快速的Codeforces通道 题目大意 有$n$个火车站,第$i$个火车站出售第$i + 1$到第$a_{i}$个火车站的车票,特殊地,第$n$个火车站不出售车票 ...
- Consecutive Subsequence CodeForces - 977F(dp)
Consecutive Subsequence CodeForces - 977F 题目大意:输出一序列中的最大的连续数列的长度和与其对应的下标(连续是指 7 8 9这样的数列) 解题思路: 状态:把 ...
- codeforces Round#429 (Div2)
2017-08-20 10:00:37 writer:pprp 用头文件#include <bits/stdc++.h>很方便 A. Generous Kefa codeforces 84 ...
- Codeforces 474D Flowers 动态规划法
话说好久没写算法代码了,工作了有点忙的了.只是算法始终是我的挚爱,故此还是尽量抽时间和挚爱来个约会. Codeforces的题目是最适合练手的了,以下是一道不算难的动态规划法题目.先上题: D. Fl ...
- CodeForces - 906D Power Tower(欧拉降幂定理)
Power Tower CodeForces - 906D 题目大意:有N个数字,然后给你q个区间,要你求每一个区间中所有的数字从左到右依次垒起来的次方的幂对m取模之后的数字是多少. 用到一个新知识, ...
随机推荐
- 瑞芯微-I2S | ALSA基础-3
针对音频设备,linux内核中包含了两类音频设备驱动框架: OSS:开放声音系统 包含dsp和mixer字符设备接口,应用访问底层硬件是直接通过sound设备节点实现的: ALSA:先进linux声音 ...
- Python3将web服务和脚本做成开机自启
1.将bwService文件放到 /etc/init.d/下 bwService文件(类型是文件) #!/bin/bash # # This shell script takes care of st ...
- 技术如何通过API接口获取自己想要同款商品的数据
确定数据源: 首先,你需要确定哪些平台或服务提供商提供了你感兴趣的商品数据.例如,电商平台.品牌商.市场调研公司等. 了解API文档: 访问提供商的开发者门户网站,阅读API文档.文档会详细介绍如何使 ...
- Element-UI 中使用rules验证
第一种:写在data中进行验证 <el-form>:代表这是一个表单 <el-form> -> ref:表单被引用时的名称,标识 <el-form> -> ...
- win2003 密钥 vl_cd1_X13-46432.iso
1.使用的 ISO为:cn_win_srv_2003_r2_enterprise_with_sp2_vl_cd1_X13-46432.iso 2.迅雷链接 ed2k://|file|cn_win_sr ...
- Vue配置代理(devServer)解决跨域问题
1.作用: Vue官方文档的解释是: 如果你的前端应用和后端 API 服务器没有运行在同一个主机上,你需要在开发环境下将 API 请求代理到 API 服务器.这个问题可以通过 vue.config.j ...
- ASP.NET Core – 操作 Uri 和 Query
前言 以前就有写过了 Asp.net core 学习笔记 (操作 URL 和 Query), 但很乱, 这篇作为整理. Uri 介绍 结构: [Scheme]://[Host]:[Port][/Pat ...
- ASP.NET Core – Configuration & Options
前言 之前就写过 Asp.net core 学习笔记 ( Configuration 配置 ) 只是有点乱, 这篇作为整理版. 项目中会有许许多多的 Config 要设定. 比较好的管理方式是把它们放 ...
- CSS – Counters
介绍 counter 有点像 JS 的 for loop index. 最常用到的地方就是做 ol > li. 参考: W3Schools – CSS Counters 默认 ol > l ...
- Qt连连看(二)界面制作
我们先来制作两个简单的页面 一.主界面 要求在main.cpp里面设置对应的槽函数 (1) 点击开始游戏能跳转到游戏界面 (2) 点击帮助能够显示游戏说明,如下 二.游戏界面 要求如下: (3) 初始 ...