AtCoder Beginner Contest 357 A~E(F更新中...)

news2024/11/26 4:29:51

A.Sanitize Hands(模拟)

题意

n n n个外星人排队对手消毒,其中第 i i i个外星人有 H i H_i Hi只手需要消毒,已知消毒液共能使用 M M M次,每次可以对一只手消毒,问:总共有多少个外星人的全部手都完成消毒了。

分析

本题并不是一个贪心的题目,而是直接对输入的数据从左往右进行操作,依次判断剩余的消毒液是否足够完成消毒,如果可以,就减去需要使用的量,否则,结束循环。

代码

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N = 3e5 + 5e2;
int a[N];

void solve() {
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        if (m >= a[i]) {
            m -= a[i];
            ans++;
        } else break;
    }
    cout << ans << endl;
}

int main() {
    solve();
    return 0;
}

B.Uppercase and Lowercase

题意

给出一个既包含大写字母,也包含小写字母的字符串(保证字符串长度为奇数),如果该字符串中大写字母较多,则将所有字母改为大写字母,否则,将所有字母改为小写字母。

分析

先统计大小写字母的数量,然后按题目要求操作即可。

代码

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N = 3e5 + 5e2;
int a[N];

void solve() {
    int u = 0, l = 0;
    string s;
    cin >> s;
    for (auto i : s) {
        if (i >= 'a') {
            l++;
        } else {
            u++;
        }
    }
    for (auto &i : s) {
        if (u > l && i >= 'a') {
            i -= 32;
        } else if (u < l && i <= 'Z') {
            i += 32;
        }
    }
    cout << s << endl;
}

int main() {
    solve();
    return 0;
}

C.Sierpinski carpet(打印图形)

题意

对于一个非负整数 k k k,我们定义 k k k等级的地毯需要满足以下要求:

  • 0 0 0等级的地毯是一个 1 × 1 1 \times 1 1×1的网格,且这个网格为黑色。

  • 对于 k > 0 k > 0 k>0的情况, k k k等级的地毯是一个 3 k × 3 k 3^{k} \times 3^{k} 3k×3k的网格,可以将这个网格分为 9 9 9 3 k − 1 × 3 k − 1 3^{k - 1} \times 3^{k - 1} 3k1×3k1部分。

    • 中心的部分全部都是空白的

    • 其余的8个部分均与 k − 1 k - 1 k1等级的地毯一致

给出一个正整数 n n n,请你输出 n n n等级的地毯

分析

先完成一个 0 0 0等级的地毯,然后按要求依次制作出 1 , 2 , … , n 1, 2, \ldots, n 1,2,,n等级的地毯,即依次将 i − 1 i - 1 i1等级的地毯作为左上角,然后在剩余的 7 7 7个部分复制一遍 i − 1 i - 1 i1等级的地毯。

经过 n n n次操作后,即得到了 n n n等级的地毯。

代码

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N = 3e5 + 5e2;
char c[1005][1005];

void color(int x, int y, int len) {
    for (int i = x; i < x + len; i++) {
        for (int j = y; j < y + len; j++) {
            c[i][j] = c[i - x][j - y];
        }
    }
}

void solve() {
    memset(c, '.', sizeof(c));
    c[0][0] = '#';
    int n;
    cin >> n;
    int len = 1;
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < 3; j++) {
            for (int k = 0; k < 3; k++) {
                if (k == j && j <= 1) continue;
                color(j * len, k * len, len);
            }
        }
        len *= 3;
    }
    for (int i = 0; i < len; i++) {
        for (int j = 0; j < len; j++) {
            cout << c[i][j];
        }
        cout << endl;
    }
}

int main() {
    solve();
    return 0;
}

D.88888888(数学)

题意

给出一个数字 N N N,定义 V N V_N VN为将 N N N个数字 N N N拼在一起获得的数字,请你求出 V N V_N VN m o d mod mod 998244353 998244353 998244353的结果。

分析

定义 K K K N N N的十进制数字数位,定义模数 998244353 998244353 998244353 P P P

那么有:

  • V N = N + N ⋅ 1 0 K + N ⋅ 1 0 2 K + … + 1 0 ( N − 1 ) K V_N = N + N \cdot 10^{K} + N \cdot 10^{2K} + \ldots + 10^{(N - 1)K} VN=N+N10K+N102K++10(N1)K

  • V N = N ( 1 + 1 0 K + 1 0 2 K + … + 1 0 ( N − 1 ) K ) V_N = N(1 + 10^{K} + 10^{2K} + \ldots + 10^{(N - 1)K}) VN=N(1+10K+102K++10(N1)K)

  • V N = N ( 1 0 N K − 1 ) 1 0 K − 1 V_N = \frac{N(10^{NK} - 1)}{10^{K} - 1} VN=10K1N(10NK1)

得到这个式子后,即可计算得到最后的答案,而算式中间会出现两个long long范围相乘的算式,可以使用__int128类型进行运算。

hint: 除法需要转化为乘法逆元

代码

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N = 3e5 + 5e2;
const ll mod = 998244353;

__int128 qpow(__int128 a, __int128 b) {
    __int128 res = 1;
    while (b) {
        if (b & 1) res = res * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return res;
}

int getLen(__int128 x) {
    int cnt = 0;
    while (x) {
        cnt++;
        x /= 10;
    }
    return cnt;
}

void solve() {
    ll num;
    cin >> num;
    __int128 n = num;
    __int128 ans = n * (qpow(10, getLen(n) * n) - 1) % mod * qpow(qpow(10, getLen(n)) - 1, mod - 2) % mod;
    ll res = ans;
    cout << res << endl;
}

int main() {
    solve();
    return 0;
}

E.Reachability in Functional Graph(拓扑排序)

题意

给出一个包含 N N N个点的有向图,点 i i i仅包含一条走向 a i a_i ai出边(存在 i = a i i = a_i i=ai,即该点不存在出边)。

定义 f ( i ) f(i) f(i)为从点 i i i出发可以到达的节点个数(包含节点自身),请你求出:

  • ∑ i = 1 n f ( i ) \sum\limits_{i = 1}^{n}f(i) i=1nf(i)

分析

由于每个点仅包含一条出边,那么如果图上成环,必然是这些点首尾相连形成的,且环中不可能存在出边能走向不在环中的点。

那么只要是能到达环的点,均能到达环中的任意点,令 p p p为能到达环中的点的数量, q q q为环中包含的点的数量,那么环中的点产生的贡献即为 p × q p \times q p×q

对于 p p p,可以使用并查集将所有存在边的点连接到同一个集合中,每个集合中的节点数量即为当前的 p p p

对于不在环上的点,产生的贡献即为能到达该点的节点个数,可以使用拓扑排序进行状态继承,每次当节点入度为0时记录该节点的贡献。

对于 q q q,在拓扑排序中有节点入队时,就可以知道该点必然不在环中,可以在集合中使用 c n t cnt cnt数组记录该集合中不在环里的节点数量,使用 p p p减去该集合对应的 c n t cnt cnt即可得到 q q q

那么最后的答案即为环上点的贡献加上不在环上的点的贡献。

代码

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N = 3e5 + 5e2;

int n, a[N], d[N], p[N], f[N], sum[N], cnt[N];
vector<int> G[N];
ll ans;
int find(int x) {
    return f[x] == x ? x : f[x] = find(f[x]);
}

void merge(int a, int b) {
    int fa = find(a),
        fb = find(b);
    if (fa != fb) {
        f[fa] = fb;
        sum[fb] += sum[fa];
    }
}
queue<int> Q;
void solve() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        f[i] = i;
        sum[i] = 1;
        p[i] = 1;
    }
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        G[i].push_back(a[i]);
        d[a[i]]++;
        merge(i, a[i]);
    }
    for (int i = 1; i <= n; i++) {
        if (d[i] == 0) {
            Q.push(i);
            ans += 1;
            cnt[find(i)]++;
        }
    }
    while (!Q.empty()) {
        auto u = Q.front();
        Q.pop();
        for (auto v : G[u]) {
            d[v]--;
            p[v] += p[u];
            if (d[v] == 0) {
                cnt[find(v)]++;//记录当前集合不在环上的节点数量
                ans += p[v];//不在环上的点的贡献
                Q.push(v);
            }
        }
    }
    for (int i = 1; i <= n; i++) {
        if (i == f[i]) {
        //sum[i]是所有能到达当前环的点的个数
        //cnt[i]为不在环上的节点个数
        //sum[i] - cnt[i]即为环上的节点数量
            ans += 1ll * (sum[i] - cnt[i]) * sum[i];
        }
    }
    cout << ans << endl;
}

int main() {
    solve();
    return 0;
}

F.Two Sequence Queries

更新中…

赛后交流

在比赛结束后,会在交流群中给出比赛题解,同学们可以在赛后查看题解进行补题。

群号: 704572101,赛后大家可以一起交流做题思路,分享做题技巧,欢迎大家的加入。

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

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

相关文章

Docker高级篇之Docker网络

文章目录 1. Docker Network简介2. Docker 网络模式3. Docker 网络模式之bridge4. Docker 网络模式之host5. Docker 网络模式之none6. Docker 网络模式之container7. Docker 网络模式之自定义网络模式 1. Docker Network简介 从Docker的架构和运作流程来看&#xff0c;Docker是…

normalizing flows vs 直方图规定化

normalizing flows名字的由来 The base density P ( z ) P(z) P(z) is usually defined as a multivariate standard normal (i.e., with mean zero and identity covariance). Hence, the effect of each subsequent inverse layer is to gradually move or “flow” the da…

【报文数据流中的反压处理】

报文数据流中的反压处理 1 带存储体的反压1.1 原理图1.2 Demo 尤其是在NP芯片中&#xff0c;经常涉及到报文的数据流处理&#xff1b;为了防止数据丢失&#xff0c;和各模块的流水处理&#xff1b;因此需要到反压机制&#xff1b; 反压机制目前接触到的有两种&#xff1a;一是基…

【Python入门与进阶】Anaconda环境配置

目录 1.Conda换源 2.pip换源 3.环境管理 4.可视化界面完成上述操作 1.Conda换源 1.1.打开Anaconda Powershell Prompt 1.2.在界面中输入以下命名&#xff08;加入清华源并设置搜索优先级&#xff09;&#xff1a; conda config --add channels https://mirrors.ustc.edu.…

android集成百度文心一言实现对话功能,实战项目讲解,人人都能拥有一款ai应用

大家好&#xff0c;今天给大家讲解下如何实现一个基于百度文心一言的app功能&#xff0c;app内部同时集成了讯飞的语音识别。本文适用于有android基础的小伙伴阅读&#xff0c;文章末尾放上本项目用到的全部实例代码&#xff0c;在使用前请务必看完本文章。 先来给大家看看效果…

鲜为人知的英伟达创始人:早早退出,身价不如黄仁勋零头

内容提要 普里姆因为婚姻纠纷等个人生活的干扰无法专注在工作上&#xff0c;在成立公司的10年后&#xff0c;也就是2003年宣布退休离开英伟达&#xff0c;并在2006年出售剩余的所有英伟达股份&#xff0c;过上不与外界联系、离群索居的生活&#xff0c;在家中鼓捣着如何“拯救…

【深度学习】深度学习之巅:在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境

【深度学习】深度学习之巅&#xff1a;在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境 大家好 我是寸铁&#x1f44a; 总结了一篇【深度学习】深度学习之巅&#xff1a;在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境✨ 喜欢的小伙伴可以点点关注 &#…

【MySQL】(基础篇三) —— 创建数据库和表

管理数据库和表 管理数据库 创建数据库 在MySQL中&#xff0c;创建数据库的SQL命令相对简单&#xff0c;基本语法如下&#xff1a; CREATE DATABASE 数据库名;如果你想避免在尝试创建已经存在的数据库时出现错误&#xff0c;可以添加 IF NOT EXISTS 子句&#xff0c;这样如…

transformer - 注意力机制

Transformer 的注意力机制 Transformer 是一种用于自然语言处理任务的模型架构&#xff0c;依赖于注意力机制来实现高效的序列建模。注意力机制允许模型在处理一个位置的表示时&#xff0c;考虑输入序列中所有其他位置的信息&#xff0c;而不仅仅是前面的几个位置。这种机制能…

学会python——九九乘法表+斐波那契数列(python实例一)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 pycharm编译 2、九九乘法表 2.1 代码构思 2.2 代码示例 2.3 运行结果 3、斐波那契数列 3.1 代码构思 3.2 代码示例 3.3 运行结果 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对…

Mac清洁神器CleanMyMac2024一键轻松解决电脑垃圾问题

【CleanMyMac】苹果mac电脑垃圾清理软件 大家好&#xff01;今天我要给大家种草一个超级好用的苹果mac电脑垃圾清理软件&#xff0c;那就是 CleanMyMac。相信很多人都遇到过电脑运行速度变慢、存储空间不足的问题&#xff0c;而这款软件就是解决这些问题的救星&#xff01;让我…

UML交互图-协作图

概述 协作图和序列图都表示出了对象间的交互作用&#xff0c;但是它们侧重点不同。序列图清楚地表示了交互作用中的时间顺序&#xff0c;但没有明确表示对象间的关系。协作图则清楚地表示了对象间的关系&#xff0c;但时间顺序必须从顺序号获得。序列图常常用于表示方案&#…

物理机宕机后,虚拟机出现(无响应),虚拟机无法开机

物理机宕机后&#xff0c;虚拟机出现&#xff08;无响应&#xff09;&#xff0c;虚拟机无法开机 解决方案&#xff1b;看存储池中&#xff0c;文件是否还存在&#xff1b;如果存在&#xff0c;新建虚拟机&#xff0c;加载存储池中的磁盘&#xff0c;重启虚拟机就可以了 重新创…

matlab---app

一 基础 标签和信号灯没有回调函数 clc,clear,close all %清理命令区、工作区&#xff0c;关闭显示图形 warning off %消除警告 feature jit off %加速代码运行 ysw{i}i %循环赋值 celldisp(ysw) %显示元胞数组ysw.y1{1}[1,2] …

【机器学习300问】108、什么是多项式回归模型?

一、多项式回归是什么 &#xff08;1&#xff09;举例说明 假设你经营着一家农场&#xff0c;想要根据土地面积来预测作物的产量。如果你只用线性模型&#xff08;即&#xff09;&#xff0c;你可能会发现它并不足以描述实际的产量情况&#xff0c;因为实际产量可能会随着土地…

美国演员工会SAG-AFTRA 要求人工智能在广告中使用演员声音需征得同意并付费

SAG-AFTRA 的新豁免允许在人工智能生成的广告中使用演员的声音&#xff0c;但需要同意、补偿和安全措施 美国演员工会&#xff08;SAG-AFTRA&#xff09;推出了一项新的豁免&#xff0c;以保护会员免受未经授权的人工智能在广告中使用其声音的影响。动态人工智能音频广告豁免定…

添加Microsoft.VisualStudio.TestTools.UnitTesting命名空间

创建“单元测试项目”&#xff0c;则自动添加 Microsoft.VisualStudio.TestTools.UnitTesting 命名空间

《Brave New Words 》2.1 学生为什么要写作

Part II: Giving Voice to the Social Sciences 第二部分&#xff1a;为社会科学发声 Art is a collaboration between God and the artist, and the less the artist does the better. —Andr Gide 艺术是上帝与艺术家的合作&#xff0c;艺术家做得越少越好。 —安德烈纪德 A …

Docker 常用命令以及镜像选择

目录 1.Docker基本组成 2.镜像选择 2.1、镜像推荐选择方案 2.2版本选择 3.Docker 命令 3.1镜像管理 拉取镜像&#xff1a; 列出镜像&#xff1a; 删除镜像&#xff1a; 构建镜像&#xff1a; 3.2容器管理 运行容器 列出运行中的容器和所有容器 停止容器 启动重启…

微服务开发与实战Day04

一、网关路由 网关&#xff1a;就是网络的关口&#xff0c;负责请求的路由、转发、身份校验。 在SpringCloud中网关的实现包括两种&#xff1a; 1. 快速入门 Spring Cloud Gateway 步骤&#xff1a; ①新建hm-gateway模块 ②引入依赖pom.xml(hm-gateway) <?xml version…