AtCoder Beginner Contest 308 A-F题解

ISA-95(S95)标准详解 ISA-95是制造业系统集成的“通用语言”,通过分层模型和信息流规范,打通企业计划层与设备控制层,成为实现数字化工厂的核心标准之一。其与ISA-88的协同应用,可进一步优化生产执行与资源管理的效率。标准,旨在解决企业商业系统(如ERP)与工业控制系统(如MES、SCADA)之间的集成问题。 阅读详情

比赛链接:https://atcoder.jp/contests/abc308

比赛时间:2023年7月1日 20:00-21:40

A题:New Scheme

标签:模拟

题意:给定 8 8 8个数的序列,询问这些数是否满足以下条件:

  1. 在 100 100 100到 675 675 675之间且能被 25 25 25整除
  2. 序列是单调非递减的

题解:按题意模拟判断就好了。

代码:

#include <bits/stdc++.h>
using namespace std;
 
int s[10];
 
int main() {
    for (int i = 1; i <= 8; i++) {
        cin >> s[i];
        if (s[i] < 100 || s[i] > 675 || s[i] % 25 != 0) {
            cout << "No";
            return 0;
        }
    }
    for (int i = 2; i <= 8; i++) {
        if (s[i] < s[i - 1]) {
            cout << "No";
            return 0;
        }
    }
    cout << "Yes";
    return 0;
}

B题:Default Price

标签: S T L 、 m a p STL、map STL、map、模拟

题意:给定 n n n个有颜色的盘子和 m m m种颜色分别对应的价值 p i p_i pi​, p 0 p_0 p0​表示盘子颜色如果不属于这 m m m种颜色,那对应的价值,求这 n n n个盘子最后的价值和为多少。

题解:可以先用 m a p map map去映射一下不同颜色对应的价值,然后去遍历这 n n n个盘子,如果映射发现对应的是 0 0 0价值,说明不属于这 m m m种颜色,那我们用 p 0 p_0 p0​去代替一下,最后累加下就好了。

代码:

#include <bits/stdc++.h>
using namespace std;
 
map<string, int > a;
string s[105], s2[105];
 
int main() {
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> s[i];
    }
    for (int i = 1; i <= m; i++) {
        cin >> s2[i];
    }
    int p, v;
    cin >> p;
    for (int i = 1; i <= m; i++) {
        cin >> v;
        a[s2[i]] = v;
    }
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        if (!a[s[i]]) {
            ans += p;
        } else {
            ans += a[s[i]];
        }
    }
    cout << ans << endl;
    return 0;
}

C题:Standings

标签:结构体排序、精度

题意:给定 n n n人扔硬币,第 i i i个人扔硬币,有正面朝上 A i A_i Ai​次和反面朝上 B i B_i Bi​次。定义成功率为 A i A i + B i A_i\over A_i+B_i Ai​+Bi​Ai​​。求按成功率从高到低,成功率相同根据编号从小到大排序。

题解:先把每个人的编号 i d id id按输入顺序设置好,然后根据题目中成功率和编号的要求排序就好了。这道题有个坑点就是,直接用 d o u b l e double double除出来会有精度缺失,所以我们把除法运算转成乘法运算。如果有两个人 x x x和 y y y,那我们把不等式的分母乘到对面去得到 ( x . a + x . b ) ∗ y . a < ( y . a + y . b ) ∗ x . a (x.a + x.b) * y.a < (y.a + y.b) * x.a (x.a+x.b)∗y.a<(y.a+y.b)∗x.a。

代码:

#include <bits/stdc++.h>
using namespace std;
 
struct node {
    int id;
    long long a, b;
}p[2000005];
 
bool cmp(node x, node y) {
    if ((x.a + x.b) * y.a == (y.a + y.b) * x.a) return x.id < y.id;
    else return (x.a + x.b) * y.a < (y.a + y.b) * x.a;
}
 
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> p[i].a >> p[i].b;
        p[i].id = i;
    }
    sort(p + 1, p + 1 + n, cmp);
    for (int i = 1; i <= n; i++) {
        cout << p[i].id << " ";
    }
    return 0;
}

D题:Snuke Maze

标签:深度优先搜索

题意:给定一个二维的字符矩阵地图,询问能否从左上角 ( 1 , 1 ) (1,1) (1,1)位置走到右下角 ( n , m ) (n,m) (n,m)位置,要求按照字符串(snuke): s → n → u → k → e → s → n →…这样的顺序走。

题解:经典的 d f s dfs dfs问题,按照题目要求从起点深搜下去就好了。深搜问题主要从当前状态往下一个状态走的时候需要考虑几个问题:

  1. 题目限制(该题就是 snuke 的顺序)。
  2. 地图边界。
  3. 该点是否已经走过(避免套娃)。

代码:

#include <bits/stdc++.h>
using namespace std;
 
string s[505];
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
int n, m, f = 0;
bool vis[505][505];
map<char, int> g;
 
void dfs(int x, int y, int id) {
    if (f || (x == n - 1 && y == m - 1)) {
        f = 1;
        return ;
    }
 
    for (int i = 0; i < 4; i++) {
        int nx = x + dx[i];
        int ny = y + dy[i];
        if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
        if (vis[nx][ny]) continue;
 
        if ((g[s[nx][ny]] == id + 1) || (id == 5 && g[s[nx][ny]] == 1)) {
            vis[nx][ny] = 1;
            dfs(nx, ny, g[s[nx][ny]]);
        }
 
    }
}
 
int main() {
    g['s'] = 1; g['n'] = 2; g['u'] = 3;
    g['k'] = 4; g['e'] = 5;
    cin >> n >> m;
    for (int i = 0; i < n; i++) cin >> s[i];
    vis[0][0] = 1;
    dfs(0, 0, g[s[0][0]]);
    if (f) cout << "Yes";
    else cout << "No";
    return 0;
}

E题:MEX

标签:动态规划、前缀维护、MEX

题意:给定一个长度为 n n n的序列 A 1 , A 2 , A 3 , . . . A n A_1,A_2,A_3,...A_n A1​,A2​,A3​,...An​, A i A_i Ai​的范围在 0 、 1 、 2 0、1、2 0、1、2。再给定相同长度的字符串 B B B(只含 M 、 E 、 X M、E、X M、E、X三种字符)。给定规则 M E X MEX MEX:指除去本身以外其他非负整数的集合中的最小值。目前要求 ( B i , B j , B k ) (B_i,B_j,B_k) (Bi​,Bj​,Bk​)刚好是 M 、 E 、 X M、E、X M、E、X,求所有对应的 M E X ( A i , A j , A k ) MEX(A_i,A_j,A_k) MEX(Ai​,Aj​,Ak​)之和为多少。

题解:维护一个前缀 M M M出现 0 、 1 、 2 0、1、2 0、1、2的数量,维护一个后缀 X X X出现 0 、 1 、 2 0、1、2 0、1、2的数量,然后去枚举 E E E,到每一个 E E E的时候,看看对应当前的 A i A_i Ai​为多少,然后考虑在这之前对应的 M M M是 0 、 1 、 2 0、1、2 0、1、2的数量,和在这之后 X X X是 0 、 1 、 2 0、1、2 0、1、2的数量。然后枚举这 9 9 9种情况,每种情况贡献的值为:前缀 M M M的数量 ∗ * ∗后缀 X X X的数量 ∗ * ∗ M E X ( a [ i ] , j , k ) MEX(a[i], j, k) MEX(a[i],j,k)。 j , k j,k j,k为枚举 0 、 1 、 2 0、1、2 0、1、2的情况。

代码:

#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
const ll N = 2e5 + 10;
ll n, a[N], m[N][10], x[N][10], ans = 0;
char b[N];
 
int cal(int x, int y, int z) {
    for (int i = 0; i <= 3; i++) {
        if (x != i && y != i && z != i) return i;
    }
    return 0;
}
 
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 1; i <= n; i++) cin >> b[i];
    for (int i = 1; i <= n; i++) {
        if (b[i] == 'M') {
            m[i][a[i]]++;
        }
        m[i][0] += m[i-1][0];
        m[i][1] += m[i-1][1];
        m[i][2] += m[i-1][2];
    }
    for (int i = n; i >= 1; i--) {
        if (b[i] == 'X') {
            x[i][a[i]]++;
        }
        x[i][0] += x[i+1][0];
        x[i][1] += x[i+1][1];
        x[i][2] += x[i+1][2];
    }
 
    for (int i = 1; i <= n; i++) {
        if (b[i] == 'E') {
            if (a[i] == 0) {
                for (int j = 0; j <= 2; j++) {
                    for (int k = 0; k <= 2; k++) {
                        ans += m[i][j] * x[i][k] * cal(0, j, k);
                    }
                }
            }
            else if (a[i] == 1) {
                for (int j = 0; j <= 2; j++) {
                    for (int k = 0; k <= 2; k++) {
                        ans += m[i][j] * x[i][k] * cal(1, j, k);
                    }
                }
            } else {
                for (int j = 0; j <= 2; j++) {
                    for (int k = 0; k <= 2; k++) {
                        ans += m[i][j] * x[i][k] * cal(2, j, k);
                    }
                }
            }
        }
    }
    cout << ans << endl;
    return 0;
}

F题:Vouchers

标签:贪心、堆优化

题意:给定 n n n个商品,每个商品价格为 p i p_i pi​元,有 m m m张优惠券,第 i i i优惠券至少要购买价格为 L i L_i Li​元的商品才能折扣 D i D_i Di​元,每张优惠券只能用一次,同一物品不能使用多张优惠券。求购买所有商品的最少总金额为多少。

题解:按照出售价格从小往大,因为有一个条件 L > D L>D L>D,所以不可能出现折扣大于商品的情况,用一个堆保存小于该商品售价所有 L L L对应的折扣 D D D,每次贪心取折扣最大的,取完就弹出堆,保证只取一次。

代码:

#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
ll n, m, p[200005], ans;
priority_queue<int> q;
pair<int, int> c[200005];
 
int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> p[i];
        ans += p[i];
    }
    for (int i = 1; i <= m; i++) cin >> c[i].first;
    for (int i = 1; i <= m; i++) cin >> c[i].second;
    sort(p + 1, p + 1 + n);
    sort(c + 1, c + 1 + m);
    for (int i = 1, pos = 1; i <= n; i++) {
        while (pos <= m && c[pos].first <= p[i]) {
            q.push(c[pos].second);
            pos++;
        }
        if (!q.empty()) {
            ans -= q.top(); q.pop();
        }
    }
    cout << ans << endl;
    return 0;
}
扩增子分析|溯源分析在R中的复现:跟着Nature系列文章利用FEAST溯源分析包追溯微生物群落的起源 溯源分析由Liat Shenhav等人在2019年发表在Nature Methods杂志,他们开创的一种分析微生物群落组成结构的方法,通过量化不同微生物样本(来源)在目标微生物群落(汇)中的比例或分数识别微生物群落的潜在来源。该方法自发表以来受到微生物学界广泛关注,该论文截止2024年10月9日已经被引289次,是领域内高被引论文,该方法已经成为Nature,cell系列文章高度关注的方法。 阅读详情

相关推荐

ESP32实战:破解校园网WPA2-Enterprise认证的完整指南

本文详细介绍了如何使用ESP32开发板破解校园网WPA2-Enterprise认证的完整指南。通过硬件准备、环境搭建、核心代码实现及常见问题排查,帮助开发者解决企业级WiFi连接难题,特别适用于校园网环境下的物联网设备开发。

weixin_29194817的博客 453

[abc周赛复盘] AtCoder Beginner Contest 308 20230701

T1 模拟T2 单源最短路dijikstraT3 多源最短路floyd。

liuliangcan的博客 651

LT8711/LT8712 Type-C转HDMI设计方案|替代LT8711/LT8712芯片|GSV2201可完全替代兼容LT8711/LT8712

LT8711UX是一款高性能C/DP1.2型至HDMI2.0转换器,用于将USB Type-C源或DP1.2源连接到HDMI2.0接收器。该LT8711UX集成了一个DP1.2兼容的接收器,和一个HDMI2.0兼容的发射器。此外,还包括两个CC控制器,用于CC通信,以实现DP Alt模式和功率传输功能,一个用于上游Type-C端口和另一个用于下游端口。

weixin_63518914的博客 1639

AtCoder Regular Contest 080 D - Grid Coloring

地址:http://arc080.contest.atcoder.jp/tasks/arc080_b 题目: D - Grid Coloring Time limit: 2sec /Memory limit: 256MB Score :400points Problem Statement We have a grid withHrows andWcolu...

weixin_30646505的博客 211

“风色幻想XX:交错轨迹游戏卡顿:从解决d3dx9_xx.dll缺失开始——风色幻想XX优化指南

《风色幻想XX:交错轨迹》作为一款深受玩家喜爱的角色扮演游戏,以其丰富的剧情、独特的角色设定和精美的画面赢得了广泛的赞誉。然而,在游戏过程中,部分玩家可能会遇到游戏卡顿的问题,这不仅影响了游戏体验,还可能让玩家错失精彩的剧情和战斗瞬间。在众多导致游戏卡顿的因素中,d3dx9_xx.dll文件的缺失往往是一个不容忽视的原因。

czl922的博客 1255

AUTOSAR BswM配置实战:手把手教你用Vector Davinci Configurator搭建第一个模式管理规则

本文详细介绍了如何使用Vector Davinci Configurator工具配置AUTOSAR BswM模块,实现车身控制ECU的模式管理规则。通过实战案例,从环境准备、核心概念梳理到具体配置步骤,包括ModeRequestPort、ModeCondition、Logical Expression和Rules的构建,帮助工程师快速掌握BswM配置技巧,提升汽车电子软件开发效率。

weixin_28678831的博客 351

AtCoder Beginner Contest 308

令flag=1,如果在1到8个数中有数不符合3个条件中的一个使flag=0。再最后判断flag是否为1,为1输出Yes,否则输出No。高桥吃了n盘寿司,不同颜色的盘子Ci对应不同的价格,颜色Di对应的价格为Pi,i>1,如果颜色Ci未在Di中出现则价格为P0。从D1开始找直到Dm,或者找到为止,如果找到了总价加上Pi,如果没找到加上P0。满足输出Yes,不满足输出No。求8个整数组成的序列是否满足。2.在100到675之间。

jiaking_two的博客 447

从零开始跑通3DGS教程:(四)修改(缩放、空间变换)colmap生成的sfm结果

通过colmap进行的sfm的普通方式会丢失场景的物理尺度信息,并且并不在符合一般认知的坐标系下,本文将读取colmap生成的点云和相机pose,将其进行空间变换和缩放之后,重新保存,新保存的结果仍然可以被colmap读取以及进行后续的稠密重建以及3dgs等工作

诺有缸的高飞鸟的博客 1424

Mex Game【Atcoder】

而最终决定胜负的也就是mex(X)这一个元素,我们此时已不用考虑它定义中的最大最小,因为只剩下了一个元素,就是mex(X)。那么这个博弈的胜方便很明了了,若是字符串中A比B多,则Alice胜,B比A多则Bob胜,一样多则Alice胜,因为她先手。如果t是奇数,则Alice将选择一个非负整数x,并将X替换为X∪{x};如果t是偶数,Bob将选择一个非负整数x,并将X替换为X∪{x}。对于由非负整数组成的有限集合X,mex(X)是使得x∉X的最小非负整数x。你得到一个长度为 N+1N+1 的字符串,由。

RaedQm的博客 570

203.华为组网实例:VLAN间互通DHCP中继实验

SW核心交换机上配置DHCP中继。

迷逝 8430

CATIA文件的网页预览方案

CATIA是工业设计中广泛使用的专业软件,产出`.CATPart`或 `.CATProduct`等文件类型,当资产数量较大时,我们希望快捷预览这些文件,就有了`CATPart`文件网页预览的需求 但我们知道,网页上无法直接渲染`CATPart`这种复杂的文件, CATIA生成的文件(如 `CATPart` 和 `CATProduct`)不仅包含三维几何信息(例如点、线和曲面),还涵盖了丰富的元数据与专业设计特征。 那有没有办法,能实现CATIA文件在网页上的便捷预览?

weixin_44211633的博客 1445

AtCoder - abc194_e Mex Min

题目:AtCoder - abc194_e 题意:我们要找到长度为 n 数组 A 的所有的长度为 m 的切片 si 最小的 mex(si) 值。 思路: 可以发现,如果记录切片中每一个数字出现的次数,找到第一个出现次数为0的就是答案。 但是我们不能每次切片改变都去遍历一次,这样会TLE,因此可以用一个数组M维护区间(i,i+m)数字出现的次数。 切片的末尾指向了 Ai 的时候,那么对应的 Ma[i]M_{a[i]}Ma[i]​就会加1;而Ma[i−m]M_{a[i-m]}Ma[i−m]​ 就会减1。 接下

buzzaz的博客 627

ConvNeXt 系列改进:二次创新 ConvNeXt:结合 RepVGG 结构重参数化,训练多分支、推理单路

2026年的视觉模型赛道呈现出一种有趣的“返璞归真”趋势——在Transformer狂飙数年之后,卷积网络正以全新的姿态回归。这其中,ConvNeXt无疑是纯卷积阵营中最耀眼的明星。从2022年Meta AI首次提出至今,ConvNeXt系列已经走过了近四年的演进之路,衍生出ConvNeXt V2、E-ConvNeXt等多个增强版本。ConvNeXt的7×7深度卷积带来了不错的感受野,却也埋下了推理效率的隐患。

ZXSXJ的博客 232

AtCoder Beginner Contest 308 题解 A-F

AtCoder Beginner Contest 308 题解 A-F,模拟,精度问题,宽度优先搜索bfs,前后缀分解,技巧题

xiaoqian7758258的博客 248

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

AtCoder Beginner Contest 429

AtCoder Beginner Contest 429相关资料汇总:包含多个赛题讲解视频(B站)、优快云技术博客题解(涵盖A-F题)、知乎专栏解析等资源。主要内容涉及竞赛题目解析、代码实现及算法思路,包括C题Odd One Subsequence、D-F题详细解答等。相关资源还延伸至AtCoder其他场次比赛(如ABC301-310)的题解内容,为参赛者提供全面的学习参考。所有资料均标注了来源链接,方便读者查阅具体内容。

青少年趣味编程 382

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

AtCoder Beginner Contest 308 F题 Vouchers

AtCoder Beginner Contest 308 F题 Vouchers

超哥聊信奥 826

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

AtCoder Beginner Contest 308 题解(C~F)

考虑贪心的策略,即是先选价值较大的还是选价值较小的,容易发现从价值较小的物品选起是正确的,因为后面价值较大的物品不会影响前面的物品,因为优惠劵有限制。因此我们只需对物品按价值从小到大排序,然后对优惠券也排个序,满足条件的优惠券都插入到优先队列中去,然后每次取堆顶的优惠券来计算答案即可。,我们考虑中间字符“E” ,对于每个字符“E” ,我们只要统计它前面有几个“M”,以及它后面有几个“X”,然后计算一下贡献即可。题意:给定字符串,只包括"M",“E”,“X”,其值为。的物品才能使用,然后优惠。

weixin_63785821的博客 408

AtCoder Beginner Contest 301-350

本文汇总了AtCoder Beginner Contest 301至350的竞赛题解链接,以及Codeforces 881-1076轮次的相关内容。同时整理了信息学竞赛(NOI/CSP)的备考资源,包括数学学习资料、省选题单、集训建议等,涵盖编程竞赛从入门到提高的全方位学习路径,适合算法竞赛选手参考使用。

青少年趣味编程 32

AtCoder Beginner Contest 308 D题 Snuke Maze

AtCoder Beginner Contest 308 D题 Snuke Maze

超哥聊信奥 545

AtCoder Beginner Contest 445

本文汇总了AtCoder Beginner Contest 445(ABC445)的多篇题解资源,包括B站视频讲解(场切A-F、赛时AK等)、知乎专栏和优快云博客的详细题解。内容涵盖比赛A-F题的解题思路和代码实现,为参赛者提供全面的学习参考。同时附带其他ABC系列比赛(301-310)的题解链接,方便系统学习。资源形式多样,包含视频解说和文字分析,适合不同学习偏好的编程竞赛爱好者。

青少年趣味编程 380

【每日一题】——C - Standings(AtCoder Beginner Contest 308 )

C - Standings(AtCoder Beginner Contest 308 )

PH_modest的博客 470

AtCoder 330. E Mex and Update (关于Mex的总结 + TreeSet和优先队列的性能问题

ATCoder 330 E

weixin_73227648的博客 487

Atcoder Beginner Contest 308

会卡精度,double就不能过全部数据,改成long double就AC了。对比之后发现我的代码少了标记已经走过的点。

m0_74087709的博客 384

(题解包会篇)AtCoder-abc128-b Guidebook

​ Hello大家我又来分享题目咯,本题是来自AtCoder的一道题,具体题目在链接:B - Guidebook ​

2301_80568946的博客 554

AtCoder Beginner Contest 308(A-E)

【代码】AtCoder Beginner Contest 308(A-E)

qq_64177153的博客 192

零点工作室暑假集训(AtCoder--ABC308)

题意:有C[N]个寿司和D[M]个盘子,价格从P[0]~~P[M],分别由颜色,找出是否有寿司和盘子颜色一样,一样的话价格对应D[i]--P[i];不一样的话价格都为P[0].求出这些寿司的价格。思路:一开始想到用暴力去做,还以为看错题目wa了三次,导致很晚才写完B,正常暴力解法超过n,m超过1e5就过不了了,还可以用map做时间复杂度O(n)。暂时还没写出来,等写出来再补上。

weixin_73807663的博客 528
上一篇: AtCoder Beginner Contest 318 A-E题解
下一篇: AtCoder Beginner Contest 310 A-E题解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值