Resumen de experiencia y clasificación de puntos propensos a errores de Python Blue Bridge Cup [1]

1. Cuando la entrada incluya números y deba ordenarse de acuerdo con el tamaño de los números , asegúrese de agregar int ; de lo contrario, será una comparación de números de tipo cadena: del entrenamiento del algoritmo Blue Bridge Cup: la tragedia del maestro de preparación

Esta imagen muestra en qué página aparece un personaje y el número de páginas es un número. Por ejemplo, si desea crear un diccionario, la clave es el número de páginas y, finalmente, la clave está en orden ascendente. Entonces debe agregue la clave al agregar un par clave-valor. Convertido a tipo int.

2. La relación entre mcd (máximo común divisor) y mcm (mínimo común múltiplo) y el tablero

Relación : si a,b>0 entonces a*b=mcd(a,b)*lcm(a,b)

tablero gcd (demasiado común):

def gcd(a,b):
    while b:
        a,b=b,a%b
    return a

Entonces el tablero lcm puede ser empujado por gcd

def lcm(a,b):
    t=a*b
    while b:
        a,b=b,a%b
    return t//a
#因为到最后a,b的值都不是原来的了,需要一开始用t存a*b

Después de dominar estos dos, necesitas dominar uno más: encuentra el mcd (máximo común divisor) de N números

Idea del tablero: recursividad (no es difícil, fácil de entender, el máximo común divisor de los primeros N//2 números y los últimos N//2 números es el máximo común divisor de N números)

def gcd(a,b):
    while b:
        a,b=b,a%b
    return a




def super_gcd(nums):#把你要处理的N个数字放到列表nums里
    #基线条件列表长度为1或2
    l=len(nums)
    if l==1:
        return nums[0]
    elif l==2:
        return gcd(nums[0],nums[1])
    else:
        return gcd(super_gcd(nums[:l//2]),super_gcd(nums[l//2:]))

 3. Teorema de descomposición única y relación y tablero de descomposición en factores primos

Teorema de descomposición única: para n>1, n=(2^a)*(3^b)*(5^c)....*(x^y)

Donde y>=0, x es un número primo, en resumen, un número debe descomponerse en el producto de varios números primos.

Inferencia: Divisores de n=(a+1)(b+1)...(y+1)

Entonces, ¿cómo descomponemos, es decir, cómo desarrollamos la descomposición en factores primos  (división corta) ?

#为了灵活使用,我写一个函数,并把分解出来的质数存到列表里并输出
#怎么加工利用看自己需要

def f(x):
    i=2
    l=[]
    while i<=x:
        if x%i==0:
            l.append(i)
            x//=i
        else:
            i+=1
    return l

4. Juzgar números primos (el más básico) y tabla de método de tamiz de Angstrom (usado en muchas preguntas)

Determinar números primos:

#由于一个数n的因子是成对出现的 故只需要枚举到int(n**0.5)

def judge(x):
    for i in range(2,int(x**0.5)+1):
        if x%i==0:
            return False
    return True

Placa de tamiz de Angstrom:

maxn=10000#这个范围自己依据要查找数据范围内的质数设定

is_prime=[True for i in range(maxn+1)]

prime=[]


for i in range(2,maxn):
    if is_prime[i]:
        prime.append(i)
        j=i
        while j<=maxn:
            is_prime[j]=False
            j+=i

5. Cuando la cadena de entrada deba cruzar líneas, debe usar comillas triples """ """

 6. Tablero de dos puntos (diferentes personas tienen diferentes hábitos, Xiao Zheng siente que este método no es fácil de cometer errores)

l=0
r=N

while l+1!=r
    mid=(l+r)//2
    if #符合条件:
        r=mid
    else:
        l=mid
#划分红蓝区域

 ¡Para más detalles, vea mi blog de dos partes! Blog de Py Xiaozheng - Blog de CSDN

 7. Módulos importantes, funciones

módulo itertools (comúnmente utilizado para permutación y combinación)

import itertools

s=[1,2,3]#序列
#l为排列组合的长度:从序列里面取几个出来
l=2
x=itertools.permutations(s,l)

y=itertools.combinations(s,l)

#如果要查看x,y的内容,转化为列表

 Función factorial:

import math

math.factorial(n)
#求n!

 Mencione el conocimiento matemático: sea n>=m, A(n,m)=n!/(nm)!

C(n,m)=A(n,m)/m!=n!/[(nm)!*m!]

Escribir a mano la función del número combinatorio suele ser muchas veces más rápido que ajustar directamente el factorial para expresar directamente el número combinatorio.

def C(n,m):#计算组合数
    t=1
    i,j=n,1
    while j<=m:
        t*=i/j
        i-=1
        j+=1
    return int(t)

módulo de fecha y hora

Menciona los básicos: febrero 28 días en años normales, 29 días en años bisiestos, años bisiestos: años divisibles por 4 pero no divisibles por 100 o divisibles por 400

import datetime
#设置开始年份
s=datetime.date(2022,4,5)

#查询星期几
s.weekday()

#查询年月日,在后面跟上year或month或day
s.day


#设置时间间隔 一般以天为单位吧
delta=datetime.timedelta(days=1)

#判断日期合法性

def judge(x,y,z):
    try:
        s=datetime.date(x,y,z)
    except:
        print('日期不合法')

Función de conversión hexadecimal + funciones relacionadas con cadenas :

ord: convierte el carácter al Ascii correspondiente (ord('A')=65)

chr: Convierte Ascii a los caracteres correspondientes  ord y chr están confundidos. ¡Está bien jugar dos juegos e intentarlo! !

Las funciones lower() y upper() son como sus nombres sugieren

 Determine si un carácter es una función de letra isalpha():

Determine si un carácter es un número función isdigit():

 Función bin decimal a binaria (): Tenga en cuenta que la salida es una cadena, y hay un prefijo '0b', preste atención para eliminar

Función hexadecimal de decimal a hexadecimal ()): tenga en cuenta que la salida es una cadena, y hay un prefijo '0x', preste atención para eliminar

Decimal a función octal octal ()): Tenga en cuenta que la salida es una cadena, y hay un prefijo '0o', preste atención para eliminar


Binario, hexadecimal y octal a decimal son funciones: int, use int(#cadena, #cadena correspondiente al sistema)

módulo de colecciones

import collections

queue=collections.deque()
#在两头插入元素的时候效率很高
#常用操作append,popleft(),pop()

 8. Fórmulas matemáticas

1^2+2^2+3^2+.....n^2=n(n+1)(2n+1)/6, use la fórmula de diferencia legislativa (a+1)^3-a^ 3 Empuje, método acumulativo para obtener


El número más grande que no se puede representar: si mcd(a,b)=1 a,b>0, entonces el número más grande que no se puede representar con a y b es ab-(a+b) . entonces el número que no se puede representar es Infinitamente muchos , la parte roja se puede generalizar a n números

9. Creación rápida de diccionarios y listas

#字典快速初始化
p=dict((i,0) for i in range(10))


#列表解析式(初始化

l=[[0]*10 for i in range(10)]

10. Para obtener una introducción detallada al código original, el código inverso y el código complementario , puede leer mi artículo: Blue Bridge Cup Zhenti: Master 3 tipos de códigos para una pregunta - Py Xiaozheng's Blog - CSDN Blog y

El rango del código original es [-127,127] y el código inverso se basa en el código original excepto por el bit de signo.

El código de complemento agrega uno al código de complemento, y la computadora siempre usa el código de complemento para almacenar números.

Los tres códigos de números positivos son iguales y los números negativos se pueden convertir del código original.

El rango del complemento [-128,127], en particular, el complemento de -128 se especifica como 10000000

 11. árboles

Árbol binario completo: 1: el nodo del último nivel no tiene hijos 2: excepto el último nivel, cualquier nodo de nivel tiene dos hijos

Árbol binario completo: 1: La última capa se organiza de izquierda a derecha 2: La última capa se elimina para obtener un árbol binario completo

Encuentre la profundidad de dos árboles: árbol binario completo >> log (2, n + 1)

Árbol binario completo >>[log(2,n)]+1

El diámetro del árbol: método DFS, primero tome un punto de partida y luego encuentre el primer punto final, luego use este punto final como punto de partida, continúe con DFS y encuentre otro punto final.

junta:


#三个容器
#根据题意创建散列表

edge=dict((i,{}) for i in range(n))

#例如edge[1]={2:12,3:14}表示1到2费用是12,1到3费用是14

vis=[False for i in range(n)]

d=[0 for i in range(n)]

def dfs(x):
    global vis,edge
    for i in edge[x]:
        if not vis[i]:
            d[i]=d[x]+edge[x][i]
            vis[i]=True
            dfs(i)
            vis[i]=False

#初始化
vis[0]=0
dfs(0)


Q=d.index(max(d))#一个端点

#接下来重复上述,重置
vis=[False for i in range(n)]
d=[0 for i in range(n)]
vis[Q]=True
dfs(Q)

W=d.index(max(d))

#QW为直径

El resto se seguirá actualizando mañana , todavía quedan tres días para el 6, 7 y 8, ¡así que prepárate bien y vuelve con un ahorro!

Supongo que te gusta

Origin blog.csdn.net/m0_62277756/article/details/123965964
Recomendado
Clasificación