atcoder abc 369

news2024/12/24 21:27:31

A 369

问题:

思路:暴力枚举

代码:

#include <bits/stdc++.h>

using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    int cnt = 0;
    for(int i = -1000; i <= 1000; i ++ ) {
        vector<int> aa;
        aa.push_back(a);
        aa.push_back(b);
        aa.push_back(i);
        sort(aa.begin(), aa.end());
        if(aa[1] - aa[0] == aa[2] - aa[1]) cnt ++;
    }
    cout << cnt << endl;
    return 0;
}

B Piano 3

问题:

思路:贪心的将手的初始位置设为第一个键位所在的位置

代码:

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> a(n + 1);
    vector<char> s(n + 1);
    for(int i = 1; i <= n; i ++ ) cin >> a[i] >> s[i];
    int cl = -1, cr = -1;
    int lastl = 0, lastr = 0;
    for(int i = 1; i <= n; i ++ ) {
        if(s[i] == 'L') {
            if(cl == -1) {
                cl = 0;
                lastl = a[i];
            } else {
                cl += abs(a[i] - lastl);
                lastl = a[i];
            }
        } else {
            if(cr == -1) {
                cr = 0;
                lastr = a[i];
            } else {
                cr += abs(a[i] - lastr);
                lastr = a[i];
            }
        }
    }

    cout << max(0, cl) + max(0, cr);
    return 0;
}

C Count Arithmetic Subarrays

问题:

思路:

开一个interval数组储存所有满足题意的子段

代码:

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<long long> a(n + 2);
    a[n + 1] = 1e18;
    for(int i = 1; i <= n; i ++ ) cin >> a[i];
    long long ans = 0;
    int last = a[2] - a[1];
    int pos = 1;
    vector<pair<int, int>> interval;
    for(int i = 2; i <= n + 1; i ++ ) {
        if(a[i] - a[i - 1] != last) {
            last = a[i] - a[i - 1];
            interval.push_back({pos, i - 1});
            pos = i - 1;
        }
    }

    for(auto t: interval) {
        //cout << t.first << " " << t.second <<endl;
        int num = t.second - t.first + 1;
        ans += (long long)num * (num + 1) / 2;
    }
    cout << ans - interval.size() + 1;
    return 0;
}

D Bonus EXP

问题:

思路:动态规划dp[i][j][k]表示第i个位置的怪物我是选择击杀还是不击杀以及这是我击杀的第几个(奇数个,偶数个)怪物

问题:在状态定义时一定要清楚定义,例如本题调试中由于 击杀第几个怪物的定义不明确,导致代码出错 

以及在最开始dp[i][1][0]可能不会出现,因此要判断dp[i][1][0]之前的状态是否出现过

代码:

#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 10;

long long dp[N][3][3];//表示第i个我是选择击杀还是不击杀,以及这是我击杀的第几个怪物

int main() {
    int n;
    cin >> n;
    vector<long long> a(n + 1);
    bool flag = false;
    for(int i = 1; i <= n; i ++ ) cin >> a[i];
    for(int i = 1; i <= n; i ++ ) {
        dp[i][0][1] = max(dp[i - 1][1][1], dp[i - 1][0][1]);
        dp[i][0][0] = max(dp[i - 1][1][0], dp[i - 1][0][0]);
        dp[i][1][1] = max(dp[i - 1][1][0] + a[i], dp[i - 1][0][0] + a[i]);
        //dp[i][1][0] = max(dp[i - 1][1][1] + a[i] * 2, dp[i - 1][0][0] + a[i] * 2)
        if(dp[i - 1][1][1] != 0) dp[i][1][0] = max(dp[i][1][0], dp[i - 1][1][1] + a[i] * 2);
        if(dp[i - 1][0][1] != 0) dp[i][1][0] = max(dp[i][1][0], dp[i - 1][0][1] + a[i] * 2);
    }

    long long ans = 0;
    //n = 1;
    ans = max(dp[n][0][1], dp[n][0][0]);
    ans = max(ans, dp[n][1][0]);
    ans = max(ans, dp[n][1][1]);
    cout << ans << endl;
    //cout << dp[1][1][1] << endl;
    //cout << dp[2][1][0];
    //cout << dp[n][1][0];
    return 0;
}

E Sightseeing Tour

问题:

思路:floyd + 排列组合

黑色为必须经过的桥,不难想到,求最短路就是让红色的线最短,因此我们要准确的知道各个点之间的最短路。同时观察到n的范围很小,在o(n ^ 3)内,考虑floyd解决这个问题。并且不同的连点方式也会对答案造成影响,又注意到k,也就是固定的桥范围不超过5,并且q询问也很小,因此直接枚举所有的连点情况,先枚举桥的顺序,可以用next_permutation枚举,再用dfs枚举桥与桥之间的连接方式

代码:
 

#include <bits/stdc++.h>

using namespace std;

const int N = 410;
const int M = 2e5 + 10;

int g[N][N];
pair<int, int> b[M];
int len[M];

int main() {
    memset(g, 0x3f, sizeof g);
    int n, m;
    cin >> n >> m;

    for(int i = 1; i <= m; i ++ ) {
        int u, v, t;
        cin >> u >> v >> t;
        g[u][v] = min(g[u][v], t);
        g[v][u] = min(g[v][u], t);
        b[i] = {u, v};
        len[i] = t;
    }
    
    for(int i = 1; i <= n; i ++ ) g[i][i] = 0;
    for(int k = 1; k <= n; k ++ ) {
        for(int i = 1; i <= n; i ++ ) {
            for(int j = 1; j <= n; j ++ ) {
                g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
            }
        }
    }//floyd 400^3

    int q;
    cin >> q;
    while(q -- ) {
        int k;
        cin >> k;
        vector<int> a(k + 1);
        long long ans = 1e18;
        long long tmp = 0;
        for(int i = 1; i <= k; i ++ ) {
            cin >> a[i];
            tmp += len[a[i]];
        }

        vector<int> alls(2 * (k + 1) + 5);
        alls[1] = 1;
        alls[2 * (k + 1)] = n; 
        function<void(int)> dfs = [&](int u) {
            if(u == k + 1) {
                long long res = tmp;
                for(int i = 2; i <= 2 * (k + 1); i ++ ) {
                    res += g[alls[i]][alls[i - 1]];
                }
                ans = min(ans, res);
                return;
            }
                for(int j = 1; j <= 2; j ++ ) {
                    if(j == 1) {
                        alls[2 * u] = b[u].first;
                        alls[2 * u + 1] = b[u].second;
                    } else {
                        alls[2 * u] = b[u].second;
                        alls[2 * u + 1] = b[u].first;
                    }
                    dfs(u + 1);
                }
        };
        do {
            dfs(1);
        } while(next_permutation(a.begin() + 1, a.end()));
        cout << ans << endl;
    }
    return 0;
}

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

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

相关文章

网络编程套接字(含Java示例)

文章目录 Socket套接字概念分类流式套接字&#xff1a;使用传输层TCP协议数据报套接字&#xff1a;使用传输层UDP协议Unix域套接字 TCP vs UDP有连接 vs 无连接可靠传输 vs 不可靠传输面向字节流 vs 面向数据报全双工 vs 半双工 UDP数据报套接字编程DatagramSocketDatagramPack…

AI安全前沿:模型攻击与防御策略

引言 随着chatGPT的横空出世&#xff0c;通用人工智能的时代正式开启。人工智能极大地影响了人类的生活方式和生产方式&#xff0c;例如以ChatGPT为代表的各类大模型&#xff0c;能够理解和生成人类语言&#xff0c;并以对话的方式同人类进行互动&#xff0c;能够执行撰写文本…

央视报道:国产时序数据库 IoTDB 刷新世界性能纪录!

IoTDB&#xff08;Internet of Things Database&#xff09;是一个专为物联网&#xff08;IoT&#xff09;场景设计的时间序列数据库管理系统&#xff08;TSDB&#xff09;。随着物联网技术的发展&#xff0c;大量的设备连接到互联网上&#xff0c;产生了海量的时间序列数据。这…

各位天命人!国自然评审意见出来了,那如何判断是否上会?

公众号&#xff1a;生信漫谈&#xff0c;获取最新科研信息&#xff01; 各位天命人&#xff01;国自然评审意见出来了&#xff0c;那如何判断是否上会&#xff1f;https://mp.weixin.qq.com/s?__bizMzkwNjQyNTUwMw&mid2247487055&idx1&sn1dc8b66e10323d37e477e88…

新版本 Redline 使用 Lua 字节码逃避检测

近日&#xff0c;研究人员观察到 Redline Stealer 木马的新变种&#xff0c;开始利用 Lua 字节码逃避检测。 遥测分布 根据遥测数据&#xff0c;Redline Stealer 木马已经日渐流行&#xff0c;覆盖北美洲、南美洲、欧洲和亚洲甚至大洋洲。 感染链 感染链 微软官方账户的 vcp…

基于Java的汽车推荐购买系统的设计与实现(论文+源码)_kaic

摘要 随着经济水平的不断提高&#xff0c;汽车销售行业存在激烈竞争&#xff0c;人们对于生活中汽车的需求也越来越多&#xff0c;而目前的汽车推荐购买管理由于存在管理不规范性等缺点&#xff0c;严重制约了汽车推荐购买和汽车公司的发展&#xff0c;因此需要设计一个汽车推荐…

一加8T安装 Kali NetHunter 高阶教程 KB2000刷机 param预载失败 高通9008驱动签名 小米刻晴主题

前言 本文包含一加8T手机刷入kaili nethunter 的详细版教程、资源、刷机知识思维导图、param预载失败问题解决、高通刷机驱动故障问题解决、小米刻晴主题等资源的分享 本机环境 手机&#xff1a;OnePlus 8T &#xff08;型号KB2000&#xff09; 系统&#xff1a;Android 13 …

公司招聘中,多个面试官对候选人评价不一致怎么办?

面试过程中&#xff0c;极易出现面试官评价标准不一的情况&#xff0c;为了有效解决这一问题&#xff0c;企业可以建立一套标准化的面试评分体系&#xff0c;在该体系中&#xff0c;应该详细包括统一的评分标准和评分细则&#xff0c;内容覆盖求职者的专业技能、沟通能力、团队…

【Threejs进阶教程-着色器篇】6. 2D SDF(三) 移动图形,限制图形,绘制多个图形

2D SDF 移动与合并图形 前五篇地址&#xff0c;建议按顺序学习本篇使用到的初始代码减小扩散范围clamp函数修改maxDistance来修改扩散范围 移动扩散中心添加第二个扩散点降低点的同步率调整参数来优化效果添加更多扩散点 完整源码如有不明白的&#xff0c;可以在下方留言或者加…

01:【stm32HAL】对GPIO的操作

对GPIO的操作 1、LED闪烁2、按键控制LED3、芯片调试接口被锁死导致无法下载程序 1、LED闪烁 使用的是STM32CubeMXKeilv5进行HAL库的开发。 开发的步骤&#xff1a; 第一步&#xff1a;新建工程 第二步&#xff1a;选择芯片 第三步&#xff1a;如下图哈哈 第四步&#xff1a;…

图像识别智能垃圾桶项目开发--语音命令识别垃圾

一、项目思维导图 二、语音模块配置信息 三、项目程序 main.c garbage.c garbage.h uartTool.c //串口发送数据 uartTool.h

IPv6配置实验(OSPFv3)

1.搭建拓扑图 2.配置接口IP地址

文件上传的学习

文件上传漏洞 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷&#xff0c;而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马&#xff0c;病毒&#xff0c;恶意脚本或者WebShell等。“文件上传”本身没有…

计算机毕业设计推荐-基于python的公司员工考勤管理系统

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的公司员工考勤管…

电池点焊机设计要点记录及个人分析

想要设计的由来 有些电路板或动力元件需要电池和镍片的连接&#xff0c;虽然临时使用焊锡焊接在了一起&#xff0c;但焊接过程中的热量和焊接后的厚度太大。最终想要设计一个用于点焊的板子 点焊的原理和操作上的误区 原理&#xff1a;两个点焊笔和镍片的接触点直径相比于导…

Local GAP - Financial Statement Version 【海外BS\PL报表】

业务场景&#xff1a; 基于海外IFRS等会计准则为客户定义一套BS\PL报表 BS - 从科目余额抓取 PL - 从利润中心报表抓取 会计报表版本的建立&#xff1a; 路径&#xff1a;IMG>财务会计&#xff08;新&#xff09;>总账会计核算&#xff08;新&#xff09;主数据>总…

【电子通识】失效分析中的电测试技术——电阻测试方法及注意事项

失效分析通常需要对测试数据进行仔细的分析&#xff0c;因此&#xff0c;测试设备的数据准确性和可靠性是至关重要的基本要求。为了确保数据的准确性&#xff0c;失效分析所使用的测试设备需要进行定期计量。 测试设备选择 在测试电阻、电容和电感的设备中&#xff0c;最常见的…

watchdog: BUG: soft lockup

故障现象&#xff1a; 故障原因&#xff1a; 不知道。 解决办法&#xff1a; 由12个改成2个&#xff1b;然后重新开机虚拟机&#xff0c; 临时解决了。

使用Golang的协程竟然变慢了|100万个协程的归并排序耗时分析

前言 这篇文章将用三个版本的归并排序&#xff0c;为大家分析使用协程排序的时间开销&#xff08;被排序的切片长度由128到1000w&#xff09; 本期demo地址&#xff1a;https://github.com/BaiZe1998/go-learning 往期视频讲解 &#x1f4fa;&#xff1a;B站&#xff1a;白泽…

145. 利用 Redis Bitmap实践: 用户签到统计

文章目录 一、Redis Bitmap简介二、Bitmap 的主要应用三、Go使用Redis实现签到统计用户签到查询用户签到状态统计今年累计签到天数统计当月的签到情况 总结 在现代应用程序中&#xff0c;用户签到是一个常见的功能。我们通常使用 MySQL 数据库来存储用户的签到记录。然而&#…