补题链接:Here

A - Rock-paper-scissors

石头剪刀布,两方是一样的则输出该值,否则输出该值

int s[4] = {0, 1, 2};
void solve() {
int x, y;
cin >> x >> y;
if (x == y) cout << x;
else {
for (int i = 0; i < 3; i++)
if (s[i] != x && s[i] != y)
cout << s[i];
}
}

B - Nuts

坚果数超过 \(10\) 个便累加(x-10)

void solve() {
int n;
cin >> n;
int cnt = 0;
for (int i = 0, x; i < n; ++i) {
cin >> x;
if (x > 10)cnt += (x - 10);
}
cout << cnt;
}

C - Tour

\(n\) 个城市,\(m\) 条单向道路,请问在以每个城市为起点能有多少个终点(本身也算


\(n\le2000\) ,DFS 在图上搜索即可

const int N = 2e3 + 10;
vector<int>e[N];
bool vis[N];
void dfs(int u) {
if (vis[u])return ;
vis[u] = true;
for (int v : e[u])dfs(v);
}
void solve() {
int n, m; cin >> n >> m;
while (m--) {
int a, b; cin >> a >> b;
e[a].push_back(b);
}
int ans = 0;
for (int i = 1; i <= n; ++i) {
memset(vis, false, sizeof(vis));
dfs(i);
for (int j = 1; j <= n; ++j)if (vis[j])ans++;
}
cout << ans;
}

D - Cooking

两个微波炉,\(n\) 道菜,每个菜需要 \(a_i\) 分钟加热,请问最少需要多少时间才能把所有菜都加热完毕


烤箱的使用顺序无关紧要;只有为每道菜指定一个烤箱才是必要的。

考虑到根据要分配的两个烤箱中的哪一个将菜分为两组,该问题等价于“将N个菜分为两组,使烹调菜所需的最大次数之和最小化。”设为 \(t_1+…+t_n\)。我们可以假设第一个烤箱的占用时间不少于第二个烤箱的占用时间(如果不是,我们可以交换这两个烤箱)。然后,第一烤箱的使用持续时间至少为 \(S/2\) 。由于我们想在这个约束条件下尽可能减少使用第一台烤箱的时间,所以问题归结为“\(t_1…t_n\)的子集的最小和大于或等于 \(S/2\) 是多少?”如果我们能为每个x回答“ \(T_1,…,T_N\)的子集是否存在,这只不过是一个子集和问题,所以它可以在 \(\mathcal{O}(N\sum_iT_i)\) 的总和中找到∑ 具有以下布尔值的DP

bitset<100004>f;
void solve() {
int n; cin >> n;
int cnt = 0;
f[0] = 1;
for (int i = 0, x; i < n; ++i) {
cin >> x;
f |= f << x; cnt += x;
}
int ans = 1e9;
for (int i = 0; i < 1e5; ++i)if (f[i])ans = min(ans, max(i, cnt - i));
cout << ans;
}

E - Rush Hour 2

AtCoder王国有 \(n\) 个城市和 \(m\) 条双向道路

假设在 \(t\) 时刻经过了第 \(i\) 条道路,则通过的时间为 \(C_i + ⌊\frac{D_i}{t+1}⌋\)

现在请问最短的时间是多少,Takahashi 可以从城市 \(1\) 到达城市 \(n\) ,如果到达不了则输出 \(-1\)


利用优先队列跑 BFS,同时用 tuple 元组存储数据 (记得开启 C++17 来保证 tuple 可通过编译)

#define inf 9223372036854775807LL
#define N 100005
using ll = long long;
using Edge = tuple<int, int, int>;
using pli = pair<ll, int>;
vector<Edge> e[N];
ll dist[N];
void solve() {
int n, m;
cin >> n >> m;
while (m--) {
int a, b, c, d;
cin >> a >> b >> c >> d;
if (--a == --b)continue;
e[a].emplace_back(b, c, d);
e[b].emplace_back(a, c, d);
}
dist[0] = 0LL;
for (int i = 1; i < n; i++) dist[i] = inf;
priority_queue<pli, vector<pli>, greater<pli>>q;
q.emplace(0, 0);
while (!q.empty()) {
auto [t, u] = q.top();
q.pop();
if (dist[u] != t)continue;
for (auto [v, c, d] : e[u]) {
ll t2 = sqrt((long double) d) - 0.5;
if (t2 < t) t2 = t;
t2 += ll(c) + ll(d) / (t2 + 1ll);
if (t2 < dist[v])
q.emplace(dist[v] = t2, v); }
}
cout << (dist[n - 1] == inf ? -1 : dist[n - 1]) << endl;
}

AtCoder Beginner Contest 204 (AB水题,C题DFS,D题位运算DP,E题BFS好题)的更多相关文章

  1. AtCoder Beginner Contest 204

    身败名裂了,\(AK\)场转掉分场. 都是水题不说了. 这篇文鸽了.

  2. AtCoder Beginner Contest 087 D People on a Line(DFS)

    题意 给出n个点,m组关系L,R,D,L在R的左边距离D,判断是否存在n个人的位置满足m组关系 分析 Consider the following directed graph G: There ar ...

  3. AtCoder Beginner Contest 068 ABCD题

    A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...

  4. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  5. AtCoder Beginner Contest 223

    AtCoder Beginner Contest 223 A是纯纯的水题,就不说了 B - String Shifting 思路分析 我真的sb,一开始想了好久是不是和全排列有关,然后读了好几遍题目也 ...

  6. AtCoder Beginner Contest 184 题解

    AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...

  7. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  8. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  9. AtCoder Beginner Contest 075 C bridge【图论求桥】

    AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...

  10. AtCoder Beginner Contest 153 题解

    目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...

随机推荐

  1. Kotlin协程系列(一)

    一.协程的定义 最近看了一本有关kotlin协程的书籍,对协程又有了不一样的了解,所以准备写一个关于kotlin协程系列的文章. 言归正传,我们在学习一个新东西的时候,如果连这个东西"是什么 ...

  2. Modbus 转PROFINET 网关 TS-180在级联通讯中的应用

    一.硬件连接 TS-180 具有冗余网口功能,用户可以通过级联方式连接来进行通讯,其他资料可参考说明书.将西门子 S7-300 PLC 通过网线与5台 TS-180 串联,用户可以选择下列两种连接方式 ...

  3. 金蝶云星空与吉客云电商ERP数据对接

    01 系统说明: 吉客云 吉客云: 从业务数字化和组织数字化两个方向出发,以生成流程的闭环为依归,致力于为企业的数字化升级提供落地工具.销售订单层面,吉客云对接了国内外主流的销售平台,兼容了电商渠道. ...

  4. 【Javaweb】瑞吉外卖你冲不冲?冲冲!冲!冲冲!(数据库环境搭建)(maven项目搭建)一

    图形界面创建数据库(Navicat) 命令行方式创建 瑞吉项目一共涉及到十一张表 导入表结构,既可以使用上面的图形界面,也可以使用MySQL命令: 通过命令导入表结构时,注意sql文件不要放在中文目录 ...

  5. CompletableFuture进阶

    CompletableFuture进阶 1.异步任务的交互 异步任务交互指将异步任务获取结果的速度相比较,按一定的规则( 先到先用 )进行下一步处理. 1.1 applyToEither applyT ...

  6. VUE路由基本操作

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. OpenEuler22.03安装最新版本Docker

    一.环境及问题 操作系统环境如下: 操作系统:OpenEuler 22.03 LTS 安装方式:最小化安装 在操作系统安装完毕如果直接采用dnf或者yum方式安装docker: sudo dnf in ...

  8. aspnetcore使用websocket实时更新商品信息

    先演示一下效果,再展示代码逻辑. 中间几次调用过程省略... 暂时只用到了下面四个项目 1.产品展示页面中第一次通过接口去获取数据库的列表数据 /// <summary> /// 获取指定 ...

  9. kubernetes安装(一)

    参考: https://www.cnblogs.com/liuyangQAQ/p/17299871.html 部署组件包 名称 安装包 kubeadm集群组件 kubelet-1.20.9 kubea ...

  10. ORA-28579 在从外部过程代理程序回调时,发生网络错误,ORA-06512 在"SDE.ST_GEOMETRY_SHAPELIB_PKG"

    如图所示,在执行sde.st_transform方法时报错. 环境是arcgis10.8  oracle是12C,版本号是v12.1.0.2.0 但是执行ST_GEOMETRY方法是可以的,说明配置没 ...