首页 > 编程语言 >【算法训练营】邓老师书,子序列,前缀(python实现)

【算法训练营】邓老师书,子序列,前缀(python实现)

时间:2024-03-13 09:33:12浏览次数:21  
标签:__ ab 前缀 python 训练营 样例 字符串 self cur

邓老师数


时间限制:1 sec

空间限制:256 MB

问题描述

众所周知,大于 1 的自然数中,除了 1 与其本身外不再有其他因数的数称作质数(素数)

对于大于 1 的不是质数的自然数,我们又称作合数

参加了邓老师算法训练营的小 Z 突发奇想,定义了新的数:所有合数中,除了 1 与其本身外,其他因数均为质数的数,称作邓老师数

现在,小 Z 给定两个数 n,k,其中 k 的取值为 0 或 1。如果 k=0,小 Z 希望你告诉他所有不超过 n 的质数;如果 k=1,小 Z 希望你告诉他所有不超过 n 的邓老师数。

输入格式

一行两个用空格隔开的整数 n,k,意义见题目描述。

输出格式

对于每个找到的质数或邓老师数,输出一行一个整数表示这个你找到的数。

请升序输出所有答案。

样例输入

9 1

样例输出

4
6
9

样例解释

4 除去 1 与其本身外的因子有 2,均为质数,因此 4 是邓老师数。

6 除去 1 与其本身外的因子有 2,3,均为质数,因此 6 是邓老师数。

9 除去 1 与其本身外的因子有 3,均为质数,因此 9 是邓老师数。

8 除去 1 与其本身外的因子有 2,4,由于 4 不是质数,因此 8 不是邓老师数。

数据范围

本题共设置 8 个测试点,测试点编号从 1 至 8。

对于前 4 个测试点,保证 n<=1,000。

对于编号为偶数的测试点,保证 k=0;对于编号为奇数的测试点,保证 k=1。

对于所有的 8 个测试点,保证 n<=2*10^5。

提示

[对于求质数的问题,可以直接用Eratosthenes筛法求解。]

[对于求邓老师数的问题,考虑Eratosthenes筛法中“筛去”合数的逻辑,是否可以对其略作修改,使之支持筛出“非邓老师数”呢?]

代码实现 

from typing import List

def get_answer(n: int, k: int) -> List[int]:
    is_prime = [True] * (n + 1)
    is_deng = [True] * (n + 1)
    ans = []

    for i in range(2, n + 1):
        if is_prime[i]:
            is_deng[i] = False

        if (k == 0 and is_prime[i]) or (k == 1 and is_deng[i]):
            ans.append(i)

        for j in range(i * 2, n + 1, i):
            is_prime[j] = False
            if not is_prime[j // i]:
                is_deng[j] = False

    return ans

def main():
    n, k = map(int, input().split())
    ans = get_answer(n, k)
    for num in ans:
        print(num)

if __name__ == "__main__":
    main()

子序列


描述

给定一个字符串,求出该字符串有多少不同的子序列。

子序列:字符串中按顺序抽出一些字符得到的串。比如字符串abcd里,ab、ac、ad、abc、acd都是子序列。

输入

输入一个字符串。

输出

输出不同的子序列的个数除以23333得到的余数。

样例1输入

ababc

样例1输出

23

样例1解释

有这些子序列:

a,b,c,aa,ab,ac,ba,bb,bc,aba,abb,abc,aab,aac,bab,bac,bbc,abab,abac,abbc,aabc,babc,ababc

样例2

请查看下发文件内的sample2_input.txt和sample2_output.txt。

限制

对于50%的数据,字符串长度不超过15;

对于100%的数据,字符串长度不超过500000。

字符串为26个小写字母组成。

时间:2 sec

空间:512 MB

代码实现

def get_answer(s: str) -> int:
    n = len(s)
    mo = 23333
    f = [0] * (n + 1)
    p = [0] * (n + 1)
    last = [-1] * 26

    for i in range(n):
        a = ord(s[i]) - ord('a')
        p[i + 1] = last[a]
        last[a] = i + 1

    for i in range(1, n + 1):
        if p[i] == -1:
            f[i] = (2 * f[i - 1] + 1) % mo
        else:
            f[i] = (2 * f[i - 1] - f[p[i] - 1] + mo) % mo

    return f[n]

def main():
    s = input().strip()
    result = get_answer(s)
    print(result)

if __name__ == "__main__":
    main()

前缀


描述

给定n个字符串,再询问m次,每个询问给出一个字符串,求出这个字符串是n个字符串里,多少个串的前缀。

前缀:从头开始的一段连续子串。比如字符串ab是字符串abcd的前缀,也是字符串ab(自身)的前缀,但不是bab的前缀。

输入

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

接下来n行,每行表示一个字符串,表示给定的n个字符串中的一个。

再接下来m行,每行一个字符串,表示询问的字符串。

输出

输出m行,每行表示询问的答案。

样例1输入

5 4
ab
abc
ab
ba
bb
a
b
ab
abc

样例1输出

3
2
3
1

样例1解释

字符串a是ab、abc、ab的前缀;

字符串b是ba、bb的前缀;

字符串ab是ab、abc、ab的前缀;

字符串abc是abc的前缀。

样例2

请查看下发文件内的sample2_input.txt和sample2_output.txt。

限制

对于50%的数据,n,m ≤ 500;

对于100%的数据,n,m ≤ 5000。

字符串为26个小写字母组成,且单个长度不超过500,n个字符串的长度之和不超过1000000。

时间:10 sec

空间:512 MB

提示

[trie树基本题。]

代码实现 

class TrieNode:
    def __init__(self):
        self.prefix_latter_words = 0
        self.children = [None] * 26

class Trie:
    def __init__(self):
        self.root = TrieNode()

    @staticmethod
    def index(c: str) -> int:
        return ord(c) % 26

    def insert(self, word: str):
        cur = self.root
        for c in word:
            idx = self.index(c)
            if not cur.children[idx]:
                cur.children[idx] = TrieNode()
            cur = cur.children[idx]
            cur.prefix_latter_words += 1

    def count_prefix(self, prefix: str) -> int:
        cur = self.root
        for c in prefix:
            idx = self.index(c)
            if not cur.children[idx]:
                return 0
            cur = cur.children[idx]
        return cur.prefix_latter_words

def main():
    t = Trie()

    n, m = map(int, input().split())
    for _ in range(n):
        word = input().strip()
        t.insert(word)

    for _ in range(m):
        prefix = input().strip()
        print(t.count_prefix(prefix))

if __name__ == "__main__":
    main()

标签:__,ab,前缀,python,训练营,样例,字符串,self,cur
From: https://blog.csdn.net/chen695969/article/details/136610909

相关文章

  • Python爬虫实战系列1:博客园cnblogs热门新闻采集
    实战案例:博客园热门新闻采集一、分析页面打开博客园网址https://www.cnblogs.com/,点击【新闻】再点击【本周】本次采集,我们以页面新闻标题为案例来采集。这里可以看到标题“李彦宏:以后不会存在“程序员”这种职业了”。1.1、分析请求F12打开开发者模式,然后点击Network后点......
  • Python爬取免费IP代理时,无法解析到数据
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【ZXS】问了一个Python网络爬虫实战问题。问题如下:我这里遇到一个问题:【爬取免费IP代理时,无法解析到数据】,我通过xpath,css定位到了元素,但是在运行时返回空列表,请问我该怎么解决呀以下是解析数据的截图:他自......
  • Python控制摄像头并获取数据文件
    一、引言摄像头作为计算机视觉领域的核心设备之一,广泛应用于视频监控、图像采集和数据处理等领域。通过Python编程语言,我们可以实现对摄像头的精确控制,包括摄像头的开启、关闭、参数设置以及数据获取等功能。本文将指导读者完成这些操作,实现摄像头数据的自动化管理。二、摄像......
  • Python数学建模-2.2Python基本数据类型
    各位小伙伴大家好,今天开始学习司守奎老师的《数学建模算法与应用》啦,我也会边学习边与大家分享书中的内容,希望与大家共同进步哦Python中的基本数据类型主要包括以下几种:数字(Numbers)整型(int):正或负整数,没有限制大小。例如:100,-8080,0。浮点型(float):浮点数,即带有小数点的数字。......
  • python安装库文件的时候一个一个安装的py脚本
    在编译安装一些python软件的时候,经常使用pipinstall-rrequirements.txt命令执行。如果其中一个库编译失败,会导致所有的库安装失败,非常费事费力。于是写了一个py小脚本pipinstall.py,将库改为一个一个的安装,这样再碰到编译失败的,也不会影响其它的库,节省时间。文件pipinsta......
  • Windows命令行不加解释器和文件后缀名直接运行Python脚本
    Windows命令行不加解释器和文件后缀名直接运行Python脚本首次编辑:24/2/29/20:30最后编辑:24/2/25/20:44引子都知道Windowscmd中,运行可执行文件和bat时,可以直接输入不带后缀的文件名。rem运行main.exemainrem运行mybat.batmybat而执行python脚本时,却需要指明python作......
  • 利用Python中的ORM操作数据库Mysql(一)
    如何用python操作数据库?很多同学在用python操作数据库的时候会使用pymysql,这确实是一种成熟的方案,但是要写很多sql语句,今天我就来介绍在Django中使用ORM的方法操作数据库。第一章链接数据库首先,安装第三方模块mysqlclient在终端输入:pipinstallmysqlclient启动mys......
  • 二分答案&前缀和&差分&离散化(简记)
    二分答案基本codeintFind(intl,intr){ intans,mid; while(l<=r) { intmid=l+r>>1; if(Check(mid))ans=mid,r=mid-1;//舍弃右半部分 elsel=mid+1;//舍弃左半部分 } returnans;}前缀和基本code#inlcude<bits/stdc++.h>usingnamespacestd;intsum[100......
  • 部署Python网站项目,测试灰度发布
    部署Python网站项目1安装python依赖软件yum-yinstallgccmakepython3python3-devel2安装项目依赖pip3installpytz-2022.6-py2.py3-none-any.whlpip3安装.whl结尾的包pip3installDjango-1.11.8-py2.py3-none-any.whlpip3installdjango-bootstrap3-11.0.0.tar......
  • python数据分析 datawhale
    数据分析数据载入及初步观察载入数据导入Numpy和pandasimportnumpyasnpimportpandasaspd使用相对路径和绝对路径载入数据df=pd.read_csv('train.csv')df=pd.read_csv('/Users/chenandong/Documents/datawhale数据分析每个人题目设计/招募阶段/第一单元项目集......