题目链接: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 场周赛的更多相关文章

  1. AcWing第85场周赛

    这场周赛是手速局hh 死或生 某国正在以投票的方式决定 2 名死刑犯(编号 1∼2)的生死. 共有 n 组人员(编号 1∼n)参与投票,每组 10 人. 每组成员只参与一名死刑犯的投票,其中第 i 组 ...

  2. AcWing 第11场周赛题解

    计算abc 首先 \(0<=a<=b<=c\) 会随机给出 \(a+b,a+c,b+c,a+b+c\)的值 因为\(a,b,c\)都为正整数,所以\(a+b+c\)一定为最大值 然后 ...

  3. AcWing第78场周赛

    今天想起来了,就补一下吧~ 第一题 商品分类 货架中摆放着 n 件商品,每件商品都有两个属性:名称和产地. 当且仅当两件商品的名称和产地都相同时,两件商品才视为同一种商品. 请你统计,货架中一共有多少 ...

  4. LeetCode-第 166 场周赛

    LeetCode-第 166 场周赛 1281.subtract-the-product-and-sum-of-digits-of-an-integer 1282.group-the-people-g ...

  5. LeetCode 第 165 场周赛

    LeetCode 第 165 场周赛 5275. 找出井字棋的获胜者 5276. 不浪费原料的汉堡制作方案 5277. 统计全为 1 的正方形子矩阵 5278. 分割回文串 III C 暴力做的,只能 ...

  6. LeetCode--第180场周赛

    LeetCode--第180场周赛 1380. 矩阵中的幸运数 class Solution { public: vector<int> luckyNumbers (vector<v ...

  7. Leetcode第 217 场周赛(思维量比较大)

    Leetcode第 217 场周赛 比赛链接:点这里 做完前两题我就知道今天的竞赛我已经结束了 这场比赛思维量还是比较大的. 1673. 找出最具竞争力的子序列 题目 给你一个整数数组 nums 和一 ...

  8. 【AcWing】第 62 场周赛 【2022.07.30】

    AcWing 4500. 三个元素 题目描述 给定一个长度为 \(n\) 的数组 \(r\_1,r\_2,-,r\_n\). 请你找到其中的三个元素 \(r\_a,r\_b,r\_c\),使得 \(r ...

  9. LeetCode第151场周赛(Java)

    这是我第一次写周赛的题目,而且还是虚拟的.从这次起,以后就将所有错过的题目都写到博客来.当然既然是我错的,那代码肯定不是我自己的.我会注明来源.并且我会自己敲一遍.多总结总是没坏处的. 另外比较糟糕的 ...

  10. Leetcode 第133场周赛解题报告

    今天参加了leetcode的周赛,算法比赛,要求速度比较快.有思路就立马启动,不会纠结是否有更好的方法或代码可读性.只要在算法复杂度数量级内,基本上是怎么实现快速就怎么来了. 比赛时先看的第二题,一看 ...

随机推荐

  1. RPN FPN ROIPooling

    RPN(Region Proposal Network)介绍---> 特点从backbone 生成的Feture Map中 用一个 3x3 的Conv卷积核 遍历FeatureMap的每个点然后 ...

  2. 如何实现图像搜索,文搜图,图搜图,CLIP+faiss向量数据库实现图像高效搜索

    如何实现图像搜索,文搜图,图搜图,CLIP+faiss向量数据库实现图像高效搜索 这是AIGC的时代,各种GPT大模型生成文本,还有多模态图文并茂大模型, 以及stable diffusion和sta ...

  3. 基于DotNetty实现一个接口自动发布工具 - 通信实现

    基于 DotNetty 实现通信 DotNetty : 是微软的 Azure 团队,使用 C#实现的 Netty 的版本发布.是.NET 平台的优秀网络库. 项目介绍 OpenDeploy.Commu ...

  4. idea常用快捷键使用

    idea常用快捷键使用:1.shift+u 大小写2.alt+shift+u 驼峰命名(插件:CamelCase)3.ctrl+alt 点击跳转实现类4.ctrl 点击跳转接口类5.Alt+F7 查看 ...

  5. 数据仓库主流开发语言——SQL

    数仓开发语言概述  SQL语言介绍 数仓与SQL 结构化数据 二维表结构 SQL语法分类

  6. Linux卸载与安装JDK

    安装 一.yum安装JDK 1.查看可安装的Java版本 yum -y list java* 2.选择一个自己要安装的版本 我安装的是java-11-openjdk.x86_64 sudo yum i ...

  7. VisionPro学习笔记(6)——如何使用QuickBuild

    如果需要了解其他图像处理的文章,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice ...

  8. Spring Boot中设置定时发送邮件任务

    1:浅谈发送邮箱: 邮箱验证是一个很常见的功能了,基本上每个网站都会用的到, java也有专门的jar来处理邮件发送等服务 2:学过javaweb大家都对发送邮箱上不是很陌生了吧 但之前发送邮箱的步骤 ...

  9. JavaFx之播放MP4(二十七)

    JavaFx之播放MP4(二十七) JavaFX 视频和音频支持,由 JavaFX 媒体类 Media.MediaPlayer.MediaView 和 AudioClip 提供. import jav ...

  10. JavaFx之TableView表格添加按钮删除行(二十二)

    JavaFx之TableView表格添加按钮删除行(二十二) JavaFx之TableView添加按钮 JavaFx之TableView删除行 编写一个xml <?xml version=&qu ...