AcWing 第 12 场周赛
题目链接:Here
AcWing 3805. 环形数组
签到题,循环减少出现次数,如果是 cnt[x] = 1 的话加入新的数组中
const int N = 1e3 + 10;
int cnt[N];
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
memset(cnt, 0, sizeof(cnt));
int n; cin >> n;
vector<int> a(n);
for (int &x : a) cin >> x, cnt[x] += 1;
vector<int> b;
for (int i = 0; i < n; ++i) {
if (cnt[a[i]] == 1) b.push_back(a[i]);
cnt[a[i]] -= 1;
}
cout << b.size() << "\n";
for (int x : b) cout << x << " ";
cout << "\n";
}
}
AcWing 3804. 构造字符串
参考了一下 Y总的代码,
主要思路在于分情况考虑
- \(k > n\) 时,找到字符串中最小的字符
c,先输出S然后输出 \(k - n\) 个c - \(k \le n\) 时,如同背包一样逆序处理,具体请看代码理解
bool cnt[30];
int n, k; string s;
char get_min() {
for (int i = 0; i < 26; ++i) if (cnt[i]) return i + 'a';
return -1;
}
char get_nxt(int t) {
for (int i = t + 1; i < 26; ++i) if (cnt[i]) return i + 'a';
return -1;
}
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
memset(cnt, 0, sizeof(cnt));
cin >> n >> k >> s;
for (int i = 0; i < n; ++i) cnt[s[i] - 'a'] = 1;
if (k > n) {
cout << s;
char c = get_min();
for (int i = n; i < k; ++i) cout << c;
cout << "\n";
} else {
string ss(k, 'a');
for (int i = k - 1; i >= 0; --i) {
char c = get_nxt(s[i] - 'a');
if (c != -1) {
ss[i] = c;
for (int j = 0; j < i; ++j) ss[j] = s[j];
break;
}
ss[i] = get_min();
}
cout << ss << "\n";
}
}
}
AcWing 3805. 环形数组
经典 线段树 板子,注意数组大小为 \(n\) 的 \(4\) 倍
const ll N = 2e5 + 10, inf = 1e18;
int n, m, w[N];
struct node {int l, r; ll dt, mn;} tr[N << 2];
void pushup(int u) { tr[u].mn = min(tr[u << 1].mn, tr[u << 1 | 1].mn); }
void pushdown(int u) {
auto &root = tr[u], &l = tr[u << 1], &r = tr[u << 1 | 1];
l.dt += root.dt, l.mn += root.dt;
r.dt += root.dt, r.mn += root.dt;
root.dt = 0; // 更新 LZ 标记
}
void build(int u, int l, int r) {
if (l == r) tr[u] = {l, r, 0, w[l]};
else {
tr[u] = {l, r};
int mid = l + r >> 1;
build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);
pushup(u);
}
}
void update(int u, int l, int r, int d) {
if (tr[u].l >= l && tr[u].r <= r) tr[u].dt += d, tr[u].mn += d;
else {
pushdown(u);
int mid = tr[u].l + tr[u].r >> 1;
if (l <= mid) update(u << 1, l, r, d);
if (r > mid) update(u << 1 | 1, l, r, d);
pushup(u);
}
}
ll query(int u, int l, int r) {
if (tr[u].l >= l && tr[u].r <= r) return tr[u].mn;
else {
pushdown(u);
int mid = tr[u].l + tr[u].r >> 1;
ll ans = inf;
if (l <= mid)ans = query(u << 1, l, r);
if (r > mid) ans = min(ans, query(u << 1 | 1, l, r));
return ans;
}
}
int main() {
// cin.tie(nullptr)->sync_with_stdio(false);
cin >> n;
for (int i = 0; i < n; ++i) cin >> w[i];
build(1, 0, n - 1);
cin >> m;
while (m--) {
int l, r, d; char c;
scanf("%d %d%c", &l, &r, &c);
// cin >> l >> r >> c;
if (c == '\n') {
if (l <= r) cout << query(1, l, r);
else cout << min(query(1, l, n - 1), query(1, 0, r));
cout << "\n";
} else {
cin >> d;
if (l <= r)update(1, l, r, d);
else update(1, l, n - 1, d), update(1, 0, r, d);
}
}
}
AcWing 第 12 场周赛的更多相关文章
- AcWing第85场周赛
这场周赛是手速局hh 死或生 某国正在以投票的方式决定 2 名死刑犯(编号 1∼2)的生死. 共有 n 组人员(编号 1∼n)参与投票,每组 10 人. 每组成员只参与一名死刑犯的投票,其中第 i 组 ...
- AcWing 第11场周赛题解
计算abc 首先 \(0<=a<=b<=c\) 会随机给出 \(a+b,a+c,b+c,a+b+c\)的值 因为\(a,b,c\)都为正整数,所以\(a+b+c\)一定为最大值 然后 ...
- AcWing第78场周赛
今天想起来了,就补一下吧~ 第一题 商品分类 货架中摆放着 n 件商品,每件商品都有两个属性:名称和产地. 当且仅当两件商品的名称和产地都相同时,两件商品才视为同一种商品. 请你统计,货架中一共有多少 ...
- LeetCode-第 166 场周赛
LeetCode-第 166 场周赛 1281.subtract-the-product-and-sum-of-digits-of-an-integer 1282.group-the-people-g ...
- LeetCode 第 165 场周赛
LeetCode 第 165 场周赛 5275. 找出井字棋的获胜者 5276. 不浪费原料的汉堡制作方案 5277. 统计全为 1 的正方形子矩阵 5278. 分割回文串 III C 暴力做的,只能 ...
- LeetCode--第180场周赛
LeetCode--第180场周赛 1380. 矩阵中的幸运数 class Solution { public: vector<int> luckyNumbers (vector<v ...
- Leetcode第 217 场周赛(思维量比较大)
Leetcode第 217 场周赛 比赛链接:点这里 做完前两题我就知道今天的竞赛我已经结束了 这场比赛思维量还是比较大的. 1673. 找出最具竞争力的子序列 题目 给你一个整数数组 nums 和一 ...
- 【AcWing】第 62 场周赛 【2022.07.30】
AcWing 4500. 三个元素 题目描述 给定一个长度为 \(n\) 的数组 \(r\_1,r\_2,-,r\_n\). 请你找到其中的三个元素 \(r\_a,r\_b,r\_c\),使得 \(r ...
- LeetCode第151场周赛(Java)
这是我第一次写周赛的题目,而且还是虚拟的.从这次起,以后就将所有错过的题目都写到博客来.当然既然是我错的,那代码肯定不是我自己的.我会注明来源.并且我会自己敲一遍.多总结总是没坏处的. 另外比较糟糕的 ...
- Leetcode 第133场周赛解题报告
今天参加了leetcode的周赛,算法比赛,要求速度比较快.有思路就立马启动,不会纠结是否有更好的方法或代码可读性.只要在算法复杂度数量级内,基本上是怎么实现快速就怎么来了. 比赛时先看的第二题,一看 ...
随机推荐
- 「有问必答」秒杀系统 Go并发编程实践!
有问必答 摘要 本文将介绍如何使用Go语言的并发原语来构建一个简单的高并发秒杀系统. 我们将使用Go语言的原生库和一些常见的技术手段,包括互斥锁.通道.计数器等,来解决并发访问和数据一致性的问题. 本 ...
- OpenSSL 使用AES对文件加解密
AES(Advanced Encryption Standard)是一种对称加密算法,它是目前广泛使用的加密算法之一.AES算法是由美国国家标准与技术研究院(NIST)于2001年发布的,它取代了原先 ...
- 1. Linux 软件介绍
重点: rpm -i -e -qi -ql -qf -qa --scripts. yum install remove info list repolist provides. 配置系统源. 搭建私有 ...
- Nougat:结合光学神经网络,引领学术PDF文档的智能解析、挖掘学术论文PDF的价值
Nougat:结合光学神经网络,引领学术PDF文档的智能解析.挖掘学术论文PDF的价值 这是Nougat的官方存储库,Nougat是一种学术文档PDF解析器,可以理解LaTeX数学和表格. Proje ...
- npm install 报-4048错误
报错原因: 有缓存 权限不够 有三种解决方法: 第一种:找到.npmrc文件并删除 在 C:\Users\自己用户的文件夹\ 下找到 .npmrc 文件并删除 注意:这个文件是隐藏的,需要显示隐藏才能 ...
- Mongodb安装篇+可视化工具篇
下载MongoDB 官网下载地址:Download MongoDB Community Server | MongoDB Version 选择:稳定版4.4.2 Mongo的版本分为稳定版和开发版 ...
- YOLO: Real-Time Object Detection 遇到的问题
YOLO: Real-Time Object Detection 官方介绍的方法安装好了yolo之后,然后使用命令: ./darknet detect cfg/yolov3.cfg yolov3.we ...
- 寻找市场中的Alpha—WorldQuant的阿尔法设计理念(上)
本文旨在向读者介绍Alpha的相关基本概念,以及寻找和检验Alpha的主要流程和方法.在上篇中我们梳理了 WorldQuant经典读本FindingAlphas的概要以及WebSim的使用,在下篇中我 ...
- vulntarget-a-wp
vulntarget-a 信息收集 存活扫描,目标开放了445还是win7,考虑一手永恒之蓝 arp-scan -l nmap -A -sT -sV 192.168.130.4 永恒之蓝 用nmap的 ...
- 用Spring Boot 3.2虚拟线程搭建静态文件服务器有多快?
Spring Boot 3.2 于 2023 年 11 月大张旗鼓地发布,标志着 Java 开发领域的一个关键时刻.这一突破性的版本引入了一系列革命性的功能,包括: 虚拟线程:利用 Project L ...