AtCoder Beginner Contest 167 (A~F,DEF Good)
比赛链接:https://atcoder.jp/contests/abc167/tasks
AB水题,
C - Skill Up
题意:
- 初始时 \(m\) 个算法的能力均为 \(0\),\(n\) 次中每次可以花费 \(c_i\) 元提升 \(m\) 个算法的能力(提升程度可能不等),问 \(m\) 个算法能力都提升到不低于 \(x\) 的最少花费。
思路:
一开始想写DP的,但发现数据范围不是很大 \((n\le 15)\) ,那么直接枚举即可了
int n, m, x;
int c[15], a[15][15];
int M[15], Min = 1e9, cost;
void chmin(int &a, int b) { return (void)(a > b ? a = b : a = a); }
void chmax(int &a, int b) { return (void)(a < b ? a = b : a = a); }
bool check() {
for (int i = 0; i < m; ++i) if (M[i] < x) return 0;
return 1;
}
void dfs(int i) {
if (i == n) {
if (check()) chmin(Min, cost);
return ;
}
cost += c[i];
for (int j = 0; j < m; ++j) M[j] += a[i][j];
dfs(i + 1);
cost -= c[i];
for (int j = 0; j < m; ++j) M[j] -= a[i][j];
dfs(i + 1);
}
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n >> m >> x;
for (int i = 0; i < n; ++i) {
cin >> c[i];
for (int j = 0; j < m; ++j) cin >> a[i][j];
}
dfs(0);
cout << (Min == 1e9 ? -1 : Min);
}
D - Teleporter
题意:
- \(1\sim n\) 个城镇每个城镇有一个传送点可以传送到其他城镇,问从第一个城镇出发传送 \(k\) 次后所在的城镇。
思路:
模拟一下样例就知道传送过程中肯定存在环,那么我们标记环路起点,加上传送次数对环路长度的模值即可,需要注意有可能先在一些城镇间传送后才进入环路。
const int N = 2e5 + 10;
ll n, k;
ll a[N], pre[N];
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n >> k;
for (int i = 1; i <= n; ++i) cin >> a[i];
int now = 1;
ll cnt = 0;
while (k--) {
now = a[now];
if (pre[now])k %= cnt - pre[now];
pre[now] = cnt++;
}
cout << now;
}
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\) 模块防止写错细节
const int N = 2e5 + 10, mod = 998244353;
ll fac[N];
ll add(ll a, ll b) {return (a + b) % mod;}
ll mul(ll a, ll b) {return a * b % mod;}
ll qpow(ll a, ll b) {
ll ans = 1;
for (; b; b >>= 1, a = mul(a, a)) if (b & 1) ans = mul(ans, a);
return ans;
}
ll inv(ll n) {return qpow(n, mod - 2);}
ll C(ll n, ll m) {
return mul(fac[n], mul(inv(fac[m]), inv(fac[n - m])));
}
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
fac[0] = 1;
for (int i = 1; i < N; ++i) fac[i] = mul(fac[i - 1], i);
ll n, m, k;
cin >> n >> m >> k;
ll ans = 0;
for (int i = 0; i <= k; ++i)
ans = add(ans, mul(m, mul(C(n - 1, i), qpow(m - 1, n - 1 - i))));
cout << ans;
}
F - Bracket Sequencing
题意:
- 能否将一些括号串编排为合法串。
思路:
这道题不会,参考了一下这个大佬的博客:Here
详细思路:GYM - 101341A
const int M = 1e6 + 100;
int l[M], r[M];
int id[M], tp[M];
int main() {
int n; cin >> n;
for (int i = 0; i < n; i++) {
string s; cin >> s;
int x = 0, y = 0;
for (char c : s) {
if (c == '(') ++x;
else if (x) --x;
else ++y;
}
l[i] = x, r[i] = y, id[i] = i;
if (y == 0) tp[i] = 1;
else if (x == 0) tp[i] = 4;
else if (x >= y) tp[i] = 2;
else tp[i] = 3;
}
sort(id, id + n, [&] (int a, int b) {
if (tp[a] != tp[b]) return tp[a] < tp[b];
if (tp[a] == 2) {
if (r[a] != r[b]) return r[a] < r[b];
else return l[a] > l[b];
}
if (tp[a] == 3) return l[a] > l[b];
return false;
});
int sum = 0;
for (int i = 0; i < n; i++) {
sum -= r[id[i]];
if (sum < 0) break;
sum += l[id[i]];
}
cout << (sum == 0 ? "Yes" : "No");
}
AtCoder Beginner Contest 167 (A~F,DEF Good)的更多相关文章
- Atcoder Beginner Contest 156E(隔板法,组合数学)
#define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ; ; long long fac[N] ...
- AtCoder Beginner Contest 254(D-E)
Tasks - AtCoder Beginner Contest 254 D - Together Square 题意: 给定一个N,找出所有不超过N的 ( i , j ),使得( i * j )是一 ...
- Atcoder Beginner Contest 155D(二分,尺取法,细节模拟)
二分,尺取法,细节模拟,尤其是要注意a[i]被计算到和a[i]成对的a[j]里时 #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> ...
- Atcoder Beginner Contest 140E(多重集,思维)
#define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;multiset<long long&g ...
- Atcoder Beginner Contest 139E(模拟,思维)
#define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int n;int a[1007][1007] ...
- AtCoder Beginner Contest 086 (ABCD)
A - Product 题目链接:https://abc086.contest.atcoder.jp/tasks/abc086_a Time limit : 2sec / Memory limit : ...
- AtCoder Beginner Contest 127 D,E,F
D Integer Cards 题意:先给出n个数字,然后可以有m次操作,每次操作以数字对(x,y)表示最多能选x个数字把它变成y,问经历m次操作后n个数字和最大为多少? 解法:一个明显正确的做法是: ...
- 【AtCoder Beginner Contest 181】A~F题解
越学越菜系列 于2020.11.2,我绿了(错乱) A - Heavy Rotation 签到题,奇数Black,偶数White. code: #include<bits/stdc++.h> ...
- AtCoder Beginner Contest 085(ABCD)
A - Already 2018 题目链接:https://abc085.contest.atcoder.jp/tasks/abc085_a Time limit : 2sec / Memory li ...
- AtCoder Beginner Contest 084(AB)
A - New Year 题目链接:https://abc084.contest.atcoder.jp/tasks/abc084_a Time limit : 2sec / Memory limit ...
随机推荐
- 30. 干货系列从零用Rust编写正反向代理,HTTP的组装之旅(中间件)
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...
- 超实用:通过文字就可以操纵这款AI表格
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 工具介绍 今天给大家分享超实用的AI表格ChatExcel,这个工具是由北大团队在2022年3月开始开发的AI表格处理神器 ...
- Video教程的Domain设计
Domain设计 下面将介绍Video的表设计,和模型定义. 表设计 Videos设计 /// <summary> /// 视频聚合 /// </summary> public ...
- 聊聊流式数据湖Paimon(三)
概述 如果表没有定义主键,则默认情况下它是仅追加 表类型(Append Only Table). 根据桶(Bucket)的定义,我们有两种不同的仅追加模式:"Append For Scala ...
- 数字孪生与GIS结合,为智慧交通带来的改变
在当代社会,交通问题已经成为城市发展中的一个重要挑战.交通拥堵.安全隐患.环境污染等问题给人们的出行带来了许多不便和困扰.然而,随着数字孪生技术与地理信息系统(GIS)的融合,我们迎来了智慧交通的新时 ...
- IntelliJ IDEA官方宣布中文汉化包正式发布-intellijidea-guan-fang-xuan-bu-zhong-wen-han-hua-bao-zheng-shi-fa-bu
title: IntelliJ IDEA官方宣布中文汉化包正式发布 date: 2021-07-27 16:42:21.823 updated: 2021-12-26 17:43:12.204 url ...
- PHP中的反序列化漏洞理解
序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象: class S{ public $test="pikachu"; } $s=n ...
- 谈谈muduo库的销毁连接对象——C++程序内存管理和线程安全的极致体现
前言 网络编程的连接断开一向比连接建立复杂的多,这一点在陈硕写的muduo库中体现的淋漓尽致,同时也充分体现了C++程序在对象生命周期管理上的复杂性,稍有不慎,满盘皆输. 为了纪念自己啃下muduo库 ...
- 文心一言 VS 讯飞星火 VS chatgpt (30)-- 算法导论5.2 2题
二.在 HIRE-ASSISTANT 中,假设应聘者以随机顺序出现,你正好雇用两次的概率是多少? 文心一言: 我们可以先计算出在HIRE-ASSISTANT中,雇佣一个应聘者的概率为3/4,然后计算出 ...
- flutter中InheritedWidget共享数据
InheritedWidget是Flutter框架中用于在Widget树中共享数据的机制.它是一个特殊的Widget,可以将其放置在Widget树的上层,并向下传递共享的数据给其子Widget.子Wi ...