AtCoder Beginner Contest 367 A~F

news2024/9/20 22:39:08

A.Shout Everyday(枚举)

题意:

A t C o d e r AtCoder AtCoder 王国,居民们每天都要在 A A A 点大声喊出他们对章鱼烧的热爱。

住在 A t C o d e r AtCoder AtCoder 王国的高桥每天 B B B 点睡觉, C C C 点起床( 24 24 24 小时钟)。他醒着的时候可以喊出对章鱼烧的爱,但睡着的时候却不能。判断他是否每天都能喊出对章鱼烧的爱。这里,一天有 24 24 24 小时,而他的睡眠时间小于 24 24 24 小时。

分析:

直接从 A A A枚举到 B B B,观察是否遍历到 C C C即可。

代码:

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

int main() {
    int a, b, c;
    cin >> a >> b >> c;
    int flag = 1;
    for (; a != b; a = (a + 1) % 24) {
        if (a == c) {
            flag = 0;
            break;
        }
    }
    if (flag)
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
    return 0;
}

B.Cut .0(模拟)

题意:

一个实数 X X X 已精确到小数点后第三位。
请在下列条件下打印实数 X X X

  • 小数部分不能有尾数 “0”。
  • 小数点后不能有多余的尾数。

分析:

按照题意模拟即可。

代码:

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

int main() {
    string s;
    cin >> s;
    while (s.size() > 2 && s.back() == '0') {
        s.pop_back();
    }
    if (s.back() == '.') {
        s.pop_back();
    }
    cout << s << endl;
    return 0;
}

C.Enumerate Sequences(dfs)

题意:

按升序排列打印所有满足以下条件的长度为 N N N 的整数序列。

  • i i i 个元素介于 1 1 1 R i R_i Ri 之间。
  • 所有元素之和是 K K K 的倍数。

什么是序列的词序?如果下面的 1. 或 2. 成立,那么序列 A = ( A 1 , … , A ∣ A ∣ ) A = (A_1, \ldots, A_{|A|}) A=(A1,,AA) 在词法上小于 B = ( B 1 , … , B ∣ B ∣ ) B = (B_1, \ldots, B_{|B|}) B=(B1,,BB)

  1. ∣ A ∣ < ∣ B ∣ |A| < |B| A<B ( A 1 , … , A ∣ A ∣ ) = ( B 1 , … , B ∣ A ∣ ) (A_{1},\ldots,A_{|A|}) = (B_1,\ldots,B_{|A|}) (A1,,AA)=(B1,,BA) .
  2. 存在一个整数 1 ≤ i ≤ min ⁡ { ∣ A ∣ , ∣ B ∣ } 1\leq i\leq \min\{|A|,|B|\} 1imin{A,B} ,使得下面两个条件都成立:
    • ( A 1 , … , A i − 1 ) = ( B 1 , … , B i − 1 ) (A_{1},\ldots,A_{i-1}) = (B_1,\ldots,B_{i-1}) (A1,,Ai1)=(B1,,Bi1)
    • A i < B i A_i < B_i Ai<Bi

分析:

我们用 d f s dfs dfs按照要求依次搜索即可。

代码:

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

int n, k, r[15], a[15];

void dfs(int x, int sum) {
    if (x == n + 1) {
        if (sum % k == 0) {
            for (int i = 1; i <= n; i++) {
                cout << a[i] << ' ';
            }
            cout << endl;
        }
        return;
    }
    for (int i = 1; i <= r[x]; i++) {
        a[x] = i;
        dfs(x + 1, sum + i);
    }
}

int main(){
    cin >> n >> k;
    for (int i = 1; i <= n; i++) {
        cin >> r[i];
    }
    dfs(1, 0);
    return 0;
}

D.Pedometer (思维)

题意:

一个湖周围有 N N N 个休息区。
这些休息区按顺时针顺序编号为 1 1 1 2 2 2 、…、 N N N
从休息区 i i i 顺时针走到休息区 i + 1 i+1 i+1 需要 A i A_i Ai 步(其中休息区 N + 1 N+1 N+1 指的是休息区 1 1 1 )。
从休息区 s s s 顺时针走到休息区 t t t s ≠ t s \neq t s=t )所需的最小步数是 M M M 的倍数。
( s , t ) (s,t) (s,t) 的可能对数。

分析:

s → t s \rightarrow t st有两种路径, s < t s < t s<t 时,我们有 p r e [ t ] − p r e [ s ] ≡ 0 ( m o d M ) pre[t] - pre[s] \equiv 0(mod M) pre[t]pre[s]0(modM)。当 s > t s > t s>t时,我们有 p r e [ t ] + p r e [ n ] − p r e [ s ] ≡ 0 ( m o d M ) pre[t] + pre[n] - pre[s] \equiv 0(mod M) pre[t]+pre[n]pre[s]0(modM)。移项后有 p r e [ t ] ≡ p r e [ s ] − p r e [ n ] ( m o d M ) pre[t] \equiv pre[s] - pre[n] (mod M) pre[t]pre[s]pre[n](modM)

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long LL;

int main() {
    int n, m;
    cin >> n >> m;
    vector<int> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    vector<LL> pre(n + 1);
    for (int i = 0; i < n; i++) {
        pre[i + 1] = pre[i] + a[i];
    }
    LL ans = 0;
    map<int, int> mp;
    for (int i = 0; i < n; i++) {
        ans += mp[((pre[i] - pre[n]) % m + m) % m];
        ans += mp[pre[i] % m];
        mp[pre[i] % m]++;
    }
    cout << ans << endl;
    return 0;
}

E.Permute K times (倍增)

题意:

给你一个长度为 N N N 的序列 X X X ,其中每个元素都在 1 1 1 N N N 之间(包括首尾两个元素),以及一个长度为 N N N 的序列 A A A 。请输出在 A A A 上执行以下操作 K K K 次的结果。

  • B B B 替换 A A A ,使得 B i = A X i B_i = A_{X_i} Bi=AXi .

分析:

将题目转化成给定基环森林,点有点权。问从每个点出发,走了 k k k步后的点的点权。其中边是 i → x i i \rightarrow x_i ixi,点权 a i a_i ai。问第 k k k步后到达的点。我们预处理出倍增数组 t m p [ i ] [ j ] tmp[i][j] tmp[i][j]表示从点 j j j出发走了 2 i 2^i 2i 步后到达的点。然后对于每个点用倍增数组求 k k k次后的结果即可。

代码:

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

int main() {
    int n;
    LL k;
    cin >> n >> k;
    vector<vector<int> > tmp(64, vector<int>(n));
    for (int i = 0; i < n; i++) {
        int v;
        cin >> v;
        v--;
        tmp[0][i] = v;
    }
    vector<int> a(n);
    for (auto &x: a)
        cin >> x;
    for (int i = 1; i < 64; i++) {
        for (int j = 0; j < n; j++) {
            tmp[i][j] = tmp[i - 1][tmp[i - 1][j]];
        }
    }
    for (int i = 0; i < n; i++) {
        LL cnt = k;
        int cur = i;
        for (int j = 0; j < 64; j++) {
            if (cnt & (1LL << j)) {
                cur = tmp[j][cur];
            }
        }
        cout << a[cur] << " ";
        if (i == n - 1)
            cout << endl;
    }
    return 0;
}

F.Rearrange Query (哈希)

题意:

给你长度为 N N N 的正整数序列: A = ( A 1 , A 2 , … , A N ) A=(A_1,A_2,\ldots,A_N) A=(A1,A2,,AN) B = ( B 1 , B 2 , … , B N ) B=(B_1,B_2,\ldots,B_N) B=(B1,B2,,BN) .

给你 Q Q Q 个查询,让你按顺序处理。

  • 给定正整数 l i , r i , L i , R i l_i,r_i,L_i,R_i li,ri,Li,Ri 。如果可以重新排列子序列 ( A l i , A l i + 1 , … , A r i ) (A_{l_i} , A_{l_i+1}, \ldots , A_{r_i}) (Ali,Ali+1,,Ari) 以匹配子序列 ( B L i , B L i + 1 , … , B R i ) (B_{L_i} , B_{L_i+1} , \ldots , B_{R_i}) (BLi,BLi+1,,BRi) ,则输出Yes,否则输出 No

分析:

如果 A [ l , r ] A[l,r] A[l,r]序列的能通过重排得到 B [ L , R ] B[L,R] B[L,R],首先要满足 r − l = R − L r−l=R−L rl=RL,再观察每个数的出现次数是否一致。存在一个降低计算代价的必要条件是 s u m a [ l , r ] = s u m b [ L , R ] sum_a[l,r]=sum_b[L,R] suma[l,r]=sumb[L,R],但不是充分条件,会有误判的概率,
但是因为我们只要求数量相等,所以我们事先对所有数进行一个随机映射,那么这个误判的概率将极大减小。

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long LL;
typedef unsigned long long ULL;

ULL rnd() {
    static ULL A = 1 << 16 | 3, B = 333333331, C = 2341;
    return C = A * C + B;
}

int main() {
    int n, q;
    cin >> n >> q;
    vector<LL> a(n);
    vector<LL> b(n);
    map<LL, LL> mp;
    for (auto &x: a) {
        cin >> x;
        if (mp.find(x) == mp.end()) {
            mp[x] = rnd();
        }
    }
    for (auto &x: b) {
        cin >> x;
        if (mp.find(x) == mp.end()) {
            mp[x] = rnd();
        }
    }
    auto presum = [&](vector<LL> &a) {
        int n = a.size();
        vector<LL> s1(n + 1);
        for (int i = 0; i < n; ++i) {
            s1[i + 1] = (s1[i] + mp[a[i]]);
        }
        return s1;
    };
    auto pa1 = presum(a);
    auto pb1 = presum(b);
    auto sum = [&](vector<LL> &s, int l, int r) { return (s[r] - s[l - 1]); };
    auto check = [&](int l, int r, int L, int R) {
        auto PA = sum(pa1, l, r);
        auto PB = sum(pb1, L, R);
        return PA == PB;
    };
    while (q--) {
        int l, r, L, R;
        cin >> l >> r >> L >> R;
        if (r - l == R - L && check(l, r, L, R)) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
    }
    return 0;
}

赛后交流

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

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

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

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

相关文章

day17:一文弄懂“无参装饰器”、“有参装饰器”和“叠加装饰器”

目录 一、无参装饰器1. 什么是装饰器2. 为何要用装饰器3. 如何用解决方案一&#xff1a;失败&#xff0c;优化见↓↓↓解决方案二&#xff1a;失败&#xff0c;优化见↓↓↓解决方案三&#xff1a;失败&#xff0c;优化见↓↓↓方案三的优化一&#xff1a;将index的参数写活了方…

重磅发布!天途多自由度无人机调试台

无人机调试、测试和试飞很容易受空域、场地、环境、失控炸机和操作失误等限制。天途TE55多自由度无人机整机调试台应运而生&#xff01; 突破空域限制 天途TE55多自由度无人机整机调试台&#xff0c;突破场地空域限制&#xff0c;不到0.7平米的空间&#xff0c;即可完成小型无人…

[数据集][目标检测]建筑工地楼层空洞检测数据集VOC+YOLO格式2588张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2588 标注数量(xml文件个数)&#xff1a;2588 标注数量(txt文件个数)&#xff1a;2588 标注…

基于vue框架的办公用品管理系统i52wc(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;部门,员工,办公用品,入库记录,出库记录,申领信息 开题报告内容 基于Vue框架的办公用品管理系统 开题报告 一、引言 随着企业规模的扩大和日常运营的复杂化&#xff0c;办公用品的管理成为了一个不容忽视的重要环节。传统的办公用品管…

Java中接口

接口的定义和使用 练习 public abstract class Animal {private String name;private int age;public Animal() {}public Animal(String name, int age) {this.name name;this.age age;}public String getName() {return name;}public void setName(String name) {this.name…

ChatGPT、Claude 和 Gemini 在数据分析方面的比较(第 2 部分)

欢迎来到雲闪世界。欢迎回到我的系列文章的第二部分&#xff0c;ChatGPT、Claude 和 Gemini 在数据分析方面的比较&#xff01;在本系列中&#xff0c;我旨在比较这些 AI 工具在各种数据科学和分析任务中的表现&#xff0c;以帮助其他数据爱好者和专业人士根据自己的需求选择最…

告别图片堆成山, 图片转pdf工具:你的整理小能手来啦!

嘿&#xff0c;各位小伙伴&#xff01;你们有没有觉得&#xff0c;现在拍照比吃饭还日常&#xff0c;手机、电脑里堆满了照片&#xff0c;找起来简直跟大海捞针似的&#xff1f;别急&#xff0c;我今儿个就来给你们支个招——图片转PDF大法&#xff0c;一键变成整整齐齐的PDF文…

【Java-异常】

异常&#xff1a;程序在运行期间产生的一些错误 Java通过API中Throwable类的众多子类描述各种不同的异常。Java异常都是对象&#xff0c;是Throwable子类的实例。 Throwable可以划分为两个大类&#xff1a; Error错误类&#xff1a;会导致JVM虚拟机宕机 Exception异常类&…

Java---二维数组

一.数组的维数 假象&#xff1a;一维数组 二维数组&#xff1a;数组中的元素是一维数组 二.五子棋游戏 import javax.swing.*;public class Array06 {static String[][] matrix new String[15][15];static String black "⚫";static String white "⚪"…

SQL进阶技巧:多维分析之如何还原任意维度组合下的维度列簇名称?【利用grouping_id逆向分析】

目 录 0 需求描述 1 数据准备 2 问题分析 3 小结 0 需求描述 现有用户访问日志表 visit_log ,每一行数据表示一条用户访问日志。 需求: (1)按照如下维度组合 (province), (province, city), (province, city, device_type) 计算用户访问量,要求一条SQL语句统计所所…

[000-01-018].第3节:Linux环境下ElasticSearch环境搭建

我的后端学习笔记大纲 我的ElasticSearch学习大纲 1.Linux系统搭建ES环境&#xff1a; 1.1.单机版&#xff1a; a.安装ES-7.8版本 1.下载ES: 2.上传与解压&#xff1a;将下载的tar包上传到服务器software目录下&#xff0c;然后解压缩&#xff1a;tar -zxvf elasticsearch-7…

logstash入门学习

1、入门示例 1.1、安装 Redhat 平台 rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch cat > /etc/yum.repos.d/logstash.repo <<EOF [logstash-5.0] namelogstash repository for 5.0.x packages baseurlhttp://packages.elasticsearch.org…

以太坊 Pectra 升级四个月倒计时,哪些更新值得期待?

撰文&#xff1a;Ignas&#xff0c;DeFi Research 编译&#xff1a;J1N&#xff0c;Techub News 现在市场有充分的理由看空以太坊。因为自 2023 年初的市场低点以来&#xff0c; SOL 的涨幅比以太坊高 6.8 倍&#xff0c; 过去两年内 ETH/BTC 交易对的跌幅为 47%。 现在是以太…

Maven高级使用指南

在开发大型项目时&#xff0c;Maven作为一个强大的构建和项目管理工具&#xff0c;能显著提升项目管理和构建的效率。然而&#xff0c;随着项目的扩大&#xff0c;维护和管理的复杂性也随之增加。本文将探讨一些高级的Maven用法和解决方案&#xff0c;以帮助你更好地管理大型项…

在ISIS中什么是IP从地址

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

win11安装python及pycharm与webots联合仿真

1、查看Windows系统 是否已安装Python及版本 【冰糖Python】Windows系统 查看已安装的Python版本_怎么确定windows上成功安装python-CSDN博客 好&#xff0c;确认没装下面装python37 2、安装python3.7.9 参考教程Python 3.82安装教程&#xff08;Windows11、超详细版&#x…

Linux Shell 编程基础入门(一)

&#x1f600;前言 本篇博文是关于自动化工具Shell 编程的基本介绍&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动…

微服务:配置管理和配置热更新

参考&#xff1a;黑马程序员之微服务 &#x1f4a5; 该系列属于【SpringBoot基础】专栏&#xff0c;如您需查看其他SpringBoot相关文章&#xff0c;请您点击左边的连接 目录 一、引言 二、配置共享 1. 添加共享配置到nacos &#xff08;1&#xff09;jdbc的共享配置 shared…

点灯案例优化(三)宏定义特定位名称

前面利用位运算对代码进行二次优化以后&#xff0c;确实可读性更好&#xff0c;精确性更高了。但是吧&#xff0c;你乍一看这个代码 你可能一下都反应不过来这些的啥意思了&#xff0c;表达式右边上来就是一顿运算&#xff0c;可能刚开始大多数人都看不懂这写的什么&#xff0c…

用Python解决优化问题_模拟退火模板

一、模拟退火算法简介 模拟退火&#xff08;Simulated Annealing&#xff09;是一种启发式算法&#xff0c;用于在优化问题中找到一个好的解。启发式是指一种用于找到解决问题方法的原则或策略&#xff0c;它不保证找到最优解&#xff0c;但可以快速找到一个足够好的解。在许多…