2024.6.23刷题记录

news2024/11/20 12:26:26

目录

一、P1102 A-B 数对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

1.hash表-一次遍历

2.双指针(同向,可以算滑动窗口)-排序

 二、P8667 [蓝桥杯 2018 省 B] 递增三元组 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

1.排序+指针

2.排序+二分

三、12. 整数转罗马数字

1.模拟

 2.模拟2-贪心

 四、【模板】快速幂 - 洛谷

 五、876. 快速幂求逆元 - AcWing题库


一、P1102 A-B 数对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

1.hash表-一次遍历

时复O(n),空复O(n)。

# 一次遍历
n, c = map(int, input().split())
nums = list(map(int, input().split()))
ans = 0
hash = {}
for x in nums:
    if x - c in hash:
        ans += hash[x - c]
    if x + c in hash:
        ans += hash[x + c]
    hash[x] = hash.get(x, 0) + 1
print(ans)

2.双指针(同向,可以算滑动窗口)-排序

参考题解(题解 P1102 【A-B 数对】 - 洛谷专栏 (luogu.com.cn))。时复O(nlogn),空复O(1)。

# 双指针(同向,应该算滑动窗口)-排序
n, c = map(int, input().split())
nums = list(map(int, input().split()))
nums.sort()
ans = 0
# 维护区间差为c的窗口
left1, left2 = 0, 0
for right in range(n):
    # 这里还有点二分的味道
    while nums[right] - nums[left1] > c:
        # 这里left不会超界,因为left最多到right就停
        left1 += 1
    while nums[right] - nums[left2] >= c:
        left2 += 1
    if nums[right] - nums[left1] == c:
        ans += left2 - left1
print(ans)

 二、P8667 [蓝桥杯 2018 省 B] 递增三元组 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

1.排序+指针

时复O(n^2),超时了。

 代码:

# 排序+指针
n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
c = list(map(int, input().split()))
a.sort()
b.sort()
c.sort()
ans = 0
j, k = 0, 0
for anum in a:
    while j < n and b[j] <= anum:
        # 将j调到对应位置
        j += 1

    if j < n:
        bnum = b[j]
    else:
        continue

    while k < n and c[k] <= bnum:
        # 调整k
        k += 1
    jj = j
    kk = k
    while jj < n:
        # a < b
        bnum = b[jj]
        while kk < n and c[kk] <= bnum:
            # 调整kk
            kk += 1
        ans += n - kk
        jj += 1
print(ans)

2.排序+二分

来自题解(P8667 [蓝桥杯 2018 省 B] 递增三元组 题解 - 洛谷专栏 (luogu.com.cn)),太帅了!时复O(nlogn),通过。

# 排序+二分
import bisect # 二分库

n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
c = list(map(int, input().split()))
a.sort()
b.sort()
c.sort()
ans = 0
# 枚举处于中间的b
for bnum in b:
    cnt_a = bisect.bisect_left(a, bnum)
    cnt_c = n - bisect.bisect_right(c, bnum)
    ans += cnt_a * cnt_c
print(ans)

三、12. 整数转罗马数字

1.模拟

class Solution:
    def intToRoman(self, num: int) -> str:
        # 模拟
        ans = ''
        while num > 0:
            if num <= 9:
                if num == 9:
                    ans += 'IX'
                    num -= 9
                elif num == 4:
                    ans += 'IV'
                    num -= 4
                elif num >= 5:
                    ans += 'V'
                    num -= 5
                while num >= 1:
                    ans += 'I'
                    num -= 1
            elif num <= 99:
                if num >= 90:
                    ans += 'XC'
                    num -= 90
                elif 49 >= num >= 40:
                    ans += 'XL'
                    num -= 40
                elif num >= 50:
                    ans += 'L'
                    num -= 50
                while num >= 10:
                    ans += 'X'
                    num -= 10
            elif num <= 999:
                if num >= 900:
                    ans += 'CM'
                    num -= 900
                elif 499 >= num >= 400:
                    ans += 'CD'
                    num -= 400
                elif num >= 500:
                    ans += 'D'
                    num -= 500
                while num >= 100:
                    ans += 'C'
                    num -= 100
            else:
                while num >= 1000:
                    ans += 'M'
                    num -= 1000
        return ans

 2.模拟2-贪心

来自官方题解(. - 力扣(LeetCode))。

class Solution:
    VALUE_SYMBOLS = [
        (1000, "M"),
        (900, "CM"),
        (500, "D"),
        (400, "CD"),
        (100, "C"),
        (90, "XC"),
        (50, "L"),
        (40, "XL"),
        (10, "X"),
        (9, "IX"),
        (5, "V"),
        (4, "IV"),
        (1, "I"),
    ]
    def intToRoman(self, num: int) -> str:
        # 模拟2
        roman = ''
        for value, symbol in Solution.VALUE_SYMBOLS:
            while num >= value:
                num -= value
                roman += symbol
            if num == 0:
                break
        return roman

 四、【模板】快速幂 - 洛谷

'''
快速幂模板题
'''
a, b, p = map(int, input().split())
def binpow(a, b, p):
    res = 1
    a %= p
    while b > 0:
        # 将每一位的值乘上去(指数是加,幂数是乘)
        if b & 1:
            res = res * a % p   # 对当前值进行取模
        b >>= 1
        a = a * a % p
    return res
print(f"{a}^{b} mod {p}={binpow(a, b, p)}")

 五、876. 快速幂求逆元 - AcWing题库

# 辗转相除法求最大公因数
def gcd(a, b):
    if a < b:
        return gcd(b, a)  # 大的放前面
    while b > 0:
        a, b = b, a % b
    return a

def qmi(a, n, mod):
    ans = 1
    a %= mod
    while n:
        if n & 1:
            ans = ans * a % mod
        a = a * a % mod
        n >>= 1
    return ans

n = int(input())
for _ in range(n):
    a, q = map(int, input().split())
    if gcd(a, q) != 1:
        print('impossible')
        continue
    print(qmi(a, q - 2, q))

 完

感谢你看到这里!一起加油吧!

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

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

相关文章

C++ | Leetcode C++题解之第187题重复的DNA序列

题目&#xff1a; 题解&#xff1a; class Solution {const int L 10;unordered_map<char, int> bin {{A, 0}, {C, 1}, {G, 2}, {T, 3}}; public:vector<string> findRepeatedDnaSequences(string s) {vector<string> ans;int n s.length();if (n < L…

《AI旋律:创意产业的重塑与共生》

AI乐章&#xff1a;技术革命下的创意产业新生态 在数字化浪潮的推动下&#xff0c;音乐创作领域迎来了前所未有的变革——AI音乐大模型的横空出世&#xff0c;犹如一颗石子投入平静的湖面&#xff0c;激起了层层涟漪。这些模型以令人难以置信的速度和多样性&#xff0c;将音乐…

WinForm 2048

WinForm 2048 是一个基于 Windows 窗体应用程序&#xff08;WinForms&#xff09;实现的经典益智游戏——2048。这个游戏通过简单的滑动或点击操作&#xff0c;将相同数字的方块合并&#xff0c;以生成更大的数字方块&#xff0c;最终目标是创造出一个数字为 2048 的方块。 游…

C++ | Leetcode C++题解之第188题买卖股票的最佳时机IV

题目&#xff1a; 题解&#xff1a; class Solution { public:int maxProfit(int k, vector<int>& prices) {if (prices.empty()) {return 0;}int n prices.size();k min(k, n / 2);vector<int> buy(k 1);vector<int> sell(k 1);buy[0] -prices[0]…

Ubuntu 之Glade图形化设计器

演示环境说明&#xff1a;本机使用Windows 11 家庭版本搭载 Ubuntu 22.04.4 LTS 子系统&#xff0c;同时并安装Ubuntu桌面虚拟化软件XLaunch。 如果没有搭建好上述问题&#xff0c;请参考&#xff1a;windows11子系统Ubuntu 22.04.4子安装图形化界面 Glade是什么&#xff1f;…

驾校预约管理系统

摘 要 随着驾驶技术的普及和交通安全意识的增强&#xff0c;越来越多的人选择参加驾校培训&#xff0c;以获取驾驶执照。然而&#xff0c;驾校管理面临着日益增长的学员数量和繁琐的预约管理工作。为了提高驾校的管理效率和服务质量&#xff0c;驾校预约管理系统成为了必不可少…

[spring] Spring MVC - CRUD 操作

[spring] Spring MVC - CRUD 操作 基础实现源自于这两篇笔记&#xff1a; [spring] Spring Boot REST API - 项目实现[spring] Spring Boot REST API - CRUD 操作 除了 Rest API 部分改成了 Controller 之外&#xff0c;其他没什么变化&#xff0c;还是使用 service --> …

6/23 第四周 python操作excel

excel对于python来说就是一个二维数组&#xff0c;只是多了一个多sheet的index的索引&#xff0c;在确定索引之后&#xff0c;不管是读取还是写入&#xff0c;都是类似于二维数组。对于数据的处理&#xff0c;读取和写入就够了&#xff0c;如果要应用图表&#xff0c;个人觉得还…

nest.js关键笔记

Nest.js 介绍核心功能设计模式&#xff1a;IOC 控制反转 DI 依赖注入前置知识&#xff1a;装饰器前置知识装饰器-实现一个GET请求 Nestjs脚手架Nestjs cli 常用命令 RESTful 风格设计Nestjs 控制器控制器中常见的参数装饰器 Session 实例Nestjs 提供者**工厂模式**异步模式 Nes…

Linux 7种 进程间通信方式

传统进程间通信 通过文件实现进程间通信 必须人为保证先后顺序 A--->硬盘---> B&#xff08;B不知道A什么时候把内容传到硬盘中&#xff09; 1.无名管道 2.有名管道 3.信号 IPC进程间通信 4.消息队列 5.共享内存 6.信号灯集 7.socket通信 一、无名管道&a…

《书生·浦语大模型实战营》第5课 学习笔记:LMDeploy 量化部署 LLM 实践

文章大纲 0.背景知识与简介计算机组成原理&#xff1a;变量的存储参数量与推理的关系 1.LMDeploy环境部署1.1 创建开发机1.2 创建conda环境InternStudio开发机创建conda环境&#xff08;推荐&#xff09;本地环境创建conda环境 1.3 安装LMDeploy 2.LMDeploy模型对话(chat)2.1 H…

Golang | Leetcode Golang题解之第187题重复的DNA序列

题目&#xff1a; 题解&#xff1a; const L 10 var bin map[byte]int{A: 0, C: 1, G: 2, T: 3}func findRepeatedDnaSequences(s string) (ans []string) {n : len(s)if n < L {return}x : 0for _, ch : range s[:L-1] {x x<<2 | bin[byte(ch)]}cnt : map[int]in…

Python | Leetcode Python题解之第187题重复的DNA序列

题目&#xff1a; 题解&#xff1a; L 10 bin {A: 0, C: 1, G: 2, T: 3}class Solution:def findRepeatedDnaSequences(self, s: str) -> List[str]:n len(s)if n < L:return []ans []x 0for ch in s[:L - 1]:x (x << 2) | bin[ch]cnt defaultdict(int)for…

期货交易纪律2024年6月22号

文章目录 期货交易系统构建第一步、选品第二步、开仓纪律第三步、持仓 2024年6月22号&#xff0c;开始写期货交易的第三篇日记。 交易记录&#xff1a;市场继续震荡&#xff0c;这两天无交易&#xff0c;继续梳理一些期货交易选品&#xff0c;周末详细的了解了一下豆粕&#xf…

axure制作菜单下拉、隐藏、点击选中效果

在高保真原型中&#xff0c;制作导航栏菜单时&#xff0c;需要达到点击下拉按钮&#xff0c;子菜单自动弹出&#xff0c;点击其中一个子菜单项可栏目变为选中状态且跳转到对应的子页面。制作材料可以从antdesign中去下载&#xff0c;以下述网络配置菜单为例。在箭头处添加互动效…

Pytest和Unitest框架对比

在学到自动化的时候,很多同学都遇到了Pytest和Unitest框架,有的人是两个都学,但是学的不精只是知道分别怎么用.不了解两个区别是什么.有的是犹豫到底要学习那个框架.其实要做好自动化测试,是有必要了解不同框架之间的差异化的. Pytest 特点: Pytest采用了更简洁、更灵活的语法…

C语言 | Leetcode C语言题解之第187题重复的DNA序列

题目&#xff1a; 题解&#xff1a; #define MAXSIZE 769/* 选取一个质数即可 */ typedef struct Node {char string[101];int index;struct Node *next; //保存链表表头 } List;typedef struct {List *hashHead[MAXSIZE];//定义哈希数组的大小 } MyHashMap;List * …

【建设方案】大数据湖一体化建设方案(ppt原件)

1、背景&#xff1a;大数据湖的发展背景与建设理念 2、体系&#xff1a;大数据湖体系规划与建设思路 3、生态圈&#xff1a;探索新兴业务入湖建设模式 4、共享&#xff1a;大数据湖统一访问共享规划 5、运营&#xff1a;大数据湖一体化运营管理建设 &#xff08;本方案及更多方…

交通大数据分析与挖掘实训【对提供的CSV格式数据使用pandas库分析-Matplotlib库绘图】

背景&#xff1a; 《交通大数据分析与挖掘》实训 指 导 书 编著 二○二四年五月 一、实训目的 1、掌握python开发环境&#xff08;如Anaconda&#xff09;及Numpy等常见第三方库的使用&#xff1b; 2、熟悉Anaconda在线编程平台&#xff0c;学会基本的python程序编写…

CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中

CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中 code review! 文章目录 CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中1.CMAKE_INSTALL_PREFIX详解变量作用设置 CMAKE_INSTALL_PREFIX示例影响范围常见用法特别…