AcWing第98和99周赛

简介: AcWing第98和99周赛

第98场周赛

竞赛 - AcWing

1、大整数

4947. 大整数 - AcWing题库

题目

给定两个整数 n,k。

请你输出一个 n 位数,要求其各位数字均为 k。

输入格式

共一行,包含两个整数 n,k。

输出格式

一个整数,表示满足要求的 n位数。

数据范围

前三个测试点满足 1≤n≤3。

所有测试点满足 1≤n≤100,1≤k≤9。

输入样例:

3 2

输出样例:

222

简单题直接看代码吧!

代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int k=sc.nextInt();
        for (int i=0;i<n;i++){
            System.out.print(k);
        }
    }
}

2、大乘积

4948. 大乘积 - AcWing题库

题目

我们规定,如果一个非负整数 a 满足以下两个条件之一,则称 a为美丽数:


a=0

a=10ˣ,其中 x为任意非负整数。

给定 n 个非负整数 a1,a2,…,an这其中有至少 n−1 个数是美丽数。


请你计算并输出 a1×a2×…×an的结果。


输入格式


第一行包含整数 n。


第二行包含 a1,a2,…,an。


输出格式


共一行,输出一个不含前导 00 的整数,表示 a1×a2×…×an 的结果。


前 3 个测试点满足 1≤n≤5。


所有测试点满足 1≤n≤10⁵,a1∼an 均为不含前导 00 的非负整数,并且这 n个数的总长度不超过 10⁵。


输入样例1:

3
5 10 1

输出样例1:

50

输入样例2:

4
1 1 10 11

输出样例2:

110

输入样例3:

5
0 3 1 100 1

输出样例3:

0

解题思路

10⁵个数相乘,建议使用BigInteger,直接暴力就完事了,不熟悉BigInteger可以看看下面这篇文章

代码

import java.math.BigInteger;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        BigInteger sum=new BigInteger("1");
        BigInteger x=new BigInteger("1");
        while (n-->0){
            x=sc.nextBigInteger();
            sum=sum.multiply(x);
        }
        System.out.println(sum);
    }
}

3、末尾连续0

4949. 末尾连续0 - AcWing题库

题目

给定一个正整数 m,请你统计一共有多少个正整数 n 满足,n 的阶乘的末尾连续 0 的数量恰好为 m。


输出满足条件的 n 的数量以及所有满足条件的 n。


例如,当 m=1时,满足条件的正整数 n共有 55 个,分别是 5,6,7,8,95,6,7,8,其中 5!=120,6!=720,7!=5040,8!=40320,9!=3628805!=120,6!=720,7!=5040,8!=40320,


9!=362880。


输入格式


共一行,一个正整数 m。


输出格式


如果存在满足条件的 n,则第一行输出满足条件的 n 的数量,第二行按从小到大的顺序输出所有满足条件的 n。如果不存在满足条件的 n,则输出一行 0 即可。


数据范围


前 55 个测试点满足 1≤m≤10。

所有测试点满足 1≤m≤10⁵。


输入样例1:

1

输出样例1:

 5
 5 6 7 8 9

输入样例2:

5

输出样例2:

0

解题思路

5!=120, 10!=3628800, 15!=1307674368000,20!=2432902008176640000

25!=15511210043330985984000000

阶乘后面有几个零就是看这个阶乘里面有多少个5,25!里有6个五5,2*5=10,3*5=15,4*5=20,5*5=25。

代码

import java.util.Scanner;
public class Main {
    public static int calc(int x)
    {
        int res = 0;
        while (x!=0){
            res += x / 5;
            x /= 5;
        }
        return res;
    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int m=sc.nextInt();
        for (int i = 0; i <= 5e5; i += 5 )
            if (calc(i) == m)
            {  System.out.println(5);
                System.out.println(i+" "+(i+1)+" "+(i+2)+" "+(i+3)+" "+(i+4));
                return;
            }
            else if (calc(i) > m)
                break;
        System.out.println(0);
    }
}


第99场周赛

竞赛 - AcWing

1、四则运算

AcWing 4950. 四则运算 - AcWing

题目

给定三个整数 a,b,c,请你计算并输出 (a×b)/(b+c) 的值。


输入格式


共一行,包含三个整数 a,b,c。


输出格式


一个实数,表示结果。


结果保留四位小数。


数据范围


所有测试点满足 1≤a,b,c≤1000。


输入样例1:

100 50 50

输出样例1:

50.0000

输入样例2:

199 60 40

输出样例2:

119.4000


import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        int b=sc.nextInt();
        int c=sc.nextInt();
        System.out.printf("%.4f",(double)(a*b)/(b+c));
    }
}

2、整理账本

4951. 整理账本 - AcWing题库

题目

账本中记录了一种产品的 n条买卖记录。

记录分为两种,格式如下:

B p q,表示以 p 元/件的价格,买入 q 件该种商品。

S p q,表示以 p 元/件的价格,卖出 q 件该种商品。

任何卖出记录的交易价格都高于任何买入记录的交易价格。


也就是说,不会存在卖出记录和买入记录的交易价格相同的情况。


现在,请你对账本进行整理,对所有交易价格相同的记录进行合并,使得每个交易价格只存在一条记录,新记录的交易数量等于所有参与合并的旧记录的交易数量之和。


具体来说,如果账本中有 k 条记录的交易价格为 p,它们的交易数量分别为 q1,q2,…,qk,则将它们合并为一条新记录,新记录的交易价格仍为 p,交易数量为 q1+q2+…+qk。


注意:


合并为新记录后,参与合并的旧记录就从帐本中抹除了。

新纪录的交易类型(买入或卖出)保持不变,即与参与合并的旧记录保持一致。

不会存在卖出记录和买入记录的交易价格相同的情况。

整理完毕后,对于现有的所有记录,请你找到其中交易价格最低的 s 条卖出记录和交易价格最高的 s 条买入记录。


输入格式


第一行包含两个正整数 n,s。


接下来 n 行,每行包含一个记录,格式如题目描述。


输出格式


首先,按照交易价格从高到低的顺序,输出交易价格最低的 s 条卖出记录,每行一条,格式与输入相同。如果不足 s 条,则有多少输出多少。


然后,按照交易价格从高到低的顺序,输出交易价格最高的 s 条买入记录,每行一条,格式与输入相同。如果不足 s 条,则有多少输出多少。


数据范围


前 4 个测试点满足 1≤n≤6。

所有测试点满足 1≤n≤1000,1≤s≤50,0≤p≤10⁵,1≤q≤10⁴。


输入样例:

6 2
B 10 3
S 50 2
S 40 1
S 50 6
B 20 4
B 25 10

输出样例

S 50 8
S 40 1
B 25 10
B 20 4

解题思路

典型的HashMap题目,使用两个HashMap分别存储 买入和卖出记录,并都按照 交易价格从高到低进行排序。输出交易价格 最低的 s 条 卖出记录和交易价格 最高的 s 条 买入记录。

代码

import java.security.KeyStore;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String l=sc.nextLine();
        int n= Integer.parseInt(l.split(" ")[0]);
        int s= Integer.parseInt(l.split(" ")[1]);
        LinkedHashMap<Integer,Integer> mapS=new LinkedHashMap<>();
        LinkedHashMap<Integer,Integer> mapB=new LinkedHashMap<>();
        //输入添加进对应的LinkedHashMap
        while (n-->0){
            String S=sc.nextLine();
            String[] ss=S.split(" ");
            if (ss[0].equals("B")){
                mapB.put(Integer.valueOf(ss[1]),mapB.getOrDefault(Integer.parseInt(ss[1]),0)+Integer.parseInt(ss[2]));
            }else if (ss[0].equals("S")){
                mapS.put(Integer.valueOf(ss[1]),mapS.getOrDefault(Integer.parseInt(ss[1]),0)+Integer.parseInt(ss[2]));
            }
        }
        //按要求进行排序
        ArrayList<Map.Entry<Integer, Integer>> listS = new ArrayList<>(mapS.entrySet());
        listS.sort((o1, o2) -> o2.getKey() - o1.getKey());
        ArrayList<Map.Entry<Integer, Integer>> listB = new ArrayList<>(mapB.entrySet());
        listB.sort((o1, o2) -> o2.getKey() - o1.getKey());
        //按要求进行输出
        Iterator<Map.Entry<Integer, Integer>> iter = listS.iterator();
        int i=0;
        while(iter.hasNext()){
            Map.Entry<Integer, Integer> item = iter.next();
            if (i>=mapS.size()-s){
                int key = item.getKey();
                int value = item.getValue();
                System.out.println("S "+key+" "+value);
            }
            i++;
        }
        Iterator<Map.Entry<Integer, Integer>> iter1 = listB.iterator();
        i=s;
        while(iter1.hasNext()){
            Map.Entry<Integer, Integer> item = iter1.next();
            if (i==0)
                break;
            int key = item.getKey();
            int value = item.getValue();
            System.out.println("B "+key+" "+value);
            i--;
        }
    }
}

3、扩展区间

4952. 扩展区间 - AcWing题库

题目

给定 n个区间,编号 1∼n。

其中,第 i 个区间为 [xi,xi]。


初始时,任意两个区间的交集为空。


对于每个区间,你都可以选择一个方向(向左或向右)对其进行扩展,当然也可以选择不对其进行扩展。每个区间最多只能扩展一次。


第 i 个区间的固定扩展长度为 lᵢ。


具体来说,对于第 i 个区间,你有三个选择:


具体来说,对于第 i 个区间,你有三个选择:


如果你选择使其向左扩展,那么它变为 [xᵢ−lᵢ,xᵢ]。

如果你选择使其向右扩展,那么它变为 [xᵢ,xᵢ+lᵢ]。

如果你选择不对其进行扩展,那么它仍保持 [xᵢ,xᵢ]不变。

我们希望尽可能多的区间能够得到扩展,但是必须保证所有扩展结束后,任意两个区间的交集为空仍然成立。请问,最多可以扩展多少个区间?


输入格式


第一行包含整数 n。


接下来 n 行,每行包含两个整数 xᵢ,lᵢ。


所有区间按照 xᵢ 从小到大的顺序给出。


数据范围


前 66 个测试点满足 1≤n≤⁵。

所有测试点满足 1≤n≤10⁵,1≤x1<x2<…<xn≤10⁹,1≤lᵢ≤10⁹。


输出格式


一个整数,表示可以扩展的最大区间数量。


输入样例1:


5
1 2
2 1
5 10
10 9
19 1

输出样例1:

3

输入样例2:

5
1 2
2 1
5 10
10 9
20 1

输出样例3:

4

解题思路

贪心:尽量往左扩展,如果不行再尝试往右~尽可能多的扩展

第一个数和最后一个数肯定可以进行扩展,主要是考虑中间的数。

代码

import java.util.Scanner;
public class Main {
    static int N = 100005;
    static int[][] dp = new int[N][2];
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt(), ans = 0;
        for (int i = 1; i <= t; i++) {
            dp[i][0] = sc.nextInt();
            dp[i][1] = sc.nextInt();
        }
        for (int i = 1; i <= t; i++) {
            if (i == 1 || i == t) ans++;
            else if (dp[i - 1][0] < dp[i][0] - dp[i][1]) ans++;
            else if (dp[i][0] + dp[i][1] < dp[i + 1][0]) {
                ans++;
                dp[i][0] += dp[i][1];
            }
        }
        System.out.println(ans);
    }
}


目录
相关文章
|
7月前
|
机器学习/深度学习 人工智能 数据可视化
生成AI的两大范式:扩散模型与Flow Matching的理论基础与技术比较
本文系统对比了扩散模型与Flow Matching两种生成模型技术。扩散模型通过逐步添加噪声再逆转过程生成数据,类比为沙堡的侵蚀与重建;Flow Matching构建分布间连续路径的速度场,如同矢量导航系统。两者在数学原理、训练动态及应用上各有优劣:扩散模型适合复杂数据,Flow Matching采样效率更高。文章结合实例解析两者的差异与联系,并探讨其在图像、音频等领域的实际应用,为生成建模提供了全面视角。
981 1
生成AI的两大范式:扩散模型与Flow Matching的理论基础与技术比较
|
存储 SQL 数据库连接
MPPDB分布式结构化数据库
1.MPPDB简介 MPP,它是一款 Shared Nothing 架构的分布式并行数据库集群,具备高性能、高可用、高扩展特性,可以为超大规模数据管理提供高性价比的通用计算平台,并广泛地用于支撑各类数据仓库系统、BI 系统和决策支持系统。
6994 0
|
3月前
|
人工智能 自然语言处理 前端开发
Open WebUI 和 Dify 在构建企业AI应用时的主要区别
Open WebUI与Dify是企业AI落地的两大开源方案,定位差异显著。Open WebUI专注零代码交互界面开发,适合快速部署对话式前端;Dify提供全栈低代码平台,支持AI应用全生命周期管理。前者优势在轻量化UI组件,后者强于复杂业务编排与企业级功能。企业可根据需求选择前端工具或完整解决方案,亦可组合使用实现最优效果。
|
存储 Java 程序员
昵称重复怎么办?一招教你轻松搞定!
本文介绍了如何使用布隆过滤器高效管理用户昵称重复问题。在互联网项目中,确保昵称唯一性至关重要,可避免混淆、增强安全性和保持数据一致性。布隆过滤器通过哈希函数和位数组实现快速查询,具有低内存占用和高速查询的优点。文中详细解释了其工作原理,并提供了Java代码示例,帮助读者理解和应用这一技术,提升项目性能。
299 17
昵称重复怎么办?一招教你轻松搞定!
|
6月前
|
存储 安全 算法
鸿蒙NEXT如何保证应用安全:详解鸿蒙NEXT数字签名和证书机制
本文对鸿蒙NEXT公开资料进行了深入分析和解读,梳理了鸿蒙单框架应用的签名机制,拆解每一步的实操过程和背后的实现原理,并对源码分析整理签名的校验机制。从中管中窥豹,探究鸿蒙系统的安全设计思路,给从事鸿蒙研发的同学提供一些借鉴。
512 3
|
10月前
|
监控 搜索推荐 API
京东商品详情API接口的开发、应用与收益探索
在数字化和互联网高速发展的时代,京东通过开放商品详情API接口,为开发者、企业和商家提供了丰富的数据源和创新空间。本文将探讨该API接口的开发背景、流程、应用场景及带来的多重收益,包括促进生态系统建设、提升数据利用效率和推动数字化转型等。
281 3
|
网络性能优化 网络安全 网络虚拟化
交换机的世界:作用、类型与深度解析
【4月更文挑战第21天】
846 0
Skia深入分析4——skia路径绘制的实现
Skia路径绘制代码分析 路径绘制尽管使用频率相对于图像绘制、文本绘制低,但却是非常重要的一个基本特性。所有不规则图形(椭圆、圆角矩形、三角形、简单的文字),最后都避不开路径绘制。 而且,若自己实现一个2D引擎,这块内容是很具有参考意义的,用OpenGL的话,图像采样等都很少关注了,对对坐标就好。但菱角、圆弧、曲线等如何绘制仍然是一个难题,这时就可以参考Skia中drawPath的实现
4968 0
|
Web App开发 前端开发 iOS开发
fixed固定定位transofrm失效的解决
fixed固定定位transofrm失效的解决
292 0
|
算法 Java BI
算法竞赛入门【码蹄集新手村600题】(MT1551-1600)
算法竞赛入门【码蹄集新手村600题】(MT1551、MT1552、MT1553、MT1554、MT1555......MT1600)
532 1
算法竞赛入门【码蹄集新手村600题】(MT1551-1600)

热门文章

最新文章