AtcoderABC247场

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

A - Move RightA - Move Right

AtcoderABC247场,算法AtcoderABC247场,算法

题目大意

要求判断在一行4个方块上的人进行向右移动后,是否每个方块上都有人。初始状态下,给定一个由0和1组成的长度为4的字符串S,其中1表示对应方块上有人,0表示没有人。每个人同时向右移动一格,最右边的方块上的人将消失。

思路分析

直接构建移动后的状态字符串T

时间复杂度

O(1)

AC代码

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

int main() {
  string S;
  cin >> S;
  
  string T = "0" + S.substr(0, 3);
  cout << T << endl;
}

B - Unique NicknamesB - Unique Nicknames

AtcoderABC247场,算法AtcoderABC247场,算法AtcoderABC247场,算法

题目大意

给定N个人,每个人有姓氏和名字。需要判断是否可能给所有人起一个符合条件的昵称,其中昵称必须与该人的姓氏或名字相同,并且不能与其他任何人的姓氏或名字相同。

思路分析

可以使用两层循环来解决这个问题。外层循环遍历每个人,内层循环尝试给当前人选择一个昵称(即姓氏或名字),并确保给每个人起昵称时都不会与其他人产生冲突。如果找到了一个满足条件的昵称,则说明可以给该人起昵称;否则,说明无法给该人起昵称。

时间复杂度

O(N2)

AC代码

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int N;
    cin >> N;
    
    vector<string> s(N), t(N);
    for (int i = 0; i < N; i++) {
        cin >> s[i] >> t[i];
    }
    
    for (int i = 0; i < N; i++) {
        bool can_give_a_nickname = false;
        
        for (string S : {s[i], t[i]}) {
            bool s_ok = true;
            
            for (int j = 0; j < N; j++) {
                if (i != j) {
                    if (S == s[j] || S == t[j]) {
                        s_ok = false;
                    }
                }
            }
            
            if (s_ok == true) {
                can_give_a_nickname = true;
            }
        }
        
        if (can_give_a_nickname == false) {
            cout << "No" << endl;
            return 0;
        }
    }
    
    cout << "Yes" << endl;
    return 0;
}

C - 1 2 1 3 1 2 1

AtcoderABC247场,算法AtcoderABC247场,算法

题目大意

定义序列 Sn 如下:
S1 是一个长度为1的序列,包含一个数字1。
对于 n >= 2,Sn 是通过将 Sn-1、n 和 Sn-1}按照顺序连接而得到的序列。
例如,S2 是将 S1、2 和 S1 按照顺序连接而得到的,所以它是: 1, 2, 1。
给定一个整数 N,输出完整的序列 SN。

思路分析

使用递归的方式来构造序列 SN。当 N=1 时,直接输出 “1”。对于 N>1 的情况,可以先构造 SN-1,然后在其前后添加 N,并再次添加 SN-1,即可得到 SN

时间复杂度

O(N)
在构造序列的过程中,需要进行 N-1 次递归调用。每次递归调用的时间复杂度为 O(1)文章来源地址https://www.toymoban.com/news/detail-587324.html

AC代码

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    string s = "1";
    for (int i = 2; i <= n; i++) {
        string t = s;
        s += " ";
        s += to_string(i);
        s += " ";
        s += t;
    }
   cout << fixed << setprecision(10);
  cout << s << endl;
}

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

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

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

相关文章

  • 谷粒商城篇章8 ---- P236-P247 ---- 购物车【分布式高级篇五】

    目录 1 环境搭建 1.1 新建购物车服务模块gulimall-cart 1.2 购物车服务相关配置 1.2.1 pom.xml  1.2.2 yml配置 1.2.2.1 application.yml配置 1.2.2.2 bootstrap.yml配置 1.2.3 主类 1.3 SwitchHosts增加配置 1.4 网关配置 1.5 整合SpringSession 1.5.1 session数据存储在redis 1.5.2 开启SpringSession 1.6 购物车页面搭建 2 购

    2024年02月01日
    浏览(77)
  • JVM回收算法(标记-清除算法, 复制算法, 标记-整理算法)

    最基础的算法,分为两个阶段,“标记”和“清除” 原理: - 标记阶段:collector从mutator根对象开始进行遍历,对从mutator根对象可以访问到的对象都打上一个标识,一般是在对象的header中,将其记录为可达对象。 - 清除阶段,collector对堆内存(heap memory)从头到尾进行线性的遍历

    2024年02月16日
    浏览(43)
  • [蓝桥杯Python]算法练习、算法基础、算法训练、算法模板(持续更新)

    [蓝桥杯Python]算法练习、算法基础、算法训练、算法模板( 持续更新..... ) 目录 一、算法基础 1.Huffuman树 2.Sine之舞 3.数列排序 4.数列排序 5.特殊回文数 6.回文数 7.特殊的数字 8.杨辉三角形 9.高精度加法 10.Fibonacci数列 11.报时助手 12.回形取数 13.矩阵乘法 二、算法提高 1.印章

    2023年04月08日
    浏览(49)
  • 机器学习中四类进化算法的详解(遗传算法、差分进化算法、协同进化算法、分布估计算法)

    GA算法原理 首先我们来介绍进化算法的先驱遗传算法,遗传算法(Genetic Algorithm,简称GA)是一种最基本的进化算法,它是模拟达尔文生物进化理论的一种优化模型,最早由J.Holland教授于1975年提出。遗传算法中种群分每个个体都是解空间上的一个可行解,通过模拟生物的进化

    2024年02月09日
    浏览(44)
  • 【C++】STL 算法概念和分类 ( STL 算法头文件 | STL 算法思想 - 数据与算法分离 | STL 算法 迭代器 | STL 算法 操作对象 | STL 算法分类 )

    标准模板库 STL 算法 都定义在 algorithm , numeric 和 functional 三个头文件中 ; 使用 STL 标准模板库 算法时 , 导入上述 3 个头文件 , 导入时根据需求导入即可 , 不必都导入 ; algorithm 头文件 是 3 个 STL 算法头文件中 包含算法最多的一个 , 包含常用的 : 比较算法、交换算法、查找算法

    2024年01月21日
    浏览(54)
  • 双指针算法,基础算法实践,基本的算法的思想,双指针算法的实现

    双指针算法是一种常用于解决数组和链表问题的算法技巧。它的核心思想是使用两个指针在数据结构中按照一定的规则移动,从而达到快速搜索或处理数据的目的。这个技巧通常用于 优化算法 , 降低时间复杂度 ,提高程序的执行效率。双指针算法有多种应用场景,以下是其

    2024年02月11日
    浏览(40)
  • 负载均衡的算法(静态算法与动态算法)

    静态算法是不考虑服务器动态负载的算法,包括: (1)轮转算法:轮流将服务请求(任务)调度给不同的节点(即:服务器)。 (2)加权轮转算法:考虑不同节点处理能力的差异。 (3)源地址哈希散列算法:根据请求的源IP地址,作为散列键从静态分配的散列表找出对应

    2024年02月08日
    浏览(47)
  • 机器学习基本算法:算法流程和算法分类

    1、算法流程           机器学习的过程是一个完整的项目周期,其中包括数据的采集、数据的特征提取与分类,之后采用何种算法去创建机器学习模型从而获得预测数据。 算法流程 从上图可以看出一个完整的机器学习项目包含以下这些内容: 输入数据:通过自然采集的数

    2024年01月22日
    浏览(54)
  • 【经典算法】有趣的算法之---遗传算法梳理

    every blog every motto: You can do more than you think. 遗传算法是一种基于自然选择和遗传机制的优化算法,因此它通常被用于求解各种最优化问题,例如函数优化、特征选择、图像处理等。 一言以蔽之: 将数学中的优化问题,首先通过“编码”将数字变成“0101”类似这种二进制形式

    2024年01月17日
    浏览(68)
  • (软考-软件设计师.下午)动态规划算法、回溯算法、贪心算法、分治算法的应用

    :【递归技术】【二分查找】 分治法的设计思路: 将一个难以直接解决的 大问题 分解成一些 规模较小 的相同问题以便于 逐个击破,分而治之 。      由代码可以看出二分查找也属于分治法的一种,关于二分查找,这位博主总结的很详细。  :【查表】   动

    2024年02月06日
    浏览(78)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包