Atcoder Beginner Contest 406

news2025/5/19 10:46:40

比赛链接:ABC406

A - Not Acceptable

将小时转换成分钟直接进行判断。

时间复杂度: O ( 1 ) O(1) O(1)

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if (a * 60 + b >= c * 60 + d) cout << "Yes" << endl;
    else cout << "No" << endl;
    return 0;
}

B - Product Calculator

根据题意进行模拟,为了避免 overflow 可以使用 __int128_t 来储存计算机当前展示的值。

时间复杂度: O ( N + K ) O(N + K) O(N+K)

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int N = 105;
int n, k, a[N];

signed main() {
    ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> a[i];
    __int128_t now = 1;
    int inf = 0;
    for (int i = 1; i <= k; i++) inf = inf * 10 + 9;
    for (int i = 1; i <= n; i++) {
        if (now > inf / a[i]) now = 1;
        else now *= a[i];
    }
    string ans;
    while (now) ans.push_back('0' + now % 10), now /= 10;
    for (int i = ans.size() - 1; i >= 0; i--) cout << ans[i];
    cout << endl;
    return 0;
}

C - ~

  • 根据题目条件可知,要找的波浪形的子数组,一定先增大在减小最后再增大。
  • 我们只需要找到一个连续递减部分,再在这个连续递减的部分两侧加上至少一个数就能构造出满足题目条件的子数组。
  • 每一个连续递减部分能构成的满足题目条件的子数组的数量为这个部分 前面连续递增的长度 × \times × 后面连续递增的长度。
  • 因此,只需要找到原数组每个连续递增部分的长度,答案即为所有两个相邻的连续递增部分的长度的乘积的和。

时间复杂度: O ( N ) O(N) O(N)

#include <bits/stdc++.h>
using namespace std;

using ll = long long;
const int N = 3e5 + 5;
int n, p[N], cnt[N];

int main() {
    ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    cin >> n;
	for (int i = 1; i <= n; i++) cin >> p[i];
	int num = 1;
    for (int i = 2; i <= n; i++) {
		if (p[i] > p[i - 1]) cnt[num]++;
		else if (cnt[num]) num++;
	}
	ll ans = 0;
	for (int i = 1; i <= num; i++) ans += 1LL * cnt[i - 1] * cnt[i];
	cout << ans << endl;
    return 0;
}

D - Garbage Removal

对于每一个行、列分别用一个 set 维护这一行中的点的纵、横坐标,每次查询完将对应的点的坐标从 set 中删除。

时间复杂度: O ( ∑ i = 1 Q T log ⁡ N + N log ⁡ N ) O(\sum_{i = 1}^Q T\log N + N\log N) O(i=1QTlogN+NlogN),其中 T T T 是每次需要删除的点的数量,并且 ∑ i = 1 Q T log ⁡ N ≤ N log ⁡ N \sum_{i = 1}^Q T\log N \le N\log N i=1QTlogNNlogN

#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 10;
int h, w, n, q;
set<int> row[N], col[N];

int main() {
    ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    cin >> h >> w >> n;
    for (int i = 1; i <= n; i++) {
        int x, y;
        cin >> x >> y;
        row[x].insert(y), col[y].insert(x);
    }
    cin >> q;
    while (q--) {
        int op, idx;
        cin >> op >> idx;
        if (op == 1) {
            cout << row[idx].size() << "\n";
            for (int i : row[idx]) col[i].erase(idx);
            row[idx].clear();
        }
        if (op == 2) {
            cout << col[idx].size() << "\n";
            for (int i : col[idx]) row[i].erase(idx);
            col[idx].clear();
        }
    }
    return 0;
}

E - Popcount Sum 3

从高位往低位考虑,总共放置 k k k 1 1 1,利用 d f s dfs dfs 找出答案,具体实现看代码。

时间复杂度: O ( ∑ i = 1 T i log ⁡ N ) O(\sum_{i = 1}^Ti\log N) O(i=1TilogN)

从高位往地位进行搜索,

  • 如果每一位都放 1 1 1,最多进行 log ⁡ N \log N logN s u m sum sum 就会大于 N N N
  • 如果前面都不放 1 1 1,最多进行 log ⁡ N − K \log N - K logNK 次就会被剪枝。
#include <bits/stdc++.h>
using namespace std;

#define int long long

const int mod = 998244353;
int n, k, c[65][65];

// 预处理组合数
void init() {
    c[0][0] = 1;
    for (int i = 1; i <= 60; i++) {
        c[i][0] = c[i][i] = 1;
        for (int j = 1; j < i; j++)
            c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;
    }
}

// cur 是当前位置,sum 是当前的和,cnt 是剩余要放置的 1 的数量
int dfs(int cur, int sum, int cnt) {	
	// 不合法条件:sum 大于 n,剩余位置无法放下需要放置的 1
    if (sum > n || cnt > cur + 1) return 0;
    
    // 所有 1 都放完了,sum 就是要加上的答案
    if (cnt == 0) return sum % mod;
    // 剩余的 cnt 个 1 可以放在 0 - p 任意一个位置
    if (sum + (1LL << (cur + 1)) - 1 <= n) {
        int oup = ((1LL << (cur + 1)) - 1) % mod * c[cur][cnt - 1] % mod;
        oup = (oup + c[cur + 1][cnt] * (sum % mod) % mod) % mod;
        return oup;
    }
    return (dfs(cur - 1, sum, cnt) + dfs(cur - 1, sum + (1LL << cur), cnt - 1)) % mod;
}

void solve() {
    cin >> n >> k;
    cout << dfs(59, 0, k) << "\n";
}

signed main() {
    ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    init();
    int T;
    cin >> T;
    while (T--) solve();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2379220.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录一次win11本地部署deepseek的过程

20250518 win11 docker安装部署 ollama安装 ragflow部署 deepseek部署 文章目录 1 部署Ollama下载安装ollama配置环境变量通过ollama下载模型deepseek-r1:7b 2 部署docker2.1 官网下载amd版本安装2.2 配置wsl2.3 Docker配置&#xff1a;位置代理镜像源 3 部署RAGFlow更换ragfl…

嵌入式STM32学习——外部中断EXTI与NVIC的基础练习⭐

按键控制LED灯 按键控制LED的开发流程&#xff1a; 第一步&#xff1a;使能功能复用时钟 第二布&#xff0c;配置复用寄存器 第三步&#xff0c;配置中断屏蔽寄存器 固件库按键控制LED灯 外部中断EXTI结构体&#xff1a;typedef struct{uint32_t EXTI_Line; …

<前端小白> 前端网页知识点总结

HTML 标签 1. 标题标签 h1到h6 2. 段落标签 p 3. 换行 br 水平线 hr 4. 加粗 strong 倾斜 em 下划线 ins 删除 del 5. 图像标签 img src-图像的位置 alt- 图片加载失败显示的文字 替换文本 title--- 鼠标放到图片上显示的文字 提示…

历史数据分析——宁波海运

运输服务 运输服务板块简介: 运输服务板块主要是为货物与人员流动提供核心服务的企业的集合,涵盖铁路、公路、航空、海运、物流等细分领域。该板块具有强周期属性,与经济复苏、政策调控、供需关系密切关联,尤其是海运领域。有不少国内股市的铁路、公路等相关的上市公司同…

小结:jvm 类加载过程

类加载过程 是Java虚拟机&#xff08;JVM&#xff09;将字节码文件&#xff08;.class文件&#xff09;加载到内存中&#xff0c;并转换为运行时数据结构的过程。这个过程可以分为多个步骤&#xff0c;每个步骤都有其特定的任务和目的。根据你提供的信息&#xff0c;以下是类加…

OpenCv高阶(八)——摄像头调用、摄像头OCR

文章目录 前言一、摄像头调用通用方法1、导入必要的库2、创建摄像头接口 二、摄像头OCR1.引入库2、定义函数&#xff08;1&#xff09;定义显示opencv显示函数&#xff08;2&#xff09;保持宽高比的缩放函数&#xff08;3&#xff09;坐标点排序函数&#xff08;4&#xff09;…

Java开发经验——阿里巴巴编码规范实践解析3

摘要 本文深入解析了阿里巴巴编码规范中关于错误码的制定与管理原则&#xff0c;强调错误码应便于快速溯源和沟通标准化&#xff0c;避免过于复杂。介绍了错误码的命名与设计示例&#xff0c;推荐采用模块前缀、错误类型码和业务编号的结构。同时&#xff0c;探讨了项目错误信…

MySQL——6、内置函数

内置函数 1、日期函数2、字符串函数3、数学函数4、其他函数 1、日期函数 1.1、获取当前日期&#xff1a; 1.2、获取当前时间&#xff1a; 1.3、获取当前时间戳&#xff1a; 1.4、获取当前日期时间&#xff1a; 1.5、提取出日期&#xff1a; 1.6、给日期添加天数或时间…

低延迟与高性能的技术优势解析:SmartPlayer VS VLC Media Player

在实时视频流的应用中&#xff0c;RTSP&#xff08;Real-Time Streaming Protocol&#xff09;播放器扮演着至关重要的角色&#xff0c;尤其是在视频监控、远程医疗、直播等高实时性需求的场景中。随着行业需求的不断升级&#xff0c;对播放器的低延迟、稳定性、兼容性等方面的…

【交互 / 差分约束】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long;const int N 10510; const int M 200 * 500 10; int h[N], ne[M], e[M], w[M], idx; ll d[N]; int n, m; bool st[N]; int cnt[N];void add(int a, int b, int c) {w[idx] c, e[idx] b…

宝塔面板部署前后端项目SpringBoot+Vue2

这篇博客主要用来记录宝塔部署前端后端项目的过程。因为宝塔部署有点麻烦&#xff0c;至少在我看来挺麻烦的。我还是喜欢原始的ssh连接服务器进行操作。但是公司有项目用到了宝塔&#xff0c;没办法啊&#xff0c;只能摸索记录一下。 我们需要提前准备好后端项目的jar包和前端项…

现代生活健康养生新视角

在科技飞速发展的今天&#xff0c;我们的生活方式发生巨大转变&#xff0c;健康养生也需要新视角。从光线、声音等生活细节入手&#xff0c;能为健康管理开辟新路径。​ 光线与健康密切相关。早晨接触自然光线&#xff0c;可调节生物钟&#xff0c;提升血清素水平&#xff0c;…

多模态大语言模型arxiv论文略读(八十一)

What is the Visual Cognition Gap between Humans and Multimodal LLMs? ➡️ 论文标题&#xff1a;What is the Visual Cognition Gap between Humans and Multimodal LLMs? ➡️ 论文作者&#xff1a;Xu Cao, Bolin Lai, Wenqian Ye, Yunsheng Ma, Joerg Heintz, Jintai …

3.4/Q2,Charls最新文章解读

文章题目&#xff1a;Associations between reversible and potentially reversible cognitive frailty and falls in community-dwelling older adults in China: a longitudinal study DOI&#xff1a;10.1186/s12877-025-05872-2 中文标题&#xff1a;中国社区老年人可逆性和…

通过觅思文档项目实现Obsidian文章浏览器在线访问

觅思文档项目开源地址 觅思文档项目开源地址&#xff1a;https://gitee.com/zmister/MrDoc 觅思文档部署步骤概览 服务器拉取代码&#xff1a; git clone https://gitee.com/zmister/mrdoc-install.git && cd mrdoc-install && chmod x docker-install.sh &a…

5月18总结

一.算法题总结 1. 解题思路&#xff1a;对于这个题&#xff0c;我最开始想到就是二分&#xff0c;但是头痛的是有三个解&#xff0c;如果我在-100到100之间二分&#xff0c;那么只能得出一个解&#xff0c;然后我就想了一下&#xff0c;这个要求精度&#xff0c;那么0.01这么小…

Linux Bash | Capture Output / Recall

注&#xff1a;本文为 “Linux Bash | Capture Output / Recall” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;略作重排。 Automatically Capture Output of the Last Command Into a Variable Using Bash 使用 Bash自动将最后一个命令的输出捕获到…

2025/5/18

继续研究一下大佬的RAG项目。开始我的碎碎念。 RAG可以分成两部分&#xff1a;一个是问答&#xff0c;一个是数据处理。 问答是人提问&#xff0c;然后查数据库&#xff0c;把查的东西用大模型组织成人话&#xff0c;回答人的提问。 数据处理是把当下知识库里的东西&#xf…

基于Quicker构建从截图到公网图像链接获取的自动化流程

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言预备内容转webp程序PicGo设置Quicker设置视频演示总结互动致谢参考 前言 在自建博…

LeetCode算 法 实 战 - - - 双 指 针 与 移 除 元 素、快 慢 指 针 与 删 除 有 序 数 组 中 的 重 复 项

LeetCode算 法 实 战 - - - 双 指 针 与 移 除 元 素、快 慢 指 针 与 删 除 有 序 数 组 中 的 重 复 项 第 一 题 - - - 移 除 元 素方 法 一 - - - 双 重 循 环方 法 二 - - - 双 指 针方 法 三 - - - 相 向 双 指 针&#xff08;面 对 面 移 动&#xff09; 第 二 题 - - -…