比赛链接

A

题解

知识点:数学。

\(2\) 特判加 \(7\),其他加 \(3\) 直接偶数。

时间复杂度 \(O(1)\)

空间复杂度 \(O(1)\)

代码

#include <bits/stdc++.h>
#define ll long long using namespace std; bool solve() {
int n;
cin >> n;
if (n == 2) cout << 7 << '\n';
else cout << 3 << '\n';
return true;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}

B

题解

知识点:贪心。

注意到,最优能做到周长等于底边之和乘 \(2\) 加上高度最大值乘 \(2\) 。

我们把短的边当作底边,长的边当作高,这样长的边的贡献会最少。

时间复杂度 \(O(n)\)

空间复杂度 \(O(1)\)

代码

#include <bits/stdc++.h>
#define ll long long using namespace std; bool solve() {
int n;
cin >> n;
ll sum = 0;
int mx = 0;
for (int i = 1;i <= n;i++) {
int x, y;
cin >> x >> y;
sum += min(x, y);
mx = max({ mx,x,y });
}
cout << 2 * (sum + mx) << '\n';
return true;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}

C

题解

知识点:贪心,枚举。

从小到大排序后,我们发现单独放一个 \(a[1]\) 或 \(a[n]\) 在 bag3 (或 bag1 )最优,这样就能一次覆盖一段最长的,其他情况因为取在中间,不会超过 \(a[n]-a[1]\) 。

不妨假设单独放了个 \(a[n]\) 在 bag3,再把剩下的分成两段 \([a[1],a[i-1]],[a[i],a[n-1]]\) 分别放在 bag2,1 (较远的放中间),如此得到解 \(a[n] - a[i-1] + a[i] - a[i-1]\) 。同理 \(a[1]\) 单独放,有解 \(a[i] - a[1] + a[i] - a[i-1]\) 。

枚举这两种的所有情况,取最大值。

时间复杂度 \(O(n \log n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>
#define ll long long using namespace std; int a[200007];
bool solve() {
int n;
cin >> n;
for (int i = 1;i <= n;i++) cin >> a[i];
sort(a + 1, a + n + 1);
ll ans = 0;
for (int i = 2;i <= n;i++) {
ans = max({ ans,2LL * a[i] - a[i - 1] - a[1],-2LL * a[i - 1] + a[n] + a[i] });
}
cout << ans << '\n';
return true;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}

D

题解

知识点:贪心,数学。

神奇的华容道。

遍历一遍,能出的直接出,当前不能出的放在除了起点终点之外的地方以后再出,但要保证放之后至少还有两个空位,即只能放 \(nm-4\) 个卡片,否则下一个进来以后就满了动不了,其他情况都能随意移动卡片(华容道qwq)。

时间复杂度 \(O(n \log n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>
#define ll long long using namespace std; int a[100007];
bool solve() {
int n, m, k;
cin >> n >> m >> k;
priority_queue<int> pq;
int p = k;
for (int i = 1;i <= k;i++) cin >> a[i];
for (int i = 1;i <= k;i++) {
while (!pq.empty() && pq.top() == p) pq.pop(), p--;
if (a[i] == p) p--;
else {
pq.push(a[i]);
if (pq.size() >= n * m - 3) return false;
}
}
cout << "YA" << '\n';
return true;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << "TIDAK" << '\n';
}
return 0;
}

E

题解

知识点:树形dp。

设 \(dp[u][0/1]\) 表示对于以 \(u\) 为根的子树,子序列包括/不包括 \(u\) 时的答案。

分两种情况讨论:

  1. \(dp[u][0]\) 时,那么子节点 \(v_i\) 的最长不下降子序列是可以任意合并的,即子节点的答案 \(\max (dp[v_i][0],dp[v_i][1])\) 能加在一起。因为 \(a[v_i]\) 互相大小没有限制,所以可以自定义后拼在一起。那么答案便是 \(\sum \max (dp[v_i][0],dp[v_i][1])\) 。

  2. \(dp[u][1]\) 时,由于根节点 \(u\) 最后只可能等于一个子节点 \(v_i\) ,那么 \(u\) 只可能衔接在一个 \(dp[v_i][1]\) 后面。

    \(dp[v_i][0]\) 不能考虑进去。因为,当 \(v_i\) 为根的子树不是条链,一定存在子孙 \(w\) 使得 \(a[v_i]<a[w]\) ,那么 \(a[u]<a[w]\) 不可能衔接到 \(w\) 后面;当 \(v_i\) 为根的子树是链时,则 \(dp[v_i][1] = dp[v_i][0]+1>dp[v_i][0]\) ,没必要选。

时间复杂度 \(O(n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>

using namespace std;

vector<int> g[100007];
int f[100007][2]; void dfs(int u) {
f[u][0] = 0;
f[u][1] = 1;
for (auto v : g[u]) {
dfs(v);
f[u][0] += max(f[v][0], f[v][1]);
f[u][1] = max(f[u][1], f[v][1] + 1);
}
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin >> n;
for (int i = 2;i <= n;i++) {
int p;
cin >> p;
g[p].push_back(i);
}
dfs(1);
cout << max(f[1][0], f[1][1]) << '\n';
return 0;
}

Codeforces Round #831 (Div. 1 + Div. 2) A-E的更多相关文章

  1. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

  2. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  3. Educational Codeforces Round 43 (Rated for Div. 2)

    Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...

  4. Educational Codeforces Round 35 (Rated for Div. 2)

    Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...

  5. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...

  6. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...

  7. Educational Codeforces Round 63 (Rated for Div. 2) 题解

    Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...

  8. Educational Codeforces Round 39 (Rated for Div. 2) G

    Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...

  9. Educational Codeforces Round 48 (Rated for Div. 2) CD题解

    Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...

  10. Educational Codeforces Round 60 (Rated for Div. 2) 题解

    Educational Codeforces Round 60 (Rated for Div. 2) 题目链接:https://codeforces.com/contest/1117 A. Best ...

随机推荐

  1. Java核心知识体系4:AOP原理和切面应用

    1 概述 我们所说的Aop(即面向切面编程),即面向接口,也面向方法,在基于IOC的基础上实现. Aop最大的特点是对指定的方法进行拦截并增强,这种增强的方式不需要业务代码进行调整,无需侵入到业务代码 ...

  2. cad开发动态块对应的界面

    为了使设计人员更加容易的操作动态块, 应经可能对动态块的制作制定相关的规范, 如动态块的属性 => 类的属性 动态块操作名称(作为变量名,后台数据库的字段) 动态块操作描述  (作为注释,后台数 ...

  3. 【NOI P模拟赛】大阶乘(斯特林数)

    题意 求 16 16 16 进制下, n ! n! n! 去掉尾部 0 0 0 后取模 2 64 2^{64} 264 的结果. n < 2 64 n<2^{64} n<264 一共 ...

  4. pytest精髓__fixture

    命令:fixture(scope='function',params=None,autouse=False,ids=None,name=None) 参数说明 scope:有四个级别参数函数" ...

  5. noip2015提高组初赛

    一.单项选择题(共15题,每题1.5分,共计22.5分:每题有且仅有一个正确选项) 线性表若采用链表存储结构,要求内存中可用存储单元地址( ). A. 必须连续 B. 部分地址必须连续 C. 一定不连 ...

  6. KingbaseES的SQL语句-CTE递归

    背景 从上下级关系表中,任意一个节点数据出发,可以获得该节点的上级或下级.CTE的递归语法,或者 connect by 与 start with的 查询语法,能够实现这个需求. 当我们需要制作上下级关 ...

  7. .Net7 内容汇总(1)

    .Net7 RC1发布 在9月14号,.Net7 RC1正式发布了. 按照微软的说法 This is the first of two release candidates (RC) for .NET ...

  8. 使用 Elastic 技术栈构建 K8S 全栈监控 -2: 用 Metricbeat 对 Kubernetes 集群进行监控

    文章转载自:https://www.qikqiak.com/post/k8s-monitor-use-elastic-stack-2/ 操作步骤 git clone https://github.co ...

  9. Elasticsearch:单节点数据迁移

    Elasticsearch数据迁移:windows单节点迁移到windows 将源数据中的ES安装目录下的data/nodes目录整体拷贝到目标ES的对应目录下 迁移前请备份:迁移后需要重启ES: E ...

  10. 阿里云下配置keepalive,利用HAVIP实现HA

    注:这篇文章参考网络,有些称呼都变了,比如阿里云上的现在是弹性ip 包括阿里云在内的很多云环境,因为不支持浮动IP广受诟病.目前阿里云在VPC网络下发布了HAVIP,能够实现arp宣告IP.这样也就让 ...