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为直径