AtCoder Beginner Contest 398(ABCDEF)

news2025/3/25 3:51:38

A - Doors in the Center

翻译:

        找到一个满足下面情况长为N的字符串:

  • 每个字符是 - 或 = 。
  • 是一个回文。
  • 包含一个或两个 = 。如果包含两个相邻的 = 。

        如此字符串为独一无二的。

思路:

        从两端使用 = 开始构造回文。在特判下中间部分,字符串s长为2,放两个 = ;长为1 放一个 = 。

实现:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int MX = 1e5+10;

void solve(){
    int n;
    cin>>n;
    vector<char> s(n);
    for (int l=0,r=n-1;l<=r;l++,r--){
        s[l] = '-';
        s[r] = '-';
    }
    if (n%2==0){
        s[n/2] = '=';
        s[n/2-1] = '=';
    }else{
        s[n/2] = '=';
    }
    for (int i=0;i<n;i++){
        cout<<s[i];
    }cout<<endl;
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    solve();
    return 0;
}



B - Full House 3

翻译:

        我们有七张牌。第 i 张牌 (i=1,...,7)上面写着一个整数 A_i
        请判断是否有可能从这七张牌中选出五张,使所选的牌组成座无虚席。
        当且仅当满足以下条件时,由五张牌组成的一组牌称为座无虚席:

  •         对于不同的整数 x 和 y,有三张牌带有 x,两张牌带有 y

思路:

        方法一:

        记录出现两次的数的个数cnt2,和出现两个以上的数的个数cnt3。

        当cnt3>=2或(cnt3>=1且cnt2>=1)时,可行,反之不可行。

        方法二:

        记录每个数的出现次数,并放入数组a中,将a降序排序,当下标为1的值大于等于2时可行,否则不可行。

实现:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int MX = 1e5+10;

void solve(){
    vector<int> a(14,0);
    int cnt2 = 0,cnt3=0;
    for (int num,i=1;i<=7;i++){
        cin>>num;
        a[num]++;
    }
    for (int i=1;i<=13;i++){
        if (a[i]==2){
            cnt2++;
        }else if (a[i]>=3){
            cnt3++;
        }
    }
    if (cnt3>=2 || (cnt3>=1 && cnt2>0)){
        cout<<"Yes"<<endl;
    }else{
        cout<<"No"<<endl;
    }
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    solve();
    return 0;
}



C - Uniqueness

翻译:

        这有N个人,下标1到N。第 i 个人有一个整数A_i

        在这群人中对于满足“ 其余N-1个人的数没有与自身相同的 ”的人,找到最大的数并输出他的下标。

        如果没有人满足条件,则报告这一事实。

思路:

       先对每个数计数,在遍历N个人,找大最大的值并记录下标。

实现:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int MX = 1e5+10;

void solve(){
    int maxx = 0,ind = -1;
    int n;
    map<int,int> mp;
    cin>>n;
    vector<int> a(n+1);
    for (int i=1;i<=n;i++){
        cin>>a[i];
        mp[a[i]]++;
    }
    for (int i=1;i<=n;i++){
        if (mp[a[i]]==1 && maxx<a[i]){
            ind = i;
            maxx = a[i];
        }
    }
    cout<<ind<<endl;
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    solve();
    return 0;
}

D - Bonfire

翻译:

        有一个无限大的二维网格,篝火位于坐标 (0,0)。
        在时间 t=0 时,只有单元格(0,0)存在烟雾。

        给你一个长度为 N 的字符串 S 由 N、W、S、E 组成。在 t=1,2,...,N,以下情况依次发生:

  • 风吹过,当时所有的烟都会如下移动:
    • 如果 的第 t 个字符 S 的第 t 个字符为 N,则单元格 (r,c) 单元中的烟移动到 (r-1,c) 单元。
    • 如果是 W,则单元格 (r,c) 格中的烟移至 (r,c-1) 单元。
    • 如果是 S,则单元格 (r,c) 格中的烟雾移至 (r+1,c) 单元。
    • 如果是 E,则单元格 (r,c) 格中的烟雾移至 (r,c+1)单元。
  • 如果单元格 (0,0) 中没有烟雾 ,则在单元 (0,0)会有新烟产生。

        高桥站在单元格 (R,C)单元。
        对于每个整数 1≤t≤N,确定在 (R,C) 在时间 t+0.5,并按要求格式打印答案。

思路:

        由于(0,0)处的烟一直在产生,因此每一步都可以时新的开始。也就是说当最初的烟到s[ i ]时,之后的新烟是由s[ j : i ] = s[0 : i ]-s[0 : j]产生的。遍历所有步数 i ,判断当前是否存在s[ j : i ]为人所在的位置,并记录当前的前缀值 [0 : i ]。

实现:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int MX = 1e5+10;

void solve(){
    unordered_map<char,array<int,2>> direct;
    direct['N'] = {-1,0};
    direct['W'] = {0,-1};
    direct['S'] = {1,0};
    direct['E'] = {0,1};
    int n,r,c,x_min = 0,x_max = 0,y_min = 0,y_max = 0;
    cin>>n>>r>>c;
    char d;
    set<array<int,2>> vis;
    vis.insert({0,0});
    int now_x = 0,now_y = 0;
    for (int i=1;i<=n;i++){
        cin>>d;
        now_x+=direct[d][0];
        now_y+=direct[d][1];
        if (vis.find({now_x-r,now_y-c})!=vis.end()){
            cout<<1;
        }else{
            cout<<0;
        }
        vis.insert({now_x,now_y});
    }
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    solve();
    return 0;
}

E - Tree Game

翻译:

        这个问题是一个交互式问题(在这个问题中,你的程序和评判系统通过输入和输出进行交流)。

        给你一棵树 G,树上有 N 个顶点,编号从 1 到 N。 第 i 条边连接顶点 U_ii 和 V_i。.

        你们将用这棵树与高桥玩一个游戏。首先,你们决定谁是第一名,谁是第二名。然后,从第一位玩家开始,轮流执行以下操作:

        选择一对整数 (i,j) 1≤i<j≤N 且满足以下两个条件的一对整数,然后添加一条边连接顶点 和 j 的 G.

  • G 中没有连接顶点 和 j.
  • 添加一条连接顶点 和 j 的边不会产生奇数循环。

无法执行此操作的棋手输棋,另一方获胜。与高桥选手下这盘棋并获胜。

思路:

        按题目是要连偶数环,画图可知会形成偶数环的两个点不管何时连都为偶数环。那么通过暴力深搜,找到所有符合条件的对,在按对的数量一次讲出即可。

        C++的endl会刷新输入输出流。

实现:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int MX = 1e5+10;
int n,x,y;
vector<vector<int>> tree(110);
//vector<int> depth(110,0);
set<array<int,2>> ans;
void dfs(int now,int pos,int fa,int step){
//    cout<<now<<" "<<pos<<" "<<fa<<" "<<step<<endl;
    // 为偶数
    if (step%2==0 && step>2){
        x = min(now,pos);
        y = max(now,pos);
        ans.insert({x,y});
    }
    for (int &i:tree[pos]){
        if (i!=fa){
            dfs(now,i,pos,step+1);
        }
    }
}
void solve(){
    cin>>n;
    for (int i=1,u,v;i<n;i++){
        cin>>u>>v;
        tree[u].push_back(v);
        tree[v].push_back(u);
    }
    for (int i=1;i<=n;i++){
        dfs(i,i,i,1);
    }
    if (ans.size()&1){
        cout<<"First"<<endl;
        do{
            auto i = *ans.begin();
            ans.erase({i[0],i[1]});
            cout<<i[0]<<" "<<i[1]<<endl;
            cin>>x>>y;
            ans.erase({x,y});
        }while (x!=-1 && y!=-1);
    }else{
        x = 0,y = 0;
        cout<<"Second"<<endl;
        while (x!=-1 && y!=-1){
            cin>>x>>y;
            ans.erase({x,y});
            auto i = *ans.begin();
            ans.erase({i[0],i[1]});
            cout<<i[0]<<" "<<i[1]<<endl;
        }
    }
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    solve();
    return 0;
}

F - ABCBA

翻译:

        找到一个以S为前缀的最小回文。

思路:

        找到S中右端点在S右端点的最大回文子串。将其右边的多余部分反转复制到S右端即可。

实现:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int MX = 1e5+10;

void solve(){
    string s;
    cin>>s;
    int n = s.size();
    int len = 1;
    int f = 1;
    for (int i=0;i<=n-1;i++){
        if (s[i]==s[n-1]){
            f = 1;
            for (int l=i,r=n-1;l<=r;l++,r--){
                if (s[l]!=s[r]){
                    f = 0;
                    break;
                }
            }
            if (f){
                len=n-i;
                break;
            }
        }
    }
    if (len==n){
        cout<<s<<endl;
    }else{
        cout<<s;
        for (int i=n-len-1;i>=0;i--){
            cout<<s[i];
        }
    }
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    solve();
    return 0;
}

  有建议可以评论,我会积极改进qwq。

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

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

相关文章

单表达式倒计时工具:datetime的极度优雅(智普清言)

一个简单表达式&#xff0c;也可以优雅自成工具。 笔记模板由python脚本于2025-03-22 20:25:49创建&#xff0c;本篇笔记适合任意喜欢学习的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 Pyth…

C++继承机制:从基础到避坑详细解说

目录 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 总结&#xff1a; 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 ​编辑 默认构造与传参构造 拷贝构造&am…

MySQL数据库精研之旅第二期:库操作的深度探索

专栏&#xff1a;MySQL数据库成长记 个人主页&#xff1a;手握风云 目录 一、查看数据库 二、创建数据库 2.1. 语法 2.2. 示例 三、字符集编码和校验(排序)规则 3.1. 查看数据库支持的字符集编码 3.2. 查看数据库支持的排序规则 3.3. 不同的字串集与排序规则对数据库的…

git_version_control_proper_practice

git_version_control_proper_practice version control&#xff0c;版本控制的方法之一就是打tag 因为多人协作的项目团队&#xff0c;commit很多&#xff0c;所以需要给重要的commit打tag&#xff0c;方便checkout&#xff0c;检出这个tag 参考行业的实践方式。如图git、linux…

计算机组成原理和计算机网络常见单位分类及换算

计算机组成原理&#xff08;主要用于存储、内存、缓存等&#xff09; 计算机网络&#xff08;主要用于传输速率&#xff09; 直观对比

【第二十八周】:Temporal Segment Networks:用于视频动作识别的时间分段网络

TSN 摘要Abstract文章信息引言方法时间分段采样分段聚合输入模态聚合函数多尺度时序窗口集成&#xff08;M-TWI&#xff09;训练 代码实现实验结果总结 摘要 本篇博客介绍了时间分段网络&#xff08;Temporal Segment Network, TSN&#xff09;&#xff0c;这是一种针对视频动…

扩展域并查集

什么叫扩展域并查集 1 和 2是敌人&#xff0c;那么就把1好12链接起来&#xff1a;表示1和2是敌人 2和11链接起来也是这个道理 然后2 和3使敌人同理。 最后12连接了1 和 3&#xff0c;表名1 和 3 是 2 的敌人&#xff0c;1和3 就是朋友 1.P1892 [BalticOI 2003] 团伙 - 洛谷 #in…

【C#语言】C#同步与异步编程深度解析:让程序学会“一心多用“

文章目录 ⭐前言⭐一、同步编程&#xff1a;单线程的线性世界&#x1f31f;1、寻找合适的对象✨1) &#x1f31f;7、设计应支持变化 ⭐二、异步编程&#xff1a;多任务的协奏曲⭐三、async/await工作原理揭秘⭐四、最佳实践与性能陷阱⭐五、异步编程适用场景⭐六、性能对比实测…

动态规划入门详解

动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;是一种算法思想&#xff0c;它将问题分解为更小的子问题&#xff0c;然后将子问题的解存起来&#xff0c;避免重复计算。 所以动态规划中每一个状态都是由上一个状态推导出来的&#xff0c;这一点就区别…

SOFABoot-09-模块隔离

前言 大家好&#xff0c;我是老马。 sofastack 其实出来很久了&#xff0c;第一次应该是在 2022 年左右开始关注&#xff0c;但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…

基于基于eFish-SBC-RK3576工控板的智慧城市边缘网关

此方案充分挖掘eFish-SBC-RK3576的硬件潜力&#xff0c;可快速复制到智慧园区、交通枢纽等场景。 方案亮点 ‌接口高密度‌&#xff1a;单板集成5GWiFi多路工业接口&#xff0c;减少扩展复杂度。‌AIoT融合‌&#xff1a;边缘端完成传感器数据聚合与AI推理&#xff0c;降低云端…

CSS基础知识一览

持续维护 选择器 display 常用属性 浮动 弹性布局

【免费】2000-2019年各省地方财政房产税数据

2000-2019年各省地方财政房产税数据 1、时间&#xff1a;2000-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区、年份、地方财政房产税 4、范围&#xff1a;31省 5、指标说明&#xff1a;房产税是对个人和单位拥有的房产征收的一种…

车载以太网网络测试-21【传输层-DOIP协议-4】

目录 1 摘要2 DoIP entity status request/response&#xff08;0x4001、0x4002&#xff09;2.1 使用场景2.2 报文结构2.2.1 0x4001&#xff1a;DoIP entity status request2.2.2 0x4002&#xff1a;DoIP entity status response 3 Diagnostic power mode information request/…

Spring AI Alibaba ChatModel使用

一、对话模型&#xff08;Chat Model&#xff09;简介 1、对话模型&#xff08;Chat Model&#xff09; 对话模型&#xff08;Chat Model&#xff09;接收一系列消息&#xff08;Message&#xff09;作为输入&#xff0c;与模型 LLM 服务进行交互&#xff0c;并接收返回的聊天…

基于FPGA频率、幅度、相位可调的任意函数发生器(DDS)实现

基于FPGA实现频率、幅度、相位可调的DDS 1 摘要 直接数字合成器( DDS ) 是一种通过生成数字形式的时变信号并进行数模转换来产生模拟波形(通常为正弦波)的方法,它通过数字方式直接合成信号,而不是通过模拟信号生成技术。DDS主要被应用于信号生成、通信系统中的本振、函…

k8s高可用集群安装

一、安装负载均衡器 k8s负载均衡器 官方指南 1、准备三台机器 节点名称IPmaster-1192.168.1.11master-2192.168.1.12master-3192.168.1.13 2、在这三台机器分别安装haproxy和keepalived作为负载均衡器 # 安装haproxy sudo dnf install haproxy -y# 安装Keepalived sudo yum …

3DMAX曲线生成器插件CurveGenerator使用方法

1. 脚本功能简介 3DMAX曲线生成器插件CurveGenerator是一个用于 3ds Max 的样条线生成工具&#xff0c;用户可以通过简单的UI界面输入参数&#xff0c;快速生成多条样条线。每条样条线的高度值随机生成&#xff0c;且可以自定义以下参数&#xff1a; 顶点数量&#xff1a;每条…

六十天前端强化训练之第二十六天之Vue Router 动态路由参数大师级详解

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗&#xff0c;谢谢大佬&#xff01; 目录 一、知识讲解 1. Vue Router 核心概念 2. 动态路由参数原理 3. 参数传递方案对比 二、核心代码示例 1. 完整路由配置 2. 参数接收组件 3. 导航操作示例 三、实现效果示…

Model Context Protocol:下一代AI系统集成范式革命

在2023年全球AI工程化报告中,开发者面临的核心痛点排名前三的分别是:模型与业务系统集成复杂度(58%)、上下文管理碎片化(42%)、工具调用标准化缺失(37%)。传统API集成模式在对接大语言模型时暴露明显短板:RESTful接口无法承载动态上下文,GraphQL缺乏工具编排能力,gR…