算法训练第二周题解汇总

news2024/11/20 2:25:05

A - AABCC

[ABC300D] AABCC - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

大意:

 题解: 就是纯暴力题,由于 a<b<c,所以a^{5}≤N,a<500;c^{2}<=N,c<10^{6}。先用埃筛预处理,然后枚举的时候剪枝

import java.util.Arrays;
import java.util.Scanner;

/*
 *@filename: Main
 *@author: lyh
 *@date:2023/5/3 10:26
 *@version 1.0
 *@description TODO
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long n = scanner.nextLong();
        int[] book = new int[1000001];
        Sieve(book);//预处理
        long ans = 0;
        for (int a = 2; a < 500; a++) {
            if (book[a] == 1) {
                continue;
            }
            if((long) a *a*a*a*a>n)break;
            for (int b = a + 1; b < 1000000; b++) {
                if (book[b] == 1) {
                    continue;
                }
                if((long) a *a*b*b*b>n)break;
                for (int c = b + 1; c < 1000000; c++) {
                    if (book[c] == 1) {
                        continue;
                    }
                    long value = (long)a * a * b * c * c;
                    if (value <= n) {
                        ans++;
                    } else {
                        break;
                    }
                }
            }
        }
        System.out.println(ans);
    }

    public static void Sieve(int[] book) {//埃筛
        Arrays.fill(book, 0);
        for (int i = 2; i * i <= 1000000; i++) {
            if (book[i] == 0) {
                for (int j = i * i; j <= 1000000; j = j + i) {
                    book[j] = 1;
                }
            }
        }
    }
}

B - Same Map in the RPG World

[ABC300B] Same Map in the RPG World - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

大意:

题解: 因为H、W的范围都比较小,所以可以暴力解决,时间复杂度O(H^2W^2)。因为是循环的,所以我在构造矩阵的时候,将左右连通,上下连通(取余也可以)。将左上角的第一个点看成矩阵的起点,每移动一次就比较是否与矩阵B相等。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/*
 *@filename: Main
 *@author: lyh
 *@date:2023/5/3 10:26
 *@version 1.0
 *@description TODO
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int h=scanner.nextInt();
        int w=scanner.nextInt();
        List<String> list1=new ArrayList<>();
        for(int i=0;i<h;i++){
            String s=scanner.next();
            s=s+s;//左右连通
            list1.add(s);
        }
        for(int i=0;i<h;i++){//上下连通
            list1.add(list1.get(i));
        }
        List<String> list2=new ArrayList<>();
        for(int i=0;i<h;i++){
            String s=scanner.next();
            list2.add(s);
        }
        for(int i=0;i<h;i++){
            for(int j=0;j<w;j++){
                if(check(i,j,list1,list2,h,w)){
                    System.out.println("Yes");
                    return;
                }
            }
        }
        System.out.println("No");
    }
    public static boolean check(int i,int j,List<String>list1,List<String>list2,int h,int w){
        boolean flag=true;
        //以i,j为起点的矩阵,循环遍历与第二个矩阵相比较
        for(int a1=i,a2=0;a1<i+h;a1++,a2++){
            for(int b1=j,b2=0;b1<j+w;b1++,b2++){
                if(list1.get(a1).charAt(b1)!=list2.get(a2).charAt(b2)){
                    flag=false;
                    return flag;
                }
            }
        }
        return flag;
    }
}

C - Cross

[ABC300C] Cross - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

大意:

题解:看数据范围比较小,这题也能直接暴力。遍历矩阵,一旦遇到一个'#',就以他为中心搜索它的周围,看他是否能够成一个十字架,取最长的长度。题目保证不会有两个十字架之间共享一个角的情况出现

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/*
 *@filename: Main
 *@author: lyh
 *@date:2023/5/3 10:26
 *@version 1.0
 *@description TODO
 */
public class Main {
    private static final int[][] next={{1,1},{-1,-1},{-1,1},{1,-1}};
    private static int h;
    private static int w;
    public static void main(String[] args) {

        Scanner scanner=new Scanner(System.in);
        h=scanner.nextInt();
        w=scanner.nextInt();
        int lenth=Math.min(h,w);
        int[] ans=new int[lenth+1];
        List<String>list=new ArrayList<>();
        for(int i=0;i<h;i++){
            String s=scanner.next();
            list.add(s);
        }
        for(int i=0;i<h;i++){
            for(int j=0;j<w;j++){
                if(list.get(i).charAt(j)=='#'){
                    int size=get(i,j,list);
                    ans[size]++;
                }
            }
        }
        for(int i=1;i<=lenth;i++){
            System.out.print(ans[i]+" ");
        }
        System.out.println();
    }
    public static int get(int i,int j,List<String>list){
        int size=1;
        while(true){
            for(int a=0;a<4;a++){
                int dx=i+next[a][0]*size;
                int dy=j+next[a][1]*size;
                if(dx<0||dy<0||dx>=h||dy>=w||list.get(dx).charAt(dy)=='.'){
                    return size-1;
                }
            }
            size++;
        }
    }
}

D - Find by Query  

[ABC299D] Find by Query - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

大意:

因为本题是一个交互题,交互格式如下:

题解:题目说最多问20个问题,为什么限定在这个数字呢?实际上容易发现这个数差不多是log n级别的,我们首先想到二分做法。

因为这个序列只有两种数字,0 或 1。不难发现,假如有一段区间S(left),S(left)+1​,S(left)+2​……S(right),只要 S(left) =S(right)​,那么无论中间是什么数,总会找到答案。而题目给出S1=0和Sn​=1,首先把 l 指针指向第一个位置,r 指针指向最后一个位置。接下来我们要做的是维护这两个指针并时刻满足 S(l)​=0 且S(r) =1。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int left=1,right=n;
        while(left+2<=right){//left和right存在≤1个元素时
            int mid=(left+right)>>1;
            System.out.println("?"+mid);
            String midEle=scanner.next();
            if(midEle.charAt(0)=='0')left=mid;
            else right=mid;
        }
        System.out.println("!"+left);
    }
}

E - Dango 

[ABC299C] Dango - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

大意:

题解:非常简单的一个题,遍历一遍字符串,当碰到 '-' 时就分别向前、向后搜索 'o',不断取最大值。


import java.util.Scanner;

/*
 *@filename: Test
 *@author: lyh
 *@date:2023/5/7 9:28
 *@version 1.0
 *@description TODO
 */
public class Main{
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        String s=scanner.next();
        int ans=-1;
        for(int i=0;i<n;i++){
            if(s.charAt(i)=='-'){
                int index=i-1,onum=0;
                while(index>=0&&s.charAt(index)=='o'){
                    onum++;
                    index--;
                }
                if(onum>0)ans=Math.max(onum,ans);
                index=i+1;
                onum=0;
                while(index<n&&s.charAt(index)=='o'){
                    onum++;
                    index++;
                }
                if(onum>0)ans=Math.max(onum,ans);
            }
        }
        System.out.println(ans);
    }
}

F - Cards Query Problem 

[ABC298C] Cards Query Problem - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

大意:

题解:很简单的模拟题,没什么好说的 

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int q = scanner.nextInt();
        List<List<Integer>>list=new ArrayList<>(n+1);//盒子的集合,盒子里存着数字
        for(int i=0;i<=n;i++)list.add(new ArrayList<>());
        HashMap<Integer,TreeSet<Integer>>map=new HashMap<>();//key为数字,value为所在盒子的有序集合
        for(int a=0;a<q;a++){
            int op=scanner.nextInt();
            switch (op){
                case 1:
                    int i=scanner.nextInt();
                    int j=scanner.nextInt();
                    list.get(j).add(i);
                    if(!map.containsKey(i)){
                        TreeSet<Integer>value=new TreeSet<>();
                        value.add(j);
                        map.put(i,value);
                    }
                    map.get(i).add(j);
                    break;
                case 2:
                    i=scanner.nextInt();
                    List<Integer>box=list.get(i);
                    Collections.sort(box);
                    for (Integer e:box) {
                        System.out.print(e+" ");
                    }
                    System.out.println();
                    break;
                case 3:
                    i=scanner.nextInt();
                    TreeSet<Integer>box2=map.get(i);
                    for(Integer e:box2){
                        System.out.print(e+" ");
                    }
                    System.out.println();
                    break;
            }

        }
    }
}

H - Writing a Numeral 

[ABC298D] Writing a Numeral - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 

大意:

 

题解:

import java.util.*;

public class Main {
    private static final int mod=998244353;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Long>list=new LinkedList<>();
        list.add(1L);
        long value=1;
        int q=scanner.nextInt();
        for(int i=0;i<q;i++){
            int op=scanner.nextInt();
            switch (op){
                case 1:
                    long x=scanner.nextLong();
                    list.add(x);
                    value=(value*10%mod+x)%mod;
                    break;
                case 2:
                    value=(mod+(value-pow(list.size()-1)*list.get(0))%mod)%mod;//防止value为负,特别注意在加上mod之前还要取模一次,因为很可能加上一次后还是负的,所以要先取模
                    list.remove(0);
                    break;
                case 3:
                    System.out.println(value%mod);
                    break;
            }
        }
    }
    public static long pow(int num){//快速幂,这里需要用long,因为很可能会出现两个大质数相乘超int
        long result=1,base=10;
        while (num>0){
            if(num%2==1)result=result*base%mod;
            num/=2;
            base=base*base%mod;
        }
        return result;
    }
}

 

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

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

相关文章

hutool工具

目录 官网 简介 pom.xml EscapeUtil使用 HttpRequest使用 官网 Hutool参考文档 简介 Hutool 是一个小而全的 Java工具类库&#xff0c;通过静态方法封装&#xff0c;降低相关API的学习成本&#xff0c;提高工作效率&#xff0c;涵盖了Java开发开发中的方方面面 使用 Hu…

Java入门指南:从零开始的基础语法

java语言概述 Java是一种高级编程语言&#xff0c;最初由Sun Microsystems&#xff08;现在是Oracle Corporation的一部分&#xff09;在1995年推出。Java以其简单、可移植和安全的特性而闻名&#xff0c;并广泛用于各种应用程序开发&#xff0c;从桌面应用程序到移动应用程序和…

Linux如何卸载或者删除docker

1.查看当前docker状态: systemctl status docker 2.如果是运行状态则停掉: systemctl stop docker 3.查看yum安装的docker文件包: yum list installed |grep docker ​ 删除所有安装的docker文件包 yum -y remove docker.x86_64 其他的docker相关的安装包同样删除操作&#xf…

国内GPU渲染农场有哪些值得推荐?

GPU凭借它在图形渲染领域强大的架构和计算能力&#xff0c;给广大用户带来了一种更为高效的解决方案&#xff0c;我们启用GPU渲染加速&#xff0c;实际就是调用GPU加速图形的渲染和填充。既然聊到GPU渲染&#xff0c;CG行业的朋友们肯定也好奇国内值得推荐的GPU渲染农场有哪些&…

【C++】-类和对象之日期类的具体实现(中)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点…

企业数字化转型的五个常见问题以及回答

数字化、数字化转型其实并不是新的概念&#xff0c;早在十年前就提出来了&#xff0c;但近两年才开始真正走向公众视野。由于概念的泛滥与传统信息化的双重叠加影响&#xff0c;多数企业存在认知上的诸多困扰。 数字化转型为何成为当前热点&#xff1f; 什么是数字化转型&…

云渲染可以渲动画吗?

云渲染可以渲动画吗&#xff1f; 首先我来回答你这个问题&#xff0c;云渲染当然可以渲动画啦&#xff01;像2022年暑期档最火的动画电影《新神榜&#xff1a;杨戬》就是在云渲染的支持下才能准时上线跟大家见面的哦&#xff01; Renderbus瑞云渲染和追光动画也是老朋友了&…

Android Jetpack Compose的附带效应

Android Jetpack Compose的附带效应 Jetpack Compose 是许多开发人员的首选&#xff0c;因为它具有有趣、简单、有效和直接的特性&#xff0c;并且能够轻松地以声明方式构建自定义组件。但是&#xff0c;要充分利用其功能&#xff0c;重要的是要很好地掌握副作用和效果处理程序…

十六、Java数据结构与算法 - 图

文章目录 一、图的基本介绍1.1 为什么要有图1.2 图的举例说明1.3 图的常用概念 二、图的表示方式2.1 邻接矩阵2.2 邻接表 三、图的快速入门案例四、图的遍历4.1 深度优先遍历DFS4.1.1 基本思想4.1.2 算法步骤4.1.3 图示 4.2 广度优先遍历BFS4.2.1 基本思想4.2.2 算法步骤4.2.3 …

Segment Anything模型部分结构和代码解析

0x0. 前言 上个月Meta提出的Segment Anything Model&#xff08;SAM&#xff09;希望在视觉领域通过Prompt基础大模型的套路来解决目标分割的问题。经过实测&#xff0c;在大多数场景中SAM的表现都足够惊艳&#xff0c;并且基于SAM的各种二创工作也爆发了比如 检测一切的Groun…

Prometheus监控报警-web,域名,端口, 钉钉版本

Prometheus监控报警-web&#xff0c;域名&#xff0c;端口&#xff0c; 钉钉版本 采用文章 https://www.yuque.com/youngfit/qok2pe/nypstd#616a2e58https://www.jianshu.com/p/eae67b770c3ehttps://blog.csdn.net/Sebastien23/article/details/113645177https://www.cnblogs…

Unix套接字(UDS,Unix Domain Socket)

【知识简介】 在​​Linux​​系统中&#xff0c;有很多进程间通信方式&#xff0c;套接字&#xff08;Socket&#xff09;就是其中的一种。但传统的套接字的用法都是基于TCP/IP协议栈的&#xff0c;需要指定IP地址。如果不同主机上的两个进程进行通信&#xff0c;当然这样做没…

BEVFusion A Simple and Robust LiDAR-Camera Fusion Framework 论文学习

论文地址&#xff1a;BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework 论文学习 Github 地址&#xff1a;BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework 论文学习 1. 解决了什么问题&#xff1f; 将相机和 LiDAR 融合已经成为 3D 检测任务事…

【MySQL】数据库的增删改查二:CURD

目录 ​ 需要知道 &#x1f31f;一、增加数据 &#x1f308;1、语法 &#x1f308;2、单行数据&#xff0c;全列插入 &#x1f308;3、多行数据&#xff0c;全列插入 &#x1f31f;二、查询数据 &#x1f308;1、全列查询 &#x1f308;2、指定列查询 &#…

Nacos集群部署配置Nginx负载均衡

Nacos集群部署配置Nginx负载均衡 1|新建nacos文件夹 mkdir nacos 新建文件夹 cd nacos 进入文件夹2|下载Nacos安装包&#xff08;前提是云服务器&#xff0c;有网。也可以在windows下载好再上传&#xff09; wget https://github.com/alibaba/nacos/releases/download/2…

新品发布 | 12通道CAN FD转USB接口卡全新上市!

新品发布 ON 05.05 TC1018是同星智能开发的一款12路CAN FD总线转USB接口卡&#xff0c;配合我们的TSMaster软件可以监控、分析和仿真CAN FD总线数据。广泛应用于汽车、工业、特种机械和其他行业&#xff0c;用于CAN总线测试与分析、UDS诊断和ECU刷写等方面。 TC1018-产品简介…

weka3.8.6的安装与使用

目录 背景 一、安装 二、使用explorer 1. 介绍 2.打开自带的数据集(Preprocess) 1.打开步骤 2.查看属性和数据编辑 3.classify 4.Cluster 5.Associate 6.Select attributes 7.Visualize 待补充 背景 Weka的全名是怀卡托智能分析环境&#xff08;Waikato Environme…

进程调度/页面置换/磁盘调度算法

进程调度算法 进程调度算法也称 CPU 调度算法&#xff0c;毕竟进程是由 CPU 调度的。 当 CPU 空闲时&#xff0c;操作系统就选择内存中的某个「就绪状态」的进程&#xff0c;并给其分配 CPU。 什么时候会发生 CPU 调度呢&#xff1f;通常有以下情况&#xff1a; 当进程从运…

AIGC:【LLM(二)】——LangChain:由LLMs驱动的应用开发框架

文章目录 一.背景介绍二.LangChain简介2.1 常见应用场景 三.LangChain特点3.1 优点3.2 不足 四.LangChain功能4.1 基础功能4.2 功能模块4.2.1 LLM和Prompts4.2.2 Chain4.2.3 Agent4.2.4 Memory4.2.5 Embedding4.2.6 Models4.2.7 Indexes 五.实战案例5.1 背景需求5.2 数据准备5.…

抖音seo矩阵系统源码是什么?

抖音SEO矩阵系统源码是一款功能强大的营销工具&#xff0c;能够帮助用户进行抖音视频的SEO优化&#xff0c;使其在抖音平台上获得更高的曝光度和流量。该系统结合了SEO的相关算法和技巧&#xff0c;提供了完整的优化方案&#xff0c;可帮助用户提高视频的曝光率、获得更多的点赞…