特辣的海藻!4

news/2025/2/26 13:49:21

目录

基础知识点

数对结构

BigInteger

 split()

1.商品库存管理 - 蓝桥云课

2.回文字符串 - 蓝桥云课

3.握手问题 - 蓝桥云课


基础知识点
数对结构

Java中类似C++大的pair,自定义

java">public class Pair<A, B> {
    private final A first;
    private final B second;

    public Pair(){
    
    }
    
    public Pair(A first, B second) {
        this.first = first;    
        this.second = second;
    }
}
BigInteger

1.创建

● 从字符串创建:适用于较大的数字或直接从文本输入获取的数字

java">BigInteger bigInt = new BigInteger("12345678901234567890");

● 从字节数组创建

java">byte[] bytes = {0, 1, 2, 3, 4};
BigInteger bigInt = new BigInteger(bytes);

● 从长整型值创建

java">BigIntger bigInt = BigInteger.valueOf(123456789L);

2.基本运算

● 加法(add):两个BigInteger的和

java">BigInteger sum = a.add(b);

● 减法(subtract):两个BigInteger的差

java">BigInteger diff = a.subtract(b);

● 乘法(multiply):两个BigInteger的积

java">BigInteger product = a.multiply(b);

● 除法(divide):两个BigInteger的商

java">BigInteger quotient = a.divide(b);

● 取模(mod):计算一个BigInteger对另一个BigInteger的模

java">BigInteger reaminder = a.mod(b);

 ● 幂运算(pow):计算BigInteger的幂次方

java">BigInteger power = a.pow(100); // 计算a的100次方

3.比较操作

● 比较大小(compareTo):返回-1 0 1 分别表示 小于、等于或大于

java">int result = a.compareTo(b);
// -1 小于
// 0  等于
// 1  大于

● 检查是否为零(signum):返回-1 0 1 分别表示负数、零或正数

java">int sign = a.signum();

其他实用方法

● 最大公约数(gcd):返回两个BigInteger的最大公约数

java">BigInteger gcd = a.gcd(b);

● 绝对值(abs):返回当前BigInteger的绝对值

java">BigInteger absValue = a.abs();

● 取反(negate):返回当前BigInteger的相反数

java">BigInteger n = a.negate();

 ● 转换为字符串或其他类型(toString,intValue,longValue等):将BigInteger转换为其他形式以便于显示或进一步处理

java">String strRepresentation = bigInt.toString();
 split()

split()方法允许根据指定的分隔符将一个字符串分割成多个子字符串,并将这些子字符串存储在一个字符串数组中返回

一个参数: 

public String[] split(String regex) 

两个参数:

public String[] split(String regex, int limit) 

  • 根据给定的正则表达式作为分隔符来分割字符串
  • limit控制模式应用的次数,从而影响分割后的数组长度
  • 如果limit为n,则模式最多被应用n-1次,因此数组的最大长度为n
  • 如果limit为0或负数,则不限制分割次数,且会去除尾部的空字符串
java">String text = "one,two,three,four,five";
String[] parts = text.split(",", 3);
for (String part : parts) {
    System.out.println(part);
}
/*
one
two
three,four,five
*/

 


1.商品库存管理 - 蓝桥云课

java">import java.util.*;

public class Main {
    static int[] difs = new int[1000000];  // 差分数组
    public static void insert(int l, int r, int c) {
        difs[l] += c;
        difs[r+1] -= c;
    }
    
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();

        int[] nums = new int[n+1];
        
        int[][] ops = new int[m+1][2];  // 操作区间

        for(int i = 1; i <= m; i++) {
            int l = scan.nextInt();
            int r = scan.nextInt();
            insert(l, r, 1);
            ops[i][0] = l;
            ops[i][1] = r;            
        }    

        // 对差分数组进行前缀和计算得到所有操作后的商品状态
        int[] pres = new int[n+1];
        int cur = 0;
        pres[0] = 0;
        for(int i = 1; i <= n; i++) {
            cur += difs[i];
            pres[i] = cur;
        }
        
        // 计算所有操作完毕后,库存为1的商品
        // cnt[i] 记录的是前i个库存为1的商品数量 也就是从1到i-1个
        // 所以数组长度是n+2
        int[] cnt1 = new int[n+2];
        for(int i = 1; i <= n+1; i++) {
            if(pres[i-1] == 1)
                cnt1[i] = cnt1[i-1] + 1;
            else
                cnt1[i] = cnt1[i-1] + 0;
            // cnt[i] = cnt1[i-1] +  (pre[i-1] == 1 ? 1 : 0);
        }
        
        // 统计所有操作都进行后库存仍然为0的商品数量
        // 因为你所有的操作后都为0了,撤销某个操作更加是0
        int cnt0 = 0;
        for(int i = 1; i <= n; i++){
            if(pres[i] == 0)
              cnt0++;
        }

        for(int i = 1; i <= m; i++){
            int l = ops[i][0];
            int r = ops[i][1];

            int newCnt = cnt1[r+1] - cnt1[l];
            
            System.out.println(newCnt + cnt0);
        }

        scan.close();
    }
}
2.回文字符串 - 蓝桥云课

java">

import java.util.Scanner;

public class Main {
        public static boolean isH(String str) {
            int i = 0, j = str.length()-1;
            while (i < j) {
                if (str.charAt(i++) != str.charAt(j--))
                    return false;
            }
            return true;
        }

        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            //在此输入您的代码...
            int n = scan.nextInt();

            for (int j = 0; j < n; j++) {
                String str = scan.next();

                if (isH(str)) {
                    System.out.println("Yes");
                    continue;
                }


                int l = 0, r = str.length()-1;
                for (int i = 0; i < str.length(); i++) {
                    if (str.charAt(i) == 'l' || str.charAt(i) == 'q' || str.charAt(i) == 'b')
                        l++;
                    else
                        break;
                }

                for (int i = str.length()-1; i >= 0 ; i--) {
                    if (str.charAt(i) == 'l' || str.charAt(i) == 'q' || str.charAt(i) == 'b')
                        r--;
                    else
                        break; //tqnzlqbqql
                }

                if(l > r) {
                    System.out.println("Yes");
                    continue;
                }
                String tmp = str.substring(l, r+1);
                if (isH(tmp))
                    System.out.println("Yes");
                else
                    System.out.println("No");
            }
            scan.close();

        }
    }

思考问题不全面,只知道看样例来解决问题,那样例以外的呢?要找到一般规律

应该是找到第一个和最后一个不是lqb的字符位置,然后判断剩下的是不是回文字符串,剩下的也是的话那就可以进行转换,剩下的不是那没办法咯,因为剩下的字符串不是lqb三者之中的,是怎么也构不成回文字符串的。

3.握手问题 - 蓝桥云课

java">public class Main {
    public static void main(String[] args) {
        int sum = 0;
        // 自己不能与自己握手,所以是42
        for(int i = 1; i <= 42; i++)
            sum += i;
        
        sum += 7*43;
        System.out.println(sum);
    }
}

 可以这么想,7个人彼此之间不握手,那么剩下的43个人之间都要握手,然后7个人在分别与这43个人握手。

首先假设五十个人都可以握手,是个完全连通图:50 * (50-1) / 2 = 1225

然后七个人之间不能握手,减去这七个人所构成的完全连通图的边:7 * (7-1) / 2 = 21

所以一共进行:1225-21=1204 次

 

 

 

 

 


http://www.niftyadmin.cn/n/5868793.html

相关文章

Imagination 最新的D系列GPU IP 为智能手机和其他电力受限设备上图形和计算工作负载的高效加速设定了新的标准

今日&#xff0c;Imagination Technologies&#xff08;“Imagination”&#xff09;宣布推出其最新的GPU IP——Imagination DXTP&#xff0c;该产品为智能手机和其他电力受限设备上图形和计算工作负载的高效加速设定了新的标准。得益于一系列微架构改进&#xff0c;DXTP在常见…

Android构建系统 - 02 初始化编译环境,添加产品

文章目录 初始化编译环境&#xff0c;选择产品envsetup.sh脚本不开启 subshell作用提供实用函数添加编译选项查找/执行 其它vendorsetup.sh lunch ProductProduct 概念编译选项解析层级配置文件目录AOSP 预制芯片及方案厂商 lunch命令作用编译目标BUILD 编译目标BUILDTYPE 编译…

React + TypeScript 复杂布局开发实战

React TypeScript 复杂布局开发实战 一、项目架构设计&#xff08;基于最新技术栈&#xff09; 1.1 技术选型与工程创建 # 使用Vite 5.x React 19 TypeScript 5.4 npx create-vitelatest power-designer-ui --template react-ts cd power-designer-ui && npm inst…

Python代码片段-断点任务

使用Python处理一堆长耗时任务的时候&#xff0c;为了防止异常退出程序或者手动退出程序后丢失任务进度&#xff0c;可用使用断点的方式记录任务进度&#xff0c;下次重载任务后&#xff0c;继续运行上次未完成的任务即可。 这里用json文件作为数据持久化的方式&#xff0c;免…

YOLOv10 解析与地平线 征程 6 模型量化

一&#xff0c;YOLOv10 解析 1.简介 近些年来&#xff0c;研究人员对 YOLO 的架构设计、优化目标、数据增强策略等进行了探索&#xff0c;取得了显著进展。然而&#xff0c;后处理对非极大值抑制&#xff08;NMS&#xff09;的依赖阻碍了 YOLO 的端到端部署&#xff0c;并对推…

一个std::async的示例

目录 一、问题引出 二、关键点解释 1.生成随机数 2.异步启动两个操作 3.检查异步任务是否为延迟执行并轮询任务状态 4.等待所有任务完成并处理异常 三、总结 一、问题引出 从《c标准库》&#xff08;第2版&#xff09;看到一个std::async的例子。演示了使用 std::async…

《零基础学会!如何用 sql+Python 绘制柱状图和折线图,数据可视化一看就懂》

在数据驱动的时代&#xff0c;MySQL 是最常用的关系型数据库管理系统之一&#xff0c;广泛应用于各类数据存储和处理场景。数据分析的过程不仅仅是收集数据&#xff0c;还包括数据的清洗、转换、查询以及最终的报告和可视化。在本文中&#xff0c;我们将通过实际案例来介绍如何…

Java+SpringBoot+Vue+数据可视化的音乐推荐与可视化平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在互联网技术以日新月异之势迅猛发展的浪潮下&#xff0c;5G 通信技术的普及、云计算能力…