AtCoder Beginner Contest 362

前言

vp 的时候出了四题,被 C 题卡了一会,很久才出,D 题是 dijkstra 的板子,改下条件即可,E 题是个计数 dp,这类题一直不怎么擅长,想起之前杭电第一场那个序列立方的题也是类似这种计数 dp,需要加强练习。

A - Buy a Pen (atcoder.jp)

思路

判断两两最小。

代码

#include <bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int a, b, c;
cin >> a >> b >> c; string x;
cin >> x; if (x == "Red") cout << min(b, c) << '\n';
if (x == "Blue") cout << min(a, b) << '\n';
if (x == "Green") cout << min(a, c) << '\n'; return 0;
}

B - Right Triangle (atcoder.jp)

思路

根据勾股定理判一下即可,这里坐标都很小,可以不用开方,开方的话还会涉及到精度问题。

代码

#include <bits/stdc++.h>

using namespace std;

using i64 = long long;

struct point {
i64 x;
i64 y;
} ; //求两点之间的距离
i64 dis(point p1, point p2) {
return ((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
} int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); point a, b, c;
cin >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y;
i64 ab = dis(a, b);
i64 ac = dis(a, c);
i64 bc = dis(b, c);
if ((ab + ac == bc) || (ab + bc == ac) || (ac + bc == ab)) {
printf("Yes");
}
else {
printf("No");
} return 0;
}

C - Sum = 0 (atcoder.jp)

思路

先累计两边边界的和,记为 \(sum_l\) 和 \(sum_r\) ,如果 \(sum_l>0\) 说明左边取全最小都还是不可能等于 0 ,右边同理,这种特殊处理一下即可。

考虑当 \(sum_l\le 0\) 的时候,那我们只要往右边偏移 \(|sum_l|\) 即可,把小于 0 的那部分用正数来补;右边同理。

代码

#include <bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int n;
cin >> n; i64 lsum = 0, rsum = 0;
vector<array<i64, 2>> node(n);
for (auto &[x, y] : node) {
cin >> x >> y;
lsum += x, rsum += y;
} if (lsum > 0 || rsum < 0) {
cout << "No\n";
return 0;
} cout << "Yes\n"; if (lsum <= 0) {
i64 now = -lsum;
for (auto [x, y] : node) {
if (now) {
cout << min(x + now, y) << ' ';
now -= min(x + now, y) - x;
} else
cout << x << ' ';
}
} else {
i64 now = rsum;
for (auto [x, y] : node) {
if (now) {
cout << max(x, y - now) << ' ';
now -= y - max(y - now, x);
} else
cout << y << ' ';
}
} return 0;
}

D - Shortest Path 3 (atcoder.jp)

思路

dijkstra 板子题,只要在判断条件那里增加一个 \(a_v\) 即可。

代码

#include <bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int n, m;
cin >> n >> m; vector<int> a(n + 1);
for (int i = 1; i <= n; i ++)
cin >> a[i]; vector g(n + 1, vector<array<int, 2>>());
for (int i = 0; i < m; i ++) {
int u, v, w;
cin >> u >> v >> w;
g[u].push_back({v, w});
g[v].push_back({u, w});
} vector<i64> dis(n + 1, LLONG_MAX >> 1);
priority_queue<pair<i64, i64>, vector<pair<i64, i64>>, greater<>> Q;
dis[1] = a[1]; Q.push({dis[1], 1}); while (Q.size()) {
auto [_, u] = Q.top();
Q.pop(); if (dis[u] < _) continue; for (auto [v, w] : g[u]) {
if (dis[v] > dis[u] + w + a[v]) {
dis[v] = dis[u] + w + a[v];
Q.push({dis[v], v});
}
}
} for (int i = 2; i <= n; i ++)
cout << dis[i] << " \n"[i == n]; return 0;
}

E - Count Arithmetic Subsequences (atcoder.jp)

思路

考虑计数 dp。

设 \(dp_{i,j,k}\) 为长度为 i 的子序列末尾两项为 \(a_j\) 和 \(a_k\) 的方案数。

转移的时候可以枚举倒数第三项来转移:

\[dp_{len,j,k} = dp_{len,j,k}+\sum\limits_{i=len-2}^{j-1}dp_{len-1,i,j}[a_j-a_i=a_k-a_j]
\]

代码

// LUOGU_RID: 169183095
#include <bits/stdc++.h> using namespace std; using i64 = long long; constexpr i64 mod = 998244353, N = 300;
i64 dp[N][N][N] {}; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int n;
cin >> n; vector<int> a(n + 1);
for (int i = 1; i <= n; i ++)
cin >> a[i]; if (n == 1) {
cout << 1 << '\n';
return 0;
} vector<int> ans(n + 1);
ans[1] = n, ans[2] = n * (n - 1) / 2; for (int i = 1; i <= n; i ++) {
for (int j = i + 1; j <= n; j ++) {
dp[2][i][j] = 1;
}
} for (int len = 3; len <= n; len ++) {
for (int j = len - 1; j <= n; j ++) {
for (int k = j + 1; k <= n; k ++) {
for (int i = len - 2; i < j; i ++) {
if (a[j] - a[i] == a[k] - a[j]) {
(dp[len][j][k] += dp[len - 1][i][j]) %= mod;
}
}
(ans[len] += dp[len][j][k]) %= mod;
}
}
} for (int i = 1; i <= n; i ++)
cout << ans[i] << " \n"[i == n]; return 0;
}

AtCoder Beginner Contest 362的更多相关文章

  1. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  2. AtCoder Beginner Contest 052

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

  3. AtCoder Beginner Contest 053 ABCD题

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

  4. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  5. AtCoder Beginner Contest 137 F

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

  6. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  7. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  8. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

  9. AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】

    AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...

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

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

随机推荐

  1. 11-Python网络编程

    socket包介绍 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. 创建一个T ...

  2. 打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹

    产生这种现象有很多方面的原因 如果你能用命令行的方式访问ftp服务器,但是不能用资源管理器访问,那么请看下去. 1.打开IE浏览器,点击设置 2.点击Internet选项,进入高级 3.取消勾选 大功 ...

  3. Java面试知识点(二)super 和 this 关键字

    this this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this 的用法在 java 中大体可以分为 3 种: 普通的直接引用 这种就不用讲了,this 相当于是指向 ...

  4. 高通平台抓ram dump

    高通平台抓ram dump 原文(有删改):https://blog.csdn.net/m0_37166404/article/details/80821600 背景 高通平台下提供了一个工具,专门用 ...

  5. Linux设备模型:6、Bus

    作者:wowo 发布于:2014-4-15 19:21 分类:统一设备模型 原创文章,转发请注明出处.蜗窝科技,www.wowotech.net. 概述 在Linux设备模型中,Bus(总线)是一类特 ...

  6. git 有用配置汇总

    背景 git config的不同级别,每一个级别覆盖上一级别的配置,所以.git/config的配置变量会覆盖/etc/gitconfig中的配置变量 git config --system #为整个 ...

  7. 【资料分享】全志科技T507工业核心板硬件说明书(下)

    目    录 3 电气特性 3.1 工作环境 3.2 功耗测试 3.3 热成像图 4 机械尺寸 5 底板设计注意事项 5.1 最小系统设计 5.1.1 电源设计说明 5.1.2 系统启动配置 5.1. ...

  8. java中的基准测试框架JMH

    JHM是openJDK开发的一个benchmark框架.它是一个Maven依赖,所以创建一个Maven项目,引入下面两个依赖: <dependency> <groupId>or ...

  9. MongoDB安装、基础操作和聚合实例详解

    虽然MongoDB这些年很流行,但笔者之前没研究过,现在有需求研究这类NoSQL的数据库,是为了验证其是否可被替换. MongoDB是很轻量的文档数据库,简单测试也懒得专门准备虚拟机环境了,直接在ma ...

  10. 3.5 Y84-64的流水线实现

    我们终于准备好要开始本章的主要任务--设计一个流水线化的Y86-64处理器.首先,对顺序的SEQ处理器做一点小的改动,将PC的计算挪到取指阶段.然后,在各个阶段之间加上流水线寄存器.到这个时候,我们的 ...