Atcoder Beginner Contest 271
前言
一场掉分的 ABC /kk
在花了 \(10\) 分钟看完前 \(4\) 题后,选择了赛场上大部分人使用的:先开 D,再按顺序做 A、B、C。(打题的时候才发现应该先开 C 的 QwQ)
但却因为 CSP-S 神秘的太空射线使得自身膨胀,结果 E 想复杂 \(\times \ 2\),当场去世。
都是因为 CSP-S,不是我的错
ABC 271 A 题
题目大意:
你需要把 \(x\) 转换成一个两位的 \(16\) 进制数,若不足两位则加上前导 \(0\)。
解法分析:
此题考查人们对输出语句的熟悉程度。
题目解法不多说,直接上代码。
AC Code:
# include <bits/stdc++.h>
using namespace std;
# define ll long long
# define lf double
# define GO(i,a,b) for(ll i = a; i <= b; i ++)
# define RO(i,b,a) for(ll i = b; i >= a; i --)
# define FO(i,u,head,e) for(int i = head[u]; i; i = e[i].next)
# define CI const int
# define pii pair<int,int>
# define MP(a,b) make_pair(a, b)
# define PB(x) push_back(x)
# define mem(a,x) memset(a, x, sizeof a)
# define F first
# define S second
int n;
int main(){
scanf("%d", &n);
printf("%02llX", n);
return 0;
}
ABC 271 B 题
题目大意:
给你 \(n\) 个数组,第 \(i\) 个数组大小为 \(k_i\),再有 \(q\) 次询问,每次问你第 \(x\) 个数组的第 \(y\) 项是什么。
解法分析:
说句闲话,vector 是个好东西。
这道题显然需要动态大小的数组,那就非 vector 莫属了。
AC Code:
# include <bits/stdc++.h>
using namespace std;
# define ll long long
# define lf double
# define GO(i,a,b) for(ll i = a; i <= b; i ++)
# define RO(i,b,a) for(ll i = b; i >= a; i --)
# define FO(i,u,head,e) for(int i = head[u]; i; i = e[i].next)
# define CI const int
# define pii pair<int,int>
# define MP(a,b) make_pair(a, b)
# define PB(x) push_back(x)
# define mem(a,x) memset(a, x, sizeof a)
# define F first
# define S second
CI maxn = 2e5 + 7;
int n, q;
int l;
vector <int> a[maxn];
int x, y;
int main(){
cin >> n >> q;
GO (i, 1, n){
scanf("%d", &l);
GO (j, 1, l){
int p;
scanf("%d", &p);
a[i].push_back(p);
}
}
while (q --){
scanf("%d %d", &x, &y);
printf("%d\n", a[x][y - 1]);
}
return 0;
}
ABC 271 C 题
题目大意:
高桥有 \(n\) 本书,第 \(i\) 本编号为 \(a_i\)。他可以不停的卖 \(2\) 本书获得一本任意编号的书,但当剩下的书不到 \(2\) 本时就不能这样了。现在高桥想要从编号为 \(1\) 的书开始读,看完一本就看下一个编号的书,如果没有就不能看了。高桥想尽量多的看书,请计算高桥最多可以看多少本书。
解法分析:
有两种做法,这里只讲二分。
这道题说到了最多,就想到了二分。考虑当现在二分到了 \(mid\),那么:
- 重复编号的书可以直接卖掉
- 剩下不重复编号但是编号大于 \(mid\) 的书也可以卖掉
当你将所有可以买的书卖掉后,看能不能达到期望的数量即可。
AC Code:
# include <bits/stdc++.h>
using namespace std;
# define ll long long
# define lf double
# define GO(i,a,b) for(ll i = a; i <= b; i ++)
# define RO(i,b,a) for(ll i = b; i >= a; i --)
# define FO(i,u,head,e) for(int i = head[u]; i; i = e[i].next)
# define CI const int
# define pii pair<int,int>
# define MP(a,b) make_pair(a, b)
# define PB(x) push_back(x)
# define mem(a,x) memset(a, x, sizeof a)
# define F first
# define S second
CI maxn = 3e5 + 7;
int n, m;
int a[maxn];
bool check(int mid){
int res = 0;
GO (i, 1, m)
res += (a[i] <= mid);
return (mid - res) * 2 <= (n - res);
}
int main(){
cin >> n;
GO (i, 1, n)
scanf("%d", &a[i]);
sort(a + 1, a + n + 1);
m = 1;
GO (i, 2, n)
if (a[i] != a[i - 1])
a[++ m] = a[i];
int l = 0, r = 1e9;
int ans = 0;
while (l <= r){
int mid = (l + r) >> 1;
if (check(mid)){
ans = mid;
l = mid + 1;
}
else r = mid - 1;
}
cout << ans;
return 0;
}
ABC 271 D 题
题目大意:
一共有 \(n\) 张牌,每一面都写着一个整数。卡 \(i\) (\(1≤i≤n\))前面写着整数 \(a_i\),后面写着整数 \(b_i\)。
你可以选择是否放置每张卡片的正面或背面可见。
确定是否可以调整卡片的正反面,使得可见整数的和恰好等于 \(s\) ,如果可能的话,找到卡片的位置来实现这一点。
解法分析:
这是一道一眼盯真的题。这道题目长得就像个 DP,那就设 \(f_{i,j}\) 为 前i个数和是否能凑成j,转移方程就是\(f_{i,j}=f_{i-1,j-a_i} | f_{i - 1, j - b_i}\) 。
又说这道题需要输出路径,这就是一个经典的路径还原了。设 \(w_{i,j}\) 为计算 \(f_{i,j}\) 时做出的选择,然后从后往前递归输出即可。
AC Code:
# include <bits/stdc++.h>
using namespace std;
# define ll long long
# define lf double
# define GO(i,a,b) for(ll i = a; i <= b; i ++)
# define RO(i,b,a) for(ll i = b; i >= a; i --)
# define FO(i,u,head,e) for(int i = head[u]; i; i = e[i].next)
# define CI const int
# define pii pair<int,int>
# define MP(a,b) make_pair(a, b)
# define PB(x) push_back(x)
# define mem(a,x) memset(a, x, sizeof a)
# define F first
# define S second
CI maxn = 107;
int n, s;
int a[maxn], b[maxn];
bool f[maxn][10007];
char w[maxn][10007];
void out(int n, int s){
if (n == 0)
return ;
out(n - 1, s - (w[n][s] == 'H' ? a[n] : b[n]));
printf("%c", w[n][s]);
}
int main(){
cin >> n >> s;
GO (i, 1, n)
scanf("%d %d", &a[i], &b[i]);
f[0][0] = true;
GO (i, 1, n){
GO (j, 0, s){
f[i][j] = max <bool> ((j >= a[i] ? f[i - 1][j - a[i]] : 0), (j >= b[i] ? f[i - 1][j - b[i]] : 0));
if (j >= a[i] && f[i][j] == f[i - 1][j - a[i]])
w[i][j] = 'H';
else if (j >= b[i] && f[i][j] == f[i - 1][j - b[i]])
w[i][j] = 'T';
else
w[i][j] = 'I';
}
}
printf(f[n][s] ? "Yes\n" : "No\n");
if (f[n][s]) out(n, s);
return 0;
}
ABC 271 E 题
题目大意:
有一个有向图, 有\(N\) 个编号为 \(1,\dots,N\) 的点和 \(M\) 条编号为 \(1,\dots,M\) 的路。
第 \(i\) 条路从 \(A_i\) 到 \(B_i\),长度是 \(C_i\)。
给定长度为 \(K\) 的序列 \(E\) ,由 \(1\) 和 \(m\) 之间的整数组成。从城镇 \(1\) 到城镇 \(N\) 的道路被称为好路径,如果:
按照路径中使用的顺序排列的道路编号序列是 \(E\) 的子序列。
找出一条好的路径所使用的道路长度的最小和。
解法分析:
赛场上想复杂了很多次,一直以为要用 Dijsktra 来做,但其实不然。题目中说一定要按照顺序来走(构成子序列),从另一方面来看,这是在帮我们建图。因为我们只能用 \(E\) 中的边,还要按顺序使用,则不会出现编号靠后的边比编号靠前的边先走的情况,这就满足了 DP 的无后效性。而 DP 的另外两个性质也是显而易见的满足,于是这道题思路就出来了:设 \(f_i\) 为走到 \(i\) 的最短路,则按顺序遍历 \(E\) 的每一条边,每次更新就是 \(f_v = \min(f_v, f_u + w)\),最后输出 \(f_n\) 即可。
AC Code:
# include <bits/stdc++.h>
using namespace std;
# define ll long long
# define lf double
# define GO(i,a,b) for(ll i = a; i <= b; i ++)
# define RO(i,b,a) for(ll i = b; i >= a; i --)
# define FO(i,u,head,e) for(int i = head[u]; i; i = e[i].next)
# define CI const int
# define pii pair<int,int>
# define MP(a,b) make_pair(a, b)
# define PB(x) push_back(x)
# define mem(a,x) memset(a, x, sizeof a)
# define F first
# define S second
CI maxn = 2e5 + 7;
int n, m, k;
int u[maxn], v[maxn], w[maxn];
int a, b;
ll dis[maxn];
int main(){
cin >> n >> m >> k;
GO (i, 1, n)
dis[i] = 2e18;
GO (i, 1, m)
scanf("%d %d %d", &u[i], &v[i], &w[i]);
dis[1] = 0;
GO (i, 1, k){
scanf("%d", &a);
dis[v[a]] = min <ll> (dis[v[a]], dis[u[a]] + w[a]);
}
cout << (dis[n] == 2e18 ? -1 : dis[n]);
return 0;
}
Atcoder Beginner Contest 271的更多相关文章
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】
AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...
- AtCoder Beginner Contest 064 D - Insertion
AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...
- AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】
AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...
- AtCoder Beginner Contest 075 C bridge【图论求桥】
AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...
随机推荐
- Python Set | update()
Python update() function in set adds elements from a set (passed as an argument) to the set. Syntax ...
- Manim:动画制作背后的魔法
Manim是一个强大的数学动画制作库,它能够帮助我们创建出令人惊叹的动画,无论是用于教学还是娱乐. 不过,对于初学者来说,Manim的内部工作机制可能显得有些复杂. 本文将从整体上简单介绍Manim的 ...
- Django 中URL和Views相关知识梳理(极简版)
提示:仅供梳理参考,很多相关的细节内容忽略. 1.URL (1)URL匹配的规则是正则,关于正则不再赘述. (2)URL优先级顺序:从urlpatterns的底部开始搜索,一直往上搜索,需要注意的是 ...
- Java并发基础之多线程
文章也发布在我的个人博客上:https://blog.ysboke.cn/archives/129.html 概述 每个Thread类的示例都代表一个线程,而进程是操作系统级别的多任务,JVM就是运行 ...
- VSCode将本地项目代码上传到gitee中
1.创建远程仓库,这个就是该仓库的地址 2.查看git的版本 git --version 3.使用git init命令初始化git 4.使用git status命令来查看文件是否被修改 : gi ...
- windows系统部署minio
下载 在官网下载exe https://dl.min.io/server/minio/release/windows-amd64/ 创建文件夹 把minio.exe放到一个文件夹里,然后同目录里再新建 ...
- 记录第一次公司内部分享:如何基于大模型搭建企业+AI业务
Hello, 大家好,我是程序员海军, 全栈开发 |AI爱好者 | 独立开发. 记录第一次在公司内部分享AI+业务 落地实践. 如今,AI时代带来的无限可能性,很多业务都值得从做一遍. 最近,老大参加 ...
- vue3 + springboot实现微信登录
创建VUE3项目 创建初始文件 进入项目存放位置 右键用命令行打开(终端打开) npm create vite@latest wechat-report --template vue npm:包管理需 ...
- 如何基于three.js(webgl)引擎架构,实现3D机房园区,数据中心消防系统
前言前面的文章我们已经详细介绍了数据中心机房的关键知识点,以及消防领域的基础知识.在此基础上,本文将深入探讨展示消防在数据中心这一特殊场景中的应用,特别是气体消防系统的应用模拟及发生火灾时逃生路径规划 ...
- 扎“芯”了——CP探针卡的国产替代道阻且长
这是IC男奋斗史的第19篇原创 关注公众号[IC男奋斗史],让我们一起撸起袖子加油干! 本文3810字,预计阅读10分钟. 之前在<凤姐如何变冰冰?>这篇文章中杰哥有介绍过CP测试,也提到 ...