AtCoder Beginner Contest 407(ABCDE)

news2025/5/25 15:15:34

A - Approximation

翻译:

        给你一个正整数 A 和一个正奇数 B。
        请输出与实数  \frac{A}{B} 的差最小的整数。
        可以证明,在约束条件下,这样的整数是唯一的。

思路:

        令c=\lfloor \frac{A}{B}\rfloor。比较c+1-\frac{1.0*A}{B},\frac{1.0*A}{B}-1来判断答案。

实现:

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

void solve(){
    int a,b;
    cin>>a>>b;
    int c = a/b;
    if (1.0*a/b-c<(c+1)-1.0*a/b){
        cout<<c<<endl;
    }else{
        cout<<c+1<<endl;
    }
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 四舍五入中间填保留几位小数,不填默认
    // cout.precision();
    solve();
    return 0;
}



B - P(X or Y)

翻译:

        掷两颗骰子,每颗骰子都有六个面 1、2、3、4、5、6。求以下两个条件中至少有一个成立的概率:

  • 两个结果之和至少为 X。
  • 两个结果的绝对差至少为 Y。

        每个骰子的每个面的可能性相同,且两个骰子是独立的。

思路:

        遍历所有情况并判断条件是否成立。

实现:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int x,y;
bool check(int a,int b){
    return (a+b>=x || abs(a-b)>=y);
}
void solve(){
    cin>>x>>y;
    int cnt = 0;
    for (int i=1;i<=6;i++){
        for (int j=1;j<=6;j++){
            cnt+=check(i,j);
        }
    }
    cout<<1.0*cnt/36<<endl;
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
     cout<<fixed;
    // 四舍五入中间填保留几位小数,不填默认
     cout.precision(9);
    solve();
    return 0;
}



C - Security 2

翻译:

        在 AtCoder 公司的入口处,有一个特殊的密码输入装置。该设备由一个显示一个字符串的屏幕和两个按钮组成。

        让 t 是屏幕上显示的字符串。最初 t 是空字符串。按下按钮后,t 会发生如下变化:

  • 按 A 按钮会在 t 的末尾添加 0。
  • 按 B 按钮将 t 中的每个数字替换为下一个数字。t 中的每一位数字替换为下一位数字。1;9 之后的下一位数为 0。

        例如 t 为 1984,按下 A 按钮、 t 就变成了 19840;如果按下 B 按钮,t 就变成了 20951、 t 就会变成 20951。

        给您一个字符串 S. 从空字符串开始,按下 0 次或更多次按钮,直到 t 与 S. 求最少需要按多少次按钮。

思路:

        s从后往前判断,当前数位为 i 时,说明到最终答案的状态要在加0后按i次,而之前的值都要也按 i 次。再下一个数位以此类推。(模拟)

实现:

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

void solve(){
    string s;
    cin>>s;
    int ans = s.size(),cnt = 0;
    for (int i=s.size()-1;i>=0;i--){
        int now = s[i]-'0';
        int need = (10+(now-cnt)%10)%10;
        ans+=need;
        cnt+=need;
    }
    cout<<ans<<endl;
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
     cout<<fixed;
    // 四舍五入中间填保留几位小数,不填默认
     cout.precision(9);
    solve();
    return 0;
}

D - Domino Covering XOR

翻译:

        有一个 H 行 W 列的网格。让 (i,j) 表示位于 从上往下数第 i 行的单元格(1≤i≤H)和从左往下数第 j 列的单元格(1≤j≤W)。

        单元格 (i,j) (1≤i≤H,1≤j≤W) 上写有一个非负整数 A i,j。

        让我们在网格上放置零块或多块多米诺骨牌。一块多米诺骨牌覆盖两个相邻的单元格,即以下两对中的一对:

  • 单元格 (i,j) 和 (i,j+1) 为 1≤i≤H,1≤j<W;
  • 单元格 (i,j) 和 (i+1,j) 为 1≤i<H,1≤j≤W。

        任何单元格都不能被一块以上的骨牌覆盖。

        对于多米诺骨牌的摆放,其得分定义为写在未被任何多米诺骨牌覆盖的单元格中的所有整数的比特 XOR。

        求最大可能得分。

思路:

        数据量足够小,直接遍历所有情况(几块多米诺骨牌,每块多米诺骨牌的摆放方式)比较答案大小。(dfs)

实现:

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

void solve(){
    ll h,w;
    cin>>h>>w;
    vector<vector<ll>> maze(h,vector<ll>(w));
    ll now = 0,ans = 0;
    for (ll i=0;i<h;i++){
        for (ll j=0;j<w;j++){
            cin>>maze[i][j];
            now ^= maze[i][j];
        }
    }
    vector<vector<ll>> vis(h,vector<ll>(w,0));
    auto dfs = [&](auto&& dfs,ll cnt,ll x,ll y,ll now){
        if (cnt==0){
            ans = max(ans,now);
            return;
        }
        if (x==h-1 && y==w-1) return;
        // 不拿
        dfs(dfs,cnt,x+(y==w-1),(y+1)%w,now);
        // 拿
        if (vis[x][y]==0){
            vis[x][y] = 1;
            // 拿下
            if (x!=h-1 && vis[x+1][y]==0){
                vis[x+1][y] = 1;
                dfs(dfs,cnt-1,x+(y==w-1),(y+1)%w,now^maze[x][y]^maze[x+1][y]);
                vis[x+1][y] = 0;
            }
            // 拿右
            if (y!=w-1 && vis[x][y+1]==0){
                vis[x][y+1] = 1;
                dfs(dfs,cnt-1,x+(y==w-1),(y+1)%w,now^maze[x][y]^maze[x][y+1]);
                vis[x][y+1] = 0;
            }
            vis[x][y] = 0;
        }
    };
    for (int i=0;2*i<=h*w;i++){
        dfs(dfs,i,0,0,now);
    }
    cout<<ans<<endl;
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
//     cout<<fixed;
    // 四舍五入中间填保留几位小数,不填默认
//     cout.precision(9);
    solve();
    return 0;
}

E - Most Valuable Parentheses

翻译:

        给你一个长度为 2N 的非负整数序列 A=(A 1 ,...,A 2N )。

        长度为 2N 的括号序列 s 的得分定义如下:

  • 对于 s 的第 i 个字符为 ) 的每个位置 i,设 A i  为 为 0,然后求 A 的所有元素之和。

        求长度为 2N 的正确括号序列的最大可能得分。

        给你 T 个测试用例,请逐个求解。

思路:

        序列A的两端是可以确定状态的,之后自前向后同时取两个放入大根堆,并从中取出最大的值,作为符号(。此过程保证了左括号始终大于等于右括号。(堆,贪心)

实现:

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

void solve(){
    ll n;cin>>n;
    vector<ll> a(2*n);
    for (ll &i:a) cin>>i;
    ll ans = a[0];
    priority_queue<ll> pq;
    for (ll i=1;i<n;i++){
        pq.push(a[2*i-1]);
        pq.push(a[2*i]);
        ans+=pq.top();
        pq.pop();
    }
    cout<<ans<<endl;
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
//     cout<<fixed;
    // 四舍五入中间填保留几位小数,不填默认
//     cout.precision(9);
    ll t;cin>>t;
    while (t--) solve();
    return 0;
}

之后补题会在此增加题解。    

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

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

相关文章

VILT模型阅读笔记

代码地址&#xff1a;VILT Abstract Vision-and-Language Pre-training (VLP) has improved performance on various joint vision-andlanguage downstream tasks. Current approaches to VLP heavily rely on image feature extraction processes, most of which involve re…

掌握 npm 核心操作:从安装到管理依赖的完整指南

图为开发者正在终端操作npm命令&#xff0c;图片来源&#xff1a;Unsplash 作为 Node.js 生态的基石&#xff0c;npm&#xff08;Node Package Manager&#xff09;是每位开发者必须精通的工具。每天有超过 1700 万个项目通过 npm 共享代码&#xff0c;其重要性不言而喻。本文…

OpenCV CUDA模块特征检测与描述------一种基于快速特征点检测和旋转不变的二进制描述符类cv::cuda::ORB

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::ORB 是 OpenCV 库中 CUDA 模块的一部分&#xff0c;它提供了一种基于快速特征点检测和旋转不变的二进制描述符的方法&#xff0c;用于…

Awesome ChatGPT Prompts:释放AI对话潜力的开源利器

项目概览 Awesome ChatGPT Prompts 是由土耳其开发者 Fatih Kadir Akın 发起的开源项目,托管于 GitHub,旨在通过精心设计的提示词模板(Prompts)优化用户与 ChatGPT 的交互体验。项目以 Markdown 和 CSV 格式管理模板,无需复杂编程语言,但需文本处理能力,目前已在 GitH…

PP-YOLOE-SOD学习笔记2

一、解析X-Anylabeling标注后的json格式问题 最近在使用自动标注工具后json格式转化过程中&#xff0c;即标注框的四点坐标转换为两点坐标时&#xff0c;发现json格式的四点顺序是按顺时针方向开始的&#xff0c;那么在转换其实就是删除2、4坐标或者1、3坐标即可。 二、数据集…

算法学习——从零实现循环神经网络

从零实现循环神经网络 一、任务背景二、数据读取与准备1. 词元化2. 构建词表 三、参数初始化与训练1. 参数初始化2. 模型训练 四、预测总结 一、任务背景 对于序列文本来说&#xff0c;如何通过输入的几个词来得到后面的词一直是大家关注的任务之一&#xff0c;即&#xff1a;…

win10使用nginx做简单负载均衡测试

一、首先安装Nginx&#xff1a; 官网链接&#xff1a;https://nginx.org/en/download.html 下载完成后&#xff0c;在本地文件中解压。 解压完成之后&#xff0c;打开conf --> nginx.config 文件 1、在 http 里面加入以下代码 upstream GY{#Nginx是如何实现负载均衡的&a…

2025电工杯数学建模B题思路数模AI提示词工程

我发布的智能体链接&#xff1a;数模AI扣子是新一代 AI 大模型智能体开发平台。整合了插件、长短期记忆、工作流、卡片等丰富能力&#xff0c;扣子能帮你低门槛、快速搭建个性化或具备商业价值的智能体&#xff0c;并发布到豆包、飞书等各个平台。https://www.coze.cn/search/n…

【日志软件】hoo wintail 的替代

hoo wintail 的替代 主要问题是日志大了以后会卡有时候日志覆盖后&#xff0c;改变了&#xff0c;更新了&#xff0c;hoo wintail可能无法识别需要重新打开。 有很多类似的日志监控软件可以替代。以下是一些推荐的选项&#xff1a; 免费软件 BareTail 轻量级的实时日志查看…

Ollama-OCR:基于Ollama多模态大模型的端到端文档解析和处理

基本介绍 Ollama-OCR是一个Python的OCR解析库&#xff0c;结合了Ollama的模型能力&#xff0c;可以直接处理 PDF 文件无需额外转换&#xff0c;轻松从扫描版或原生 PDF 文档中提取文本和数据。根据使用的视觉模型和自定义提示词&#xff0c;Ollama-OCR 可支持多种语言&#xf…

OpenCV CUDA 模块中图像过滤------创建一个拉普拉斯(Laplacian)滤波器函数createLaplacianFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::createLaplacianFilter 是 OpenCV CUDA 模块中的一个函数&#xff0c;用于创建一个 拉普拉斯&#xff08;Laplacian&#xff09;滤波器…

图论学习笔记 3

自认为写了很多&#xff0c;后面会出 仙人掌、最小树形图 学习笔记。 多图警告。 众所周知王老师有一句话&#xff1a; ⼀篇⽂章不宜过⻓&#xff0c;不然之后再修改使⽤的时候&#xff0c;在其中找想找的东⻄就有点麻烦了。当然⽂章也不宜过多&#xff0c;不然想要的⽂章也不…

【将WPS设置为默认打开方式】--突然无法用WPS打开文件

1. 点击【开始】——【WPS Office】——【配置工具】&#xff1b; 2. 在出现的弹窗中&#xff0c;点击【高级】&#xff1b; 3. 在“兼容设置”中&#xff0c;将复选框勾上&#xff0c;点击【确定】。

电子人的分水岭-FPGA模电和数电

为什么模电这么难学&#xff1f;一文带你透彻理解模电 ——FPGA是“前期数电&#xff0c;后期模电”的典型代表 在电子工程的世界里&#xff0c;有两门基础课程让无数学生“闻之色变”&#xff1a;数字电路&#xff08;数电&#xff09; 和 模拟电路&#xff08;模电&#xff0…

(6)python爬虫--selenium

文章目录 前言一、初识selenium二、安装selenium2.1 查看chrome版本并禁止chrome自动更新2.1.1 查看chrome版本2.1.2 禁止chrome更新自动更新 2.2 安装对应版本的驱动程序2.3安装selenium包 三、selenium关于浏览器的使用3.1 创建浏览器、设置、打开3.2 打开/关闭网页及浏览器3…

Python之两个爬虫案例实战(澎湃新闻+网易每日简报):附源码+解释

目录 一、案例一&#xff1a;澎湃新闻时政爬取 &#xff08;1&#xff09;数据采集网站 &#xff08;2&#xff09;数据介绍 &#xff08;3&#xff09;数据采集方法 &#xff08;4&#xff09;数据采集过程 二、案例二&#xff1a;网易每日新闻简报爬取 &#xff08;1&#x…

✨ PLSQL卡顿优化

✨ PLSQL卡顿优化 1.&#x1f4c2; 打开首选项2.&#x1f527; Oracle连接配置3.⛔ 关闭更新和新闻 1.&#x1f4c2; 打开首选项 2.&#x1f527; Oracle连接配置 3.⛔ 关闭更新和新闻

python+vlisp实现对多段线范围内土方体积的计算

#在工程中&#xff0c;经常用到计算土方回填、土方开挖的体积。就是在一个范围内&#xff0c;计算土被挖走&#xff0c;或者填多少&#xff0c;这个需要测量挖填前后这个范围内的高程点。为此&#xff0c;我开发一个app&#xff0c;可以直接在autocad上提取高程点&#xff0c;然…

APM32小系统键盘PCB原理图设计详解

APM32小系统键盘PCB原理图设计详解 一、APM32小系统简介 APM32微控制器是国内半导体厂商推出的一款高性能ARM Cortex-M3内核微控制器&#xff0c;与STM32高度兼容&#xff0c;非常适合DIY爱好者用于自制键盘、开发板等电子项目。本文将详细讲解如何基于APM32 CBT6芯片设计一款…

对象存储(Minio)使用

目录 1.安装 MinIO&#xff08;Windows&#xff09; 2.启动minio服务&#xff1a; 3.界面访问 4.进入界面 5.前后端代码配置 1)minio前端配置 2&#xff09;minio后端配置 1.安装 MinIO&#xff08;Windows&#xff09; 官方下载地址&#xff1a;[Download High-Perform…