AtcoderABC311场

这篇具有很好参考价值的文章主要介绍了AtcoderABC311场。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

A - First ABCA - First ABC

AtcoderABC311场,算法AtcoderABC311场,算法

题目大意

需要找到满足条件的最小字符数量。条件是字符串S中出现了A、B和C各至少一次。

思路分析

可以使用一个unordered_set来存储已经出现的字符,每次遍历字符串S时,将字符加入集合中。当集合中的元素数量达到3时,即表示A、B和C都已经出现过,此时记录当前位置i+1,并且退出循环。

时间复杂度

O(N)

AC代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    string s;
    cin>>s;
    unordered_set<char> ch; // 用于存储已经出现的字符
    int cnt = 0; // 计数器,记录满足条件的字符数量
    for(int i=0;i<n;i++)
    {
        ch.insert(s[i]); // 将当前字符加入集合ch中
        if(ch.size()==3){ // 检查集合ch的大小是否等于3
            cnt=i+1; // 记录当前位置i+1到计数器cnt中
            break; // 退出循环
        }
    }
    cout<<cnt<<endl; // 输出计数器cnt的值作为结果
    return 0;
}

B - Vacation TogetherB - Vacation Together

AtcoderABC311场,算法AtcoderABC311场,算法

题目大意

题目要求找出一段连续的天数,使得所有人都有空。给定N个人的日程安排,用长度为D的字符串Si表示第i个人的日程安排。如果Si的第j个字符是o,则表示第i个人在第j天有空;如果是x,则表示占用。
需要找出最多能选择的连续天数。如果没有可以选择的天数,则输出0。

思路分析

通过遍历每一天,逐步累加连续空闲的天数,并记录下最大的天数。当遇到有人占用的天数时,可以重新开始计数。这样做可以找到最长的连续空闲天数。

时间复杂度

O(D*N)

AC代码

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

int main() {
    int n, d;
    cin >> n >> d;

    vector<string> sc(n);
    for (int i = 0; i < n; i++) {
        cin >> sc[i];
    }

    int ma = 0, cu = 0;
    for (int i = 0; i < d; i++) {
        bool fr = true;
        for (int j = 0; j < n; j++) {
            if (sc[j][i] == 'x') {
                fr = false;
                break;
            }
        }
        if (fr) {
            cu++;
            ma = max(ma, cu);
        } else {
            cu = 0;
        }
    }

    cout << ma << endl;
    return 0;
}

C - Find it! C - Find it!

AtcoderABC311场,算法AtcoderABC311场,算法AtcoderABC311场,算法

题目大意

题目要求在给定的有向图中找到一个无重复顶点的有向环。图有N个顶点和N条边。第i条边从顶点i指向顶点Ai.

思路分析

使用DFS,可以从任意一个顶点开始,沿着边进行探索,直到找到一个已经访问过的顶点为止,从而找到一个可能的有向环。然后,再次进行DFS,直到回到起点,以获得无重复顶点的有向环。

时间复杂度

O(N+M)文章来源地址https://www.toymoban.com/news/detail-605973.html

AC代码

#include <bits/stdc++.h>

using namespace std;

vector<int> g;              // 存储图的连接关系
vector<int> visited;        // 记录顶点是否已访问
vector<int> v;              // 存储有向环中的顶点
int aux = 0, c = 0;         // 辅助变量

// 第一次DFS,找到有向环的起点和终点
void dfs(int i) {
    visited[i]++;

    if (visited[g[i]]) {
        aux = g[i];
    }
    else {
        dfs(g[i]);
    }
}

// 第二次DFS,找到无重复顶点的有向环
void dfs2(int i) {
    c++;
    visited[i]++;
    v.push_back(i);

    if (visited[g[i]] == 1)
        dfs2(g[i]);
}

int main() {
    int n;
    cin >> n;

    g = vector<int>(n);
    visited = vector<int>(n);

    for (int i = 1; i <= n; i++) {
        cin >> g[i];
    }

    dfs(1);     // 从任意一个未访问过的顶点开始进行DFS

    dfs2(aux);  // 从有向环的起点开始再次进行DFS

    cout << c << "\n";
    for (int i = 0; i < c; i++) {
        cout << v[i] << " ";
    }
}

到了这里,关于AtcoderABC311场的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 猿创征文|[CM311-1A Armbian]-烧录制作 Armbian 系统盘以及写入 CM311-1A 机顶盒的 EMMC 刷成服务器

    ################################################## 目录 寻找盒子系统镜像 关于镜像网站 盒子简介 卖家镜像站 s9x 芯片镜像 Ubuntu Armbian jammy Debian Armbian bullseye 默认 arm 系统账户和密码 我所使用的 Armbian Server 镜像资源 使用烧录工具烧录 Armbian 系统盘 获取 balenaEtcher U 盘系统烧录工具 安

    2024年02月04日
    浏览(217)
  • Atcoder Beginner Contest 311 C - E题讲解

    Problem Statement There is a directed graph with N N N vertices and N N N edges. The i i i -th edge goes from vertex i i i to vertex A i A_i A i ​ . (The constraints guarantee that i ≠ A i i neq A_i i  = A i ​ .) Find a directed cycle without the same vertex appearing multiple times. It can be shown that a solution exists under the constraints of t

    2024年02月15日
    浏览(29)
  • 移动电视盒子cm311-1a安装armbian 运行MMDVMHost 成功

    1.移动盒子刷机 安装armbian请参考 魔百盒cm311刷armbian系统,做家庭服务器静音又省电_哔哩哔哩_bilibili 2.安装好armbian后 进入系统 下载mmdvm   命令  git clone https://github.com/g4klx/MMDVMHost.git 执行命令 配置MMDVM.ini 如下 修改加粗部分 [General] Callsign=BG6MGD Id=1234567 Timeout=180 Duplex=0 # Mo

    2024年02月01日
    浏览(91)
  • 【图文教程】腾达w311r如何进行ADSL(PPPOE)连接?

    如果家里有一个电信的有线网(台式机),放假了我想把我的笔记本带回家。家里的电脑又被兄弟姐妹给占了。我很想玩我的笔记本,可是没有网该怎么办呢?这个时候你就需要一台无线路由器连电信的猫(Modem)了。那么腾达w311r如何进行ADSL(PPPOE)连接?下面小编就为大家详细

    2024年02月07日
    浏览(45)
  • [CM311-1A]-买了一个机顶盒准备刷成 Linux 盒子!

    ################################################## 目录 移动魔百盒 CM311-1A CM311-1A 配置 烧录系统盘将机顶盒刷成 Armbian 服务器教程发布啦! 为什么非要买个盒子? 拆后介绍 使用介绍 启动盒子 机顶盒怎么截屏 键盘鼠标操作 系统应用 系统设置 网络设置 空间管理 分辨率 图像缩放 关于

    2024年02月04日
    浏览(245)
  • coreELEC ceemmc 写入 cm311-1a 刷机排坑 Armbian 搞机篇

    还是忍不住下手刷机coreelec了嘎嘎嘎~~~~ 有兴趣去看一下以前的文儿 准备好cm311-1a的Android 9.0固件包 准备好 CoreELEC-Amlogic-ng.arm-19.5-Matrix_rc2-Generic.img的固件包 一条TTL串口线 USB2.0 8G优盘 xshell终端 winscp ftp工具 文中资源关注公众号 “搞机IT爱折腾”回复刷机   1》刷android9.0这个都

    2024年02月09日
    浏览(113)
  • 安卓盒子 魔百盒311-1a YST 刷Armbian系统刷机教程

    中国移动魔百盒311-1a YST 刷Armbian系统,总体过程分以下几步: 1、将盒子底层刷安卓系统 2、将安卓系统设置为开机从U盘启动 3、制作刷机U盘(Armbian系统) 4、将刷机U盘插入盒子后开机,盒子进入U盘中的Armbian系统,完成Armbian系统开机后的简单设置 5、在Armbian系统中使用命令

    2024年02月04日
    浏览(75)
  • 腾达无线路由器怎么设置密码(以Tenda W311R为例)

    家庭用傻瓜路由路中也有不少Tenda的,如果你是买电脑或某某活动送的,则多半会是tenda的。无线路由器设置基本都差不多其它品牌的无线路由器也可以参考这篇文章。这里我们以Tenda W311R无线路由器为例进行讲解。 具体步骤 1.先用网线连接电脑和已通电的腾达无线路由器的

    2024年02月06日
    浏览(66)
  • 用两台腾达W311R无线路由器实现WDS桥接

    两台路由器,先假设作为主路由功能的是A(本人实验时的固件号是V3.2.4.02s_CN),而另一台就是从路由B(本人实验时的固件号是H1_V3.3.5r)了,首先确保A路由能单独正常上网并且无线部分工作正常后就可以 进行如下步骤了: 1、如果A路由的LAN口设置中的IP地址是192.168.0.1,则首

    2024年02月06日
    浏览(44)
  • 【每日一题Day311】LC1761一个图中连通三元组的最小度数 | 枚举

    给你一个无向图,整数 n 表示图中节点的数目, edges 数组表示图中的边,其中 edges[i] = [ui, vi] ,表示 ui 和 vi 之间有一条无向边。 一个 连通三元组 指的是 三个 节点组成的集合且这三个点之间 两两 有边。 连通三元组的度数 是所有满足此条件的边的数目:一个顶点在这个三

    2024年02月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包