比赛链接:Here

1547A. Shortest Path with Obstacle

3个点 \(A,B,F\) ,前提 \(F\) 点为不可经过点,问 \(A\to B\) 最短路径长度


A题没什么难度,注意同列和同行在两者之间的情况即可

【AC Code】

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
int a, b, c, d, e, f;
cin >> a >> b >> c >> d >> e >> f;
int s = abs(a - c) + abs(b - d);
if (a == c && a == e && (f > b && f < d || f > d && f < b) || b == d && b == f && (e > a && e < c || e > c && e < a))
s += 2;
cout << s << '\n';
}
}

1547B. Alphabetical Strings

构造出一个按 字母序的字符串

  • 首先,构造空串
  • 重复 \(n\) 次:\(s:=c + s\) or \(s: = s + c\)

  • 首先,我们如果可以找出字母“a”在字符串s中的位置。如果这个位置不存在,那么答案是 NO

  • 假设这个位置存在并且等于 \(pos_a\)。让我们创建两个指针L和R。最初 \(L:=pos_a\),\(R:=L\)。我们将尝试使用语句中的算法来左右构建字符串 \(s\)

    当我们能迭代 \(n\) 次时输出 YES,否则 输出 NO

【AC Code】

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
function<int(string)> check = [&](string s) {
if (s.empty())return 1;
if (s[0] == 'a' + s.size() - 1)return check(s.substr(1));
if (s.back() == 'a' + s.size() - 1)return check(s.substr(0, s.size() - 1));
return 0;
};
string s; cin >> s;
cout << (check(s) ? "YES\n" : "NO\n");
}
}

1547C. Pair Programming

一项工作有 Monocarp 和 Polycarp 两人各 \(n\) 和 \(m\) 工时合作完成

他们都有两种操作:

  • 0,新添加一行
  • x > 0 ,在第 x 行上修改为 x

但这项工作原本已经存在 \(k\) 行被完成,请 Monocarp 和 Polycarp 操作的任何正确公共序列,如果不存在则输出 -1


模拟,

对于两人的操作 \(x\) 是不能超过 \(k\) 的,所以使用双指针模拟两人的操作即可

【AC Code】

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
int k, n, m;
cin >> k >> n >> m;
vector<int>a(n), b(m), ans;
for (int &x : a)cin >> x;
for (int &x : b)cin >> x;
for (int i = 0, j = 0; i < n or j < m;) {
if (i < n and a[i] <= k) {
k += a[i] == 0;
ans.push_back(a[i++]);
} else if (j < m and b[j] <= k) {
k += b[j] == 0;
ans.push_back(b[j++]);
} else break;
} if (ans.size() != n + m)cout << "-1\n";
else {
for (int i : ans)cout << i << " ";
cout << "\n";
}
}
}

1547D. Co-growing Sequence

  • 如同 \([2,3,15,175]_{10} \to [10_2,11_2,1111_2,10101111_2]\)

    $[0,0,0] \to [0_2,0_2,0_2] $

    均为增长序列

现在给一个长度为 \(n\) 的 \(x_i\) 数组,请输出一组 \(y_i\) 使得 \(x_i ⊕ y_i\) 为增长序列


思路待补

【AC Code】

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
int n; cin >> n;
int x, p = 0;
for (int i = 0; i < n; ++i) {
cin >> x;
cout << (p | x) - x << " ";
p |= x;
}
cout << "\n";
}
}

1547E. Air Conditioners

对于每个位置的空调的最小值来说肯定是和左右(+1)比较

【AC Code】

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
int n, k;
cin >> n >> k;
vector<int> a(n, 2e9), v(k), t(k);
for (int &x : v) cin >> x;
for (int &x : t) cin >> x;
for (int i = 0; i < k; ++i)a[v[i] - 1] = t[i];
for (int i = 1; i < n; ++i) a[i] = min(a[i - 1] + 1, a[i]);
for (int i = n - 2; i >= 0; --i)a[i] = min(a[i + 1] + 1, a[i]);
for (int x : a)cout << x << " ";
cout << "\n";
}
}

1547F. Array Stabilization (GCD version)

【AC Code】

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
int n, d = 0;
cin >> n;
vector<int> v(n * 2);
for (int i = 0; i < n; i++) {
cin >> v[i];
v[i + n] = v[i];
d = __gcd(d, v[i]);
}
int ans = 0;
vector<pair<int, int>>vt;
for (int i = 2 * n - 1; i >= 0; i--) {
vector<pair<int, int>> wp;
vt.push_back({0, i});
for (auto [x, y] : vt) {
x = __gcd(x, v[i]);
if (not wp.empty() and x == wp.back().first) wp.back().second = y;
else wp.push_back({x, y});
}
swap(vt, wp);
if (i < n) ans = max(ans, vt[0].second - i);
}
cout << ans << "\n";
}
}

1547G. How Many Paths?

邻接表 + 树形DP

【AC Code】

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
int n, m;
cin >> n >> m;
vector<vector<int>> G(n), H(n);
for (int i = 0, u, v; i < m; i += 1) {
cin >> u >> v;
u -= 1;
v -= 1;
G[u].push_back(v);
H[v].push_back(u);
}
vector<int> order, id(n);
function<void(int)> dfs1 = [&](int u) {
id[u] = -1;
for (int v : H[u])
if (not id[v])dfs1(v);
order.push_back(u);
};
for (int i = 0; i < n; i += 1) if (not id[i]) dfs1(i);
reverse(order.begin(), order.end());
int count = 0;
function<void(int)> dfs2 = [&](int u) {
id[u] = count;
for (int v : G[u])
if (not ~id[v])
dfs2(v);
};
for (int i : order) if (not ~id[i]) {
dfs2(i);
count += 1;
}
vector<vector<int>> g(count);
for (int i = 0; i < n; i += 1)
for (int j : G[i]) {
g[id[i]].push_back(id[j]);
assert(id[i] >= id[j]);
}
vector<int> dp(count);
for (int i = id[0]; i >= 0; i -= 1) {
if (i == id[0]) dp[i] = 1;
if (dp[i]) {
for (int j : g[i]) if (j == i) dp[i] = -1;
}
for (int j : g[i]) {
if (dp[i] == -1) dp[j] = -1;
if (dp[i] == 2 and dp[j] != -1) dp[j] = 2;
if (dp[i] == 1 and dp[j] != -1 and dp[j] <= 1) dp[j] += 1;
}
}
for (int i = 0; i < n; i += 1) cout << dp[id[i]] << " ";
cout << "\n";
}
}

Codeforces Round #731 (Div. 3) A~G 解题记录的更多相关文章

  1. 刷题记录:Codeforces Round #731 (Div. 3)

    Codeforces Round #731 (Div. 3) 20210803.网址:https://codeforces.com/contest/1547. 感觉这次犯的低级错误有亿点多-- A 一 ...

  2. Educational Codeforces Round 47 (Div 2) (A~G)

    目录 Codeforces 1009 A.Game Shopping B.Minimum Ternary String C.Annoying Present D.Relatively Prime Gr ...

  3. Educational Codeforces Round 46 (Div 2) (A~G)

    目录 Codeforces 1000 A.Codehorses T-shirts B.Light It Up C.Covered Points Count(差分) D.Yet Another Prob ...

  4. Educational Codeforces Round 45 (Div 2) (A~G)

    目录 Codeforces 990 A.Commentary Boxes B.Micro-World C.Bracket Sequences Concatenation Problem D.Graph ...

  5. Codeforces Round #306 (Div. 2) D.E. 解题报告

    D题:Regular Bridge 乱搞. 构造 这题乱搞一下即可了.构造一个有桥并且每一个点的度数都为k的无向图. 方法非常多.也不好叙述.. 代码例如以下: #include <cstdio ...

  6. Codeforces Round #378 (Div. 2) D题(data structure)解题报告

    题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...

  7. Codeforces Round #582 (Div. 3)-G. Path Queries-并查集

    Codeforces Round #582 (Div. 3)-G. Path Queries-并查集 [Problem Description] 给你一棵树,求有多少条简单路径\((u,v)\),满足 ...

  8. Codeforces Round #324 (Div. 2)解题报告

    ---恢复内容开始--- Codeforces Round #324 (Div. 2) Problem A 题目大意:给二个数n.t,求一个n位数能够被t整除,存在多组解时输出任意一组,不存在时输出“ ...

  9. 贪心 Codeforces Round #273 (Div. 2) C. Table Decorations

    题目传送门 /* 贪心:排序后,当a[3] > 2 * (a[1] + a[2]), 可以最多的2个,其他的都是1个,ggr,ggb, ggr... ans = a[1] + a[2]; 或先2 ...

  10. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

随机推荐

  1. 给大家介绍一款强大的抓包代理工具--mitmproxy

    最近工作中涉及到和app相关的测试工作,需要用到mock,特意网上查了些资料,发现有很多工具可以实现app的mock,但是经过我反复试用后,发现mitmproxy这个工具非常的强大 我认为mitmpr ...

  2. 给 Web 前端工程师看的用 Rust 开发 wasm 组件实战

    什么是wasm组件? wasm 全称 WebAssembly,是通过虚拟机的方式,可以在服务端.客户端如浏览器等环境执行的二进制程序.他有速度快.效率高.可移植的特点. 对我们 Web 前端工程最大的 ...

  3. PyTorch 中自定义数据集的读取方法

    显然我们在学习深度学习时,不能只局限于通过使用官方提供的MNSIT.CIFAR-10.CIFAR-100这样的数据集,很多时候我们还是需要根据自己遇到的实际问题自己去搜集数据,然后制作数据集(收集数据 ...

  4. SpringBoot整合阿里云OSS

    1.创建一个service_ossspringboot项目 2.导入相关依赖 ...其他的依赖大家自行导入 <!-- 阿里云oss依赖 --> <dependency> < ...

  5. 数据库系列:业内主流MySQL数据中间件梳理

    数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版) 数据库系列:高并发下的数据字段变更 数据库系列:覆盖索引和规避回表 数据库系列:数据库高可用及无损扩容 数据库 ...

  6. 【OpenCV】 OpenCV 源码编译并实现 CUDA 加速 (Windows)

    目录 1. 环境准备 1.1 软件环境 1. 2 源码下载 2. CMake编译项目 2.1 创建cmake项目 2.2 设置编译配置 2.3 解决异常 2.3.1 文件下载异常 2.3.2 解决CU ...

  7. vulntarget-c-wp

    vulntarget-c 信息收集 扫开的端口有web服务 访问了web页面,发现用的是laravel框架 搜索一下历史漏洞,在gayhub上找到这个可以用,能够执行简单命令 python3 expl ...

  8. STM32CubeMX教程1 工程建立

    1.准备材料 开发板(STM32F407G-DISC1) ST-LINK/V2驱动 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) 2 ...

  9. 【推荐】Helix 常用命令与设置

    目录 Helix常用命令 配置 编辑器 [editor]字段 [editor.statusline] 字段 [editor.lsp] 字段 [editor.cursor-shape] 字段 [edit ...

  10. 文心一言 VS 讯飞星火 VS chatgpt (47)-- 算法导论6.1 5题

    五.一个已排好序的数组是一个最小堆吗? 文心一言: 一个已排好序的数组不一定是一个最小堆.最小堆是一种特殊的二叉树,它满足以下性质:对于任意节点 x,其父节点 y 的值都小于等于 x 的值.而一个已排 ...