比赛链接:https://atcoder.jp/contests/abc167/tasks

AB水题,

C - Skill Up

题意:

  • 初始时 \(m\) 个算法的能力均为 \(0\),\(n\) 次中每次可以花费 \(c_i\) 元提升 \(m\) 个算法的能力(提升程度可能不等),问 \(m\) 个算法能力都提升到不低于 \(x\) 的最少花费。

思路:

一开始想写DP的,但发现数据范围不是很大 \((n\le 15)\) ,那么直接枚举即可了

  1. int n, m, x;
  2. int c[15], a[15][15];
  3. int M[15], Min = 1e9, cost;
  4. void chmin(int &a, int b) { return (void)(a > b ? a = b : a = a); }
  5. void chmax(int &a, int b) { return (void)(a < b ? a = b : a = a); }
  6. bool check() {
  7. for (int i = 0; i < m; ++i) if (M[i] < x) return 0;
  8. return 1;
  9. }
  10. void dfs(int i) {
  11. if (i == n) {
  12. if (check()) chmin(Min, cost);
  13. return ;
  14. }
  15. cost += c[i];
  16. for (int j = 0; j < m; ++j) M[j] += a[i][j];
  17. dfs(i + 1);
  18. cost -= c[i];
  19. for (int j = 0; j < m; ++j) M[j] -= a[i][j];
  20. dfs(i + 1);
  21. }
  22. int main() {
  23. cin.tie(nullptr)->sync_with_stdio(false);
  24. cin >> n >> m >> x;
  25. for (int i = 0; i < n; ++i) {
  26. cin >> c[i];
  27. for (int j = 0; j < m; ++j) cin >> a[i][j];
  28. }
  29. dfs(0);
  30. cout << (Min == 1e9 ? -1 : Min);
  31. }

D - Teleporter

题意:

  • \(1\sim n\) 个城镇每个城镇有一个传送点可以传送到其他城镇,问从第一个城镇出发传送 \(k\) 次后所在的城镇。

思路:

模拟一下样例就知道传送过程中肯定存在环,那么我们标记环路起点,加上传送次数对环路长度的模值即可,需要注意有可能先在一些城镇间传送后才进入环路。

  1. const int N = 2e5 + 10;
  2. ll n, k;
  3. ll a[N], pre[N];
  4. int main() {
  5. cin.tie(nullptr)->sync_with_stdio(false);
  6. cin >> n >> k;
  7. for (int i = 1; i <= n; ++i) cin >> a[i];
  8. int now = 1;
  9. ll cnt = 0;
  10. while (k--) {
  11. now = a[now];
  12. if (pre[now])k %= cnt - pre[now];
  13. pre[now] = cnt++;
  14. }
  15. cout << now;
  16. }

E - Colorful Blocks

题意:

  • 给 \(n\) 个方块染色,可以使用 \(m\) 个颜色,要求最多有 \(k\) 对相邻方块同色。

思路:

\(ans = \sum\limits_{i = 0}^km*C_{n-1}^i*(m - 1)^{n-1-i}\)

解释一下,第 \(1\) 个方块可以染 \(m\) 种颜色,从余下 \(n - 1\) 个方块中选取 \(i\) 个方块,这 \(i\) 个方块组成同色的 \(i\) 对方块,它们的颜色与左相邻的方块相同,其余的 \(n - 1 - i\) 个方块因为不与左相邻方块同色,每个可以染 \(m - 1\) 个颜色。

代码书写上用逆序处理一下,同时独立出 \(add + mul\) 模块防止写错细节

  1. const int N = 2e5 + 10, mod = 998244353;
  2. ll fac[N];
  3. ll add(ll a, ll b) {return (a + b) % mod;}
  4. ll mul(ll a, ll b) {return a * b % mod;}
  5. ll qpow(ll a, ll b) {
  6. ll ans = 1;
  7. for (; b; b >>= 1, a = mul(a, a)) if (b & 1) ans = mul(ans, a);
  8. return ans;
  9. }
  10. ll inv(ll n) {return qpow(n, mod - 2);}
  11. ll C(ll n, ll m) {
  12. return mul(fac[n], mul(inv(fac[m]), inv(fac[n - m])));
  13. }
  14. int main() {
  15. cin.tie(nullptr)->sync_with_stdio(false);
  16. fac[0] = 1;
  17. for (int i = 1; i < N; ++i) fac[i] = mul(fac[i - 1], i);
  18. ll n, m, k;
  19. cin >> n >> m >> k;
  20. ll ans = 0;
  21. for (int i = 0; i <= k; ++i)
  22. ans = add(ans, mul(m, mul(C(n - 1, i), qpow(m - 1, n - 1 - i))));
  23. cout << ans;
  24. }

F - Bracket Sequencing

题意:

  • 能否将一些括号串编排为合法串。

思路:

这道题不会,参考了一下这个大佬的博客:Here

详细思路:GYM - 101341A

  1. const int M = 1e6 + 100;
  2. int l[M], r[M];
  3. int id[M], tp[M];
  4. int main() {
  5. int n; cin >> n;
  6. for (int i = 0; i < n; i++) {
  7. string s; cin >> s;
  8. int x = 0, y = 0;
  9. for (char c : s) {
  10. if (c == '(') ++x;
  11. else if (x) --x;
  12. else ++y;
  13. }
  14. l[i] = x, r[i] = y, id[i] = i;
  15. if (y == 0) tp[i] = 1;
  16. else if (x == 0) tp[i] = 4;
  17. else if (x >= y) tp[i] = 2;
  18. else tp[i] = 3;
  19. }
  20. sort(id, id + n, [&] (int a, int b) {
  21. if (tp[a] != tp[b]) return tp[a] < tp[b];
  22. if (tp[a] == 2) {
  23. if (r[a] != r[b]) return r[a] < r[b];
  24. else return l[a] > l[b];
  25. }
  26. if (tp[a] == 3) return l[a] > l[b];
  27. return false;
  28. });
  29. int sum = 0;
  30. for (int i = 0; i < n; i++) {
  31. sum -= r[id[i]];
  32. if (sum < 0) break;
  33. sum += l[id[i]];
  34. }
  35. cout << (sum == 0 ? "Yes" : "No");
  36. }

AtCoder Beginner Contest 167 (A~F,DEF Good)的更多相关文章

  1. Atcoder Beginner Contest 156E(隔板法,组合数学)

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ; ; long long fac[N] ...

  2. AtCoder Beginner Contest 254(D-E)

    Tasks - AtCoder Beginner Contest 254 D - Together Square 题意: 给定一个N,找出所有不超过N的 ( i , j ),使得( i * j )是一 ...

  3. Atcoder Beginner Contest 155D(二分,尺取法,细节模拟)

    二分,尺取法,细节模拟,尤其是要注意a[i]被计算到和a[i]成对的a[j]里时 #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> ...

  4. Atcoder Beginner Contest 140E(多重集,思维)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;multiset<long long&g ...

  5. Atcoder Beginner Contest 139E(模拟,思维)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int n;int a[1007][1007] ...

  6. AtCoder Beginner Contest 086 (ABCD)

    A - Product 题目链接:https://abc086.contest.atcoder.jp/tasks/abc086_a Time limit : 2sec / Memory limit : ...

  7. AtCoder Beginner Contest 127 D,E,F

    D Integer Cards 题意:先给出n个数字,然后可以有m次操作,每次操作以数字对(x,y)表示最多能选x个数字把它变成y,问经历m次操作后n个数字和最大为多少? 解法:一个明显正确的做法是: ...

  8. 【AtCoder Beginner Contest 181】A~F题解

    越学越菜系列 于2020.11.2,我绿了(错乱) A - Heavy Rotation 签到题,奇数Black,偶数White. code: #include<bits/stdc++.h> ...

  9. AtCoder Beginner Contest 085(ABCD)

    A - Already 2018 题目链接:https://abc085.contest.atcoder.jp/tasks/abc085_a Time limit : 2sec / Memory li ...

  10. AtCoder Beginner Contest 084(AB)

    A - New Year 题目链接:https://abc084.contest.atcoder.jp/tasks/abc084_a Time limit : 2sec / Memory limit  ...

随机推荐

  1. iOS信号量造成线程优先级反转

    在并发队列使用信号量会可能会造成线程优先级反转 一.在iOS16 & XCode14上遇到 - 使用信号量造成线程优先级反转问题 提醒 经过查询资料,发现是在XCode14上增加了工具,比如 ...

  2. 线性代数导论MIT第二章知识点下

    2.3--2.7的知识点 1.使用矩阵消元 2.消元矩阵 3.行交换矩阵 4.增广矩阵 2.4 矩阵运算规则 行与列 方块矩阵与方块乘法 舒尔补充 2.5逆矩阵 乘积AB的逆矩阵 高斯乔丹消元法计算A ...

  3. Node01-简介与安装

    01. Node.js是什么? pNode.js是一个基于V8 JavaScript引擎的JavaScript运行时环境. 也就是说: Node.js基于V8引擎来执行JavaScript的代码. V ...

  4. serdes调试常见功能汇总

    初始化流程 CORE复位流程 FW手动加载 FW版本自生成(可选) lane复位流程 TX复位流程 RX复位流程 TX,RX使能,disable(可选)关闭数据通道 速率频点配置,CPU模式配置,PL ...

  5. [ABC263C] Monotonically Increasing

    Notes For two integer sequences of the same length $A_1,A_2,\dots,A_N$ and $B_1,B_2,\dots,B_N$, $A$ ...

  6. 流畅的orm让我发现我抵触的是mybatis而不是java

    流畅的orm让我发现我抵触的是mybatis而不是java 背景介绍 开发.net 也快10年了,到第三年的时候我已经渐渐瓶颈了,于是我在网上找各种资料但是大部分c#资料全是皮毛资料,稍微深一点点就再 ...

  7. KNN算法实战——海伦约会(KDtree优化)

    本文通过海伦约会的例子来测试之前写的KDTree的效果,并且探讨了特征是否进行归一化对整个模型的表现的影响.最后发现在机器学习中,特征归一化确实对模型能提供非常大的帮助. 1 from KDTree ...

  8. MongoDB副本集的搭建和管理(高可用)

    使得mongodb具备自动故障转移.高可用.读写分离. 副本集默认情况下读写都只是通过主库,副节点只是备份数据而已,但是可以设置副节点允许读操作,这样就可以做成读写分离. 使用pymongo的时候也可 ...

  9. GaussDB(DWS)中的分布式死锁问题实践

    本文分享自华为云社区<GaussDB(DWS)中的分布式死锁问题实践>,作者: 他强由他强 . 1.什么是分布式死锁 分布式死锁是相对于单机死锁而言,一个事务块中的语句,可能会分散在集群里 ...

  10. 2023年资深C#开发者的思考

    2023年转眼间就这样过掉了,作为一名资深C#的开发员人员,年龄也大了1岁,从最早接触C#开始,算下来已经超过15年以上了,随着工作经验的不断增加,物价不断的飞涨以及家庭支出的不断上涨,工作1份工资已 ...