AtCoder ABC324 B~E赛后补题

news2025/1/31 17:02:46

赛时没有写出E,早上补完E

B - 3-smooth Numbers

B - 3-smooth Numbers (atcoder.jp)

题面

image.png

题面翻译与思路

判断某个数是否能表示为 2 x 3 y 2^x3^y 2x3y

n%2==0或者n%3==0时,相应地,将这个数不断地除2或者3,判断最后n是否为1
(t了一发,因为写了统计n的质因子个数,瞬间反应过来是想复杂了)

代码

void solve()
{
    LL n; cin >> n;
    while (n % 2 == 0) n /= 2;
    while (n % 3 == 0) n /= 3;
    if (n != 1) cout << "No\n";
    else cout << "Yes\n";
}

C - Error Correction

C - Error Correction (atcoder.jp)

题面

image.png

题面翻译与思路

给定t串与一组字符串strs,对于t串和strs中的每个字符串s,判断是否"相等"。
"相等"包括:

  • s = t
  • len(s) = len(t),但相应的位置上只能有一个字符不同
  • len(s) = len(t) + 1,在t的任意位置添加一个字符后,与s相等
  • len(s) + 1 = len(t),在t的任意位置删除一个字符后,与s相等

分三种情况判断,用i和j双指针遍历s串和t串:

  1. len(s) = len(t),统计不同字符的个数cnt,若cnt>1则不"相等"
  2. len(s) = len(t) + 1 ,统计不同字符的个数cnt,遇到不同字符时t的指针向后走,s的指针不动,最后cnt>1则不"相等"
  3. len(s) + 1 = len(t) ,统计不同字符的个数cnt,遇到不同字符时s的指针向后走,t的指针不动,最后cnt>1则不"相等"

当然两字符串的长度相差超过1,直接不"相等",不同进行上面的判断

代码

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

typedef pair<int, int> PII;
typedef long long LL;
typedef unsigned long long ULL;
const int inf = 2e9 + 10;
const LL INF = 4e18 + 10;
const int mod9 = 998244353;
const int mod7 = 1e9 + 7;
const int N = 2e5 + 10;
string t; int n; 

bool check(string& s)
{
    if (abs((int)t.size() - (int)s.size()) > 1) return false;
    int cnt = 0;
    if (t.size() == s.size())
    {
        for (int i = 0; i < t.size(); ++ i)
        {
            if (t[i] != s[i]) cnt ++ ;
        }
    }
    else if (t.size() + 1 == s.size())
    {
        int i = 0, j = 0;
        while (i < t.size() && j < s.size())
        {
            if (t[i] != s[j]) j ++ , cnt ++ ;
            else ++ i, ++ j;
        }
    }
    else if (t.size() == s.size() + 1)
    {
        int i = 0, j = 0;
        while (i < t.size() && j < s.size())
        {
            if (t[i] != s[j]) i ++ , cnt ++ ;
            else ++ i, ++ j;
        }
    }
    if (cnt > 1) return false;
    return true;
}

void solve()
{
    vector<int> ans;
    cin >> n >> t;
    for (int i = 1; i <= n; ++ i)
    {
        string s; cin >> s;    
        if (check(s)) ans.push_back(i);
    }
    cout << ans.size() << "\n";
    for (auto t : ans) cout << t << ' ';
}

int main()
{
    ios::sync_with_stdio(false), cin.tie(0),cout.tie(0);
    solve();
    return 0;
}

D - Square Permutation

D - Square Permutation (atcoder.jp)

题面

image.png

题面翻译与思路

以字符串的形式给你一个整数x,将x的每一位看成独立的数字进行全排列,如"123"的全排列为:123,132,213,231,312,321(吐槽下题目给的公式太抽象了)
问这些全排列中,有几个数可以表示为某个数的平方(sqrt运算的结果为整数)?

反着考虑,枚举平方数( 1 2 1^2 12, 2 2 2^2 22, 3 2 3^2 32…),判断该平方数是否为x的全排列
如何判断?计算平方数的每个数字的出现次数(112中,1出现2次,2出现1次),判断平方数的19出现次数为x的19出现次数是否相等(可以证明,不用考虑0的出现次数)
假设x为4位数,当平方数大于9999时就不需要枚举下去了

注意特判x为0的情况,0的平方为0,所以应该输出1

代码

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

typedef long long LL;
int cnt[20];

void solve()
{
    int n; string s; cin >> n >> s;
    if (s == "0") { cout << 1; return; }
    for (auto t : s) cnt[t - '0'] ++ ;
    LL ans = 0;
    for (LL i = 1; i * i <= pow(10, s.size()) - 1; ++ i)
    {
        LL b = i * i;
        LL t = i * i;
        int tmp[20] = {0};
        while (t) 
        {
            tmp[(t % 10)] ++ ;
            t /= 10;
        }
        bool flag = true;
        for (int i = 1; i <= 9; ++ i) 
            if (cnt[i] != tmp[i])
            {
                flag = false;
                break;
            }
            
        if (flag) ans ++ ;
    }
    cout << ans << "\n";
}

int main()
{
    ios::sync_with_stdio(false), cin.tie(0),cout.tie(0);
    solve();
    return 0;
}

E - Joint Two Strings

E - Joint Two Strings (atcoder.jp)

题面

image.png

题面翻译与思路

给定t和一组字符串strs,选择strs中的两个字符串进行拼接,问有多少个拼接后的字符串满足条件:其子序列和t相等

两个字符串的拼接,很容易想到预处理前后缀。若一个字符串的子序列包含了t的前缀,一个字符串的子序列包含了t的后缀,且长度相加大于t的长度,那么这两个字符串的拼接就是满足题意的
所以对于strs中的每个字符串str,预处理str的两个"最长子序列"的长度,这两个"子序列"分别需要与t的前缀和后缀相等并且最长

如:t = bac, str = abba
一个最长子序列为"ba",该子序列与t的前缀"ba"相等并且最长(t的前缀为"“,“b”,“ba”,“bac”)
另一个最长子序列为”“,该子序列与t的后缀”“相等并且最长(t的后缀为”",“c”,“ca”,“cab”)

开pre和suf两个一维数组分别记录第i个str的两个最长子序列长度
再开一个一维数组scnt记录:strs中,与t后缀相等的最长子序列,长度i的出现次数,如scnt[5] = 3表示strs中,与t后缀相等且长度为5的最长子序列出现了3次
对scnt进行后向求和,即一个str包含了长度为m且与t后缀相等的子序列,那么一定包含长度为[0, m]且与t后缀相等的子序列
如果一个str包含了长度为m且与t前缀相等的子序列,那么与满足以下条件的字符串拼接,答案+1:包含长度大于等于t.size() - m且与t后缀相等的子序列
那么,线性遍历pre数组即可求出答案

代码

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

typedef long long LL;
const int N = 5e5 + 10;
int pre[N], suf[N], scnt[N];

void solve()
{
    int n; string t; cin >> n >> t;
    for (int k = 1; k <= n; ++ k)
    {
        string s; cin >> s;
        int i, j;
        for (i = 0, j = 0; i < s.size() && j < t.size(); ++ i) if (s[i] == t[j]) ++ j ;
        pre[k] = j;
        for (i = s.size() - 1, j = t.size() - 1; i >= 0 && j >= 0; -- i) if (s[i] == t[j]) -- j ;
        suf[k] = t.size() - j - 1;
        scnt[suf[k]] ++ ;
    }
    for (int i = t.size() - 1; i >= 0; -- i) scnt[i] += scnt[i + 1];
    LL ans = 0;
    for (int i = 1; i <= n; ++ i) ans += scnt[t.size() - pre[i]];
    cout << ans << "\n";
}

int main()
{
    ios::sync_with_stdio(false), cin.tie(0),cout.tie(0);
    solve();
    return 0;
}

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

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

相关文章

ros学习笔记(二)Vscode中使用Romote远程开发调试Ros2环境

首先&#xff0c;成功安装ros2环境&#xff0c;参考官方文档中的教程&#xff0c;能用运行出来此处的代码 Writing a simple publisher and subscriber (Python) — ROS 2 Documentation: Iron documentation 下载vscode&#xff0c;进行远程开发&#xff0c;具体参考&#xf…

Python学习基础笔记七十一——模块和库2

将模块放入包中 模块文件&#xff0c;功能分的比较清晰。文件与文件之间&#xff0c;是通过import这种调用关系。 当我们的项目模块文件特别多的时候&#xff0c;我们还需要将这些模块文件根据功能划分到不同的目录中。 这些放模块文件的目录&#xff0c;python把它们称之为p…

基于springboot实现在线blog博客平台系统项目【项目源码+论文说明】

基于springboot实现在线blog博客平台系统演示 摘要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#x…

【ALO-BP预测】基于蚁狮算法优化BP神经网络回归预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【操作系统】磁臂黏着现象

文章目录 什么是磁臂黏着&#xff1f;为什么 FCFS&#xff08;First Come First Service&#xff09; 可以避免磁臂黏着&#xff1f;为什么 scan&#xff0c;cscan 会产生磁臂黏着&#xff1f;为什么 NsetpScan 可以避免磁臂黏着&#xff1f;NScan 原理简介NScan 避免磁臂黏着的…

RT-Thread学习笔记(一):认识RT-Thread系统

认识RT-Thread系统 为什么选择RT-Thread系统RTOS 对比 裸机开发优势劣势 RT-Thread与其他RTOS系统对比 RT-Thread 简介RT-Thread系统架构官网学习资料 为什么选择RT-Thread系统 RTOS 对比 裸机开发 优势 调度算法可以最大程度的保证系统实时性低耦合、模块化、结构更清晰 劣…

软件著作申请流程笔记

1.登录中国版权保护中心&#xff0c;有账号的直接登记。没有的注册 2.选择软著 3.需要实名认证 4.填写三个模板&#xff0c;上传即可 4.1软著采集表 4.2使用手册 就是对如何使用产品&#xff0c;凑够十页即可&#xff08;注意申请的图片需要二次加工&#xff0c;模糊真实客户…

2023-10-11 python-windows平台-安装-记录

摘要: 2023-10-11 python-windows平台-安装-记录 python: Download Python | Python.org 必须安装pip必要的话&#xff0c;就把所有的选项内容都装上 Microsoft C Build Tools 下载地址: Microsoft C Build Tools - Visual Studio 安装原因: 如果不安装的话, 使用pip安装模块…

SystemVerilog Assertions应用指南 第一章(1.28章节 内建的系统函数)

SVA提供了几个内建的函数来检查一些最常用的设计条件。 $onehot(expression)—检验表达式满足“one-hot”,换句话说,就是在任意给定的时钟沿,表达式只有一位为高。 $onehot0( expression)—检验表达式满足“ zero one-hot”&#xff0c;换句话说,就是在任意给定…

特殊电脑数据恢复软件EasyRecovery2024

俗话说&#xff1a;工欲善其事&#xff0c;必先利其器。我们平时应该熟练掌握集中磁盘诊断工具的使用方法&#xff0c;这样当遇到磁盘故障时才不至于晕头转向、手忙脚乱。那么磁盘诊断工具应具备哪些功能呢&#xff1f;它能够轻松搞定数据恢复&#xff0c;恢复丢失和删除的文件…

推荐《终末的女武神》

梅村真也原作&#xff0c;アジチカ作画的漫画作品 终末的女武神 播报编辑讨论2上传视频 《终末的女武神》&#xff08;终末のワルキューレ&#xff09;是梅村真也原作、アジチカ作画、フクイタクミ负责脚本的漫画作品&#xff0c;于德间书店旗下杂志《月刊COMIC ZENON》上发表…

解决Drag and drop is not supported导致无法将物理机上的文件拖入Ubuntu

问题起因 因为需要拷贝一个文件从物理机到虚拟机&#xff0c;但是我又不想用有关ftp的程序或者协议&#xff0c;但是直接拖又报错Drag and drop is not supported&#xff0c;索性上网查询了一下解决方法&#xff0c;自己记录一下。 解决方法 安装下面两个程序 sudo apt in…

【超详细】win10安装docker

win10安装docker 因为要在win10复现一个CVE漏洞&#xff0c;需要用到docker所以特地自己亲自安装了一下&#xff0c;其实在win10上安装docker与在Linux上面的原理一致&#xff0c;都是将docker安装在虚拟机里&#xff0c;不同的是win10是安装在Hyper-V虚拟机上的&#xff0c;需…

Python学习基础笔记六十九——文本2

二进制&#xff08;字节&#xff09;模式&#xff1a; 文本文件&#xff0c;纯文本文件就是保存文本字符串的文件&#xff0c;跟word还不一样&#xff0c;word是富文本文件。 其实就文件存储的底层来说&#xff0c;不管什么类型的文件&#xff08;文本、视频、图片、word、Ex…

Mac安装Kali保姆级教程

Mac安装Kali保姆级教程 其他安装教程&#xff1a;使用VMware安装系统Window、Linux&#xff08;kali&#xff09;、Mac操作系统 1 虚拟机安装VM Fusion 去官网下载VM Fusion 地址&#xff1a;https://customerconnect.vmware.com/en/evalcenter?pfusion-player-personal-13 …

基于springboot实现心灵治愈心理健康平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现心灵心理健康平台系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个心灵治愈交流平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论…

Python爬虫selenium安装谷歌驱动解决办法

驱动下载链接&#xff1a;CNPM Binaries Mirror (npmmirror.com) 谷歌浏览器老版本下载&#xff1a;Google Chrome 64bit Windows版_chrome浏览器,chrome插件,谷歌浏览器下载,谈笑有鸿儒 (chromedownloads.net) 驱动下载后解压缩直接放入python相应文件夹&#xff1a; 最后&a…

springboot+java+vue毕业生学习交流平台g1el1

决定开发系统选择B/S模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问&#xff0c;采用的主流的Java语言这种面向对象的语言进行毕业生交流学习平台程序的开发&#xff0c;在数据库的选择上面&#xff0c;选择功能强大的MySQL数据库进行数…

MAKEFLAGS += -rR --include-dir=$(CURDIR)的含义

一、目的 在看uboot顶层Makefile文件时遇到这个代码不甚明白&#xff0c;故查找了一下资料以供大家学习 二、介绍 MAKEFLAGS -rR 表示禁止使用内置的隐含规则和变量定义&#xff1b;这个选项用于启用recursive make&#xff0c;使得Makefile目标可以调用其他Makefile目标&…

记一次排查线上OOM详细过程和解决思路

文章目录 OOM起因排查过程 OOM起因 前言声明&#xff1a;本人菜鸟一枚&#xff0c;如有地方描述不当望谅解&#xff0c;毕竟本人身处某十八线小城市三十六线小公司。 国庆节前头给项目换了套参数加解密方式&#xff0c;换完之后服务时不时就会出现如下报错&#xff0c;服务停…