当前位置:首页 > 工具 > 正文内容

AtCoder Beginner Contest 449 解析

访客 工具 2026年7月20日 3

A - π

通过样例可确定π取值为3.1415926535。

查看代码

#include 
using namespace std;

int main() {
    double diameter;
    cin >> diameter;
    diameter /= 2;
    printf("%.8lf", diameter * diameter * 3.1415926535);
    return 0;
}

B - 巧克力拆分

记录当前行数n和列数m。操作1减少x行(n-=x),操作2减少x列(m-=x),计算对应格子数。

查看代码

#include 
using namespace std;

int main() {
    int rows, cols, queries;
    cin >> rows >> cols >> queries;
    while (queries--) {
        int op, amount;
        cin >> op >> amount;
        int result = 0;
        if (op == 1) {
            result = amount * cols;
            rows -= amount;
        } else {
            result = amount * rows;
            cols -= amount;
        }
        cout << result << '\n';
    }
    return 0;
}

C - 舒适距离

固定位置j,统计区间[j-r,j-l]内相同字符数量。维护滑动窗口计数器,动态更新左右边界。

查看代码

#include 
using namespace std;

int main() {
    int n, left, right;
    char s[5000005];
    int count[300];
    cin >> n >> left >> right;
    for (int i = 1; i <= n; ++i) cin >> s[i];
    
    int total = 0;
    for (int i = 1; i <= n; ++i) {
        if (i - left >= 1) count[s[i-left]-'a']++;
        if (i - right - 1 >= 1) count[s[i-right-1]-'a']--;
        total += count[s[i]-'a'];
    }
    cout << total;
    return 0;
}

D - 目标构建

通过坐标系对称性处理四个象限。计算第一象限符合条件的点数,再乘以对应象限数量。

查看代码

#include 
using namespace std;

int getEven(int x, int y) { /* ... */ }
int getRange(int x, int y) { /* ... */ }

int calculate(int l, int r, int d, int u) { /* ... */ }

int main() {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    
    int signA = (a > 0) ? 1 : -1;
    int signB = (b > 0) ? 1 : -1;
    int signC = (c > 0) ? 1 : -1;
    int signD = (d > 0) ? 1 : -1;
    
    a = abs(a); b = abs(b); swap(a,b);
    c = abs(c); d = abs(d); swap(c,d);
    
    int result = 0;
    
    if (signA == signB) {
        if (signC == signD) {
            result = calculate(a,b,c,d);
        } else {
            result = calculate(a,b,0,c) + calculate(a,b,1,d);
        }
    } else {
        if (signC == signD) {
            result = calculate(0,a,c,d) + calculate(1,b,c,d);
        } else {
            result = calculate(0,a,0,c) + calculate(0,a,1,d)
                   + calculate(1,b,0,c) + calculate(1,b,1,d);
        }
    }
    
    cout << result;
    return 0;
}

E - 数组增量

采用桶排序思想,按高度和编号排序后使用树状数组维护空位编号。

查看代码

#include 
using namespace std;

int main() {
    int n, m;
    int values[500005];
    int frequency[500005];
    int maxFrequency = 0;
    
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        cin >> values[i];
        frequency[values[i]]++;
        maxFrequency = max(maxFrequency, frequency[values[i]]);
    }
    
    // 后续处理逻辑...
    return 0;
}

F - 网格裁剪

使用扫描线算法求矩形面积并。将原问题转化为点覆盖问题进行处理。

查看代码

#include 
using namespace std;

struct Event { /* ... */ };

int main() {
    int maxX, maxY, n, m, _n_;
    cin >> maxX >> maxY >> n >> m >> _n_;
    
    // 处理输入并建立事件列表
    vector<Event> events;
    for (int i = 0; i < _n_; ++i) {
        int r, c;
        cin >> r >> c;
        // 添加矩形事件
    }
    
    // 坐标离散化处理
    vector<int> xCoords, yCoords;
    // 构建线段树结构
    
    // 扫描线处理
    int total = (maxX-1)*(maxY-1);
    for (int i = 1; i < xCoords.size()-1; ++i) {
        int width = xCoords[i+1] - xCoords[i];
        // 更新线段树状态
        total -= tree.query() * width;
    }
    
    cout << total;
    return 0;
}

相关文章

Trojan服务器搭建与配置

一、整体架构(先对齐认知)Clash Meta (PC / iOS / Android)        ↓ TLS   Trojan Server (443)        ↓     InternetTrojan 的核心是: TLS + HTTPS 流量伪装 看起来像正常网站 非常适合...

Tailscale 的详细用法

Tailscale 是一种基于 WireGuard 协议 的 零配置 VPN(虚拟私有网络)服务,让设备之间能够 安全、加密地直接连接,就像它们在同一个本地网络一样。它的核心特点是 简单、安全、跨平台。Tailscale 非常适合 没有公网 IP、两台电脑不在同一局域网 的场景。 简单来说,Tailscale 是什么?Tailscale 是一款让你的各种设备(电脑、服务器、手机...

Clash Tun 模式 导致 爱快(iKuai SD-Wan)内网域名无法访问

一、Clash  DNS 配置dns:  enable: true  listen: 0.0.0.0:53  ipv6: true  enhanced-mode: redir-host  nameserver:    - 223.5.5.5    - 223.6.6.6iKuai 内网域名 ...

深入解析Node.js运行环境与异步I/O架构

深入解析Node.js运行环境与异步I/O架构

核心定义与价值Node.js本质上是一个JavaScript运行环境,而非编程语言或应用框架。它赋予了JavaScript脱离浏览器在服务端、命令行工具及网络应用中执行的能力。其核心意义在于:用单一语言打通前后端开发壁垒。基于事件驱动与非阻塞I/O的架构特性,Node.js在处理API网关、实时通信及微服务等I/O密集型场景时表现卓越,已成为现代后端工程的主流选择。浏览器沙箱限制1995年Java...

ADO.NET SQL参数化查询的最佳实践

在 ADO.NET 中执行 SQL 查询时,参数化查询是一种关键的安全措施和性能优化手段。它通过将 SQL 命令和用户提供的数据分开处理,有效防止了 SQL 注入攻击,并有助于数据库缓存执行计划。下面总结了几种常用的参数化查询方式。 1. 使用 SqlParameter 对象(推荐) 这是最推荐的参数化查询方式。通过显式创建 SqlParameter 对象,您可以精确控制参数的类...

基于ELK的日志集中化分析系统搭建

构建统一日志管理平台的必要性 在分布式架构中,各服务节点独立运行,日志分散存储于不同主机。传统通过命令行工具如grep、awk逐个检索日志的方式,在数据量庞大时效率极低,难以实现快速定位问题。为提升运维效率,需建立集中式日志处理体系,具备日志采集、传输、存储、分析与告警能力。 ELK技术栈核心组件解析 Elasticsearch:分布式搜索引擎,支持全文检索、实时数据分析和高可用集群部署,...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。