Algorithmus-Lehrbuch: „Introduction to Advanced Algorithm Competition“ Tsinghua University Press
Online-Shopping: Jingdong Dangdang Signaturbuch des Autors (mit Rechnung): click me
Wenn Sie Vorschläge haben, fügen Sie bitte die QQ-Gruppe hinzu: 567554289
Artikelverzeichnis
Bei der Teilnahme am Blue Bridge Cup Python-Gruppenwettbewerb sind die häufigsten Probleme von Anfängern Zweifel an der Verarbeitung von Ein- und Ausgabe und Unvertrautheit mit häufig verwendeten Sortierungen und Warteschlangen. Dieser Artikel fasst die beteiligten Vorgänge zusammen.
1. for-Schleife
Beispiel 1: iiDer Bereich von i ist 4~(20190325-1)
for i in range(4,20190325):
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112979520
Beispiel 2: iiDer Bereich von i ist 0~(len(num)-1)
for i in range(len(num)):
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112560449
2. sort()- und sorted()-Funktionen
sort() sortiert ein Array, zum Beispiel:
n, s = map(int,input().split())
a = list(map(int,input().split()))
a.sort()
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112930544
sorted() sortiert die Struktur, zum Beispiel:
a = sorted(a, key=lambda a: a[0])
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112979653
3. Warteschlange
Beispiel:
from queue import *
q = Queue()
q.put((x,y)) #用队列直接处理结构体
q.empty():
q.get()
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112851771
4. Array-Zuweisung
Beispiel 1: Weisen Sie 0 ein eindimensionales Array zu
flag = [0 for i in range(n+1)]
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112979653
Beispiel 2: Weisen Sie 0 ein zweidimensionales Array zu
r = [[0] * 3 for i in range(k)]
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112909051
Beispiel 3: S[i] i zuweisen
N=1000002
s=[]
for i in range(N):
s.append(i)
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112979670
5. Eingabe
5.1 Eingabe mehrerer Ganzzahlen in einer Zeile
Beispiel 1: Die erste Zeile enthält eine ganze Zahl N, die zweite Zeile enthält N ganze Zahlen
n = int(input())
a = input().split(" ")
int(a[i]) #使用时要转换
#或者这样写:
a=[int(i) for i in input().split()]
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112979634
Beispiel 2: Geben Sie eine Zeile mit mehreren Ganzzahlen ein
num=[int(i) for i in input().split()]
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112560449
5.2 Eingabe von zweidimensionalen Arrays
Beispiel: Die erste Zeile enthält 3 ganze Zahlen N, M und T, und jede der folgenden M Zeilen enthält zwei ganze Zahlen ts und id.
first = input()
n, m, T = [int(i) for i in first.split()]
a = [] #这是二维数组
for i in range(m):
a.append([int(i) for i in input().split()])
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112979653
5.3 Geben Sie Zahlen ein, die durch Nicht-Leerzeichen getrennt sind
Beispiel:
Die erste Eingabezeile ist eine positive Ganzzahl T, die die Anzahl der Eingabedatengruppen darstellt.
Jeder Datensatz enthält zwei Zeilen, die erste Zeile ist die Start- und Landezeit der Hinfahrt, und die zweite Zeile ist die Start- und Landezeit der Rückfahrt.
Das Format der Start- und Landezeit ist wie folgt
: h1:m1:s1 h2:m2:s2
h1:m1:s1 h3:m3:s3 (+1)
h1:m1:s1 h4:m4:s4 (+2)
def get_time():
line = str(input()).split(' ') #一行字符串,以空格分开,分别读取
h1=int(line[0][0:2]) #处理字符串中的数字
m1=int(line[0][3:5])
s1=int(line[0][6:8])
h2=int(line[1][0:2])
m2=int(line[1][3:5])
s2=int(line[1][6:8])
day = 0
if(len(line)==3): #line中有3个元素,最后一个是day
day = int(line[2][2])
S = h1*3600 + m1*60 + s1
E = h2*3600 + m2*60 + s2
return E - S + day*24*3600
n = int(input())
for i in range(n):
ans = (get_time()+ get_time())/2
hh = int(ans/3600)
mm = int(ans/60%60)
ss = int(ans%60)
print("{:0>2d}:{:0>2d}:{:0>2d}".format(hh,mm,ss))
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112728088
5.4 Eingabe mehrerer Nummern mit Karte
Beispiel 1:
Die erste Zeile enthält 4 positive ganze Zahlen A, B, C, m;
die zweite Zeile enthält A × B × C ganze Zahlen, wobei ((i − 1)×B + (j − 1)) × C + (k − 1)+1 Zahlen sind d(i, j, k);
in Zeile 3 bis m + 2 enthält Zeile (t − 2) 7 positive ganze Zahlen lat, rat, lbt, rbt, lct, rct, ht.
A,B,C,m = map(int,input().split())
ship=[]
for i in range(A):
sublist=[]
for j in range(B):
sublist.append([0]*C)
ship.append(sublist)
life=list(map(int,input().split()))
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112761182
Beispiel 2: Die erste Zeile enthält 2 positive ganze Zahlen n, K. Die zweite Zeile enthält n positive ganze Zahlen, die die gegebenen n Zahlen darstellen.
n, k = map(int,input().split())
a = input().split()
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112909051
Beispiel 3: Die erste Zeile enthält zwei ganze Zahlen n, S, die zweite Zeile enthält n nicht negative ganze Zahlen a1, …, an.
n, s = map(int,input().split())
a = list(map(int,input().split()))
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112930544
5.5 Zeichen eingeben
Beispiel: Geben Sie eine Zeichenkette bestehend aus „x()|“ ein.
s = input()
if s[pos] == '(':
elif s[pos] == 'x':
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112363933
5.6 Zeilenvorschubeingang
Beispiel 1:
Die erste Zeile enthält eine ganze Zahl N. (1 <= N <= 100)
Jede der folgenden N Zeilen enthält eine ganze Zahl Ai. (1 <= Ai <= 100)
n=int(input())
numlist=[]
for i in range(n):
numlist.append(int(input()))
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112405425
Beispiel 2:
Die erste Zeile enthält zwei ganze Zahlen N und K. (1 <= N, K <= 100000)
Jede der folgenden N Zeilen enthält zwei ganze Zahlen Hi und Wi. (1 <= Hallo, Wi <= 100000)
n,k = map(int,input().split())
w = []
h = []
for i in range(n):
a,b = map(int,input().split())
w.append(a)
h.append(b)
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112424722
5.7 Eingänge, die keine Terminierung spezifizieren
Manchmal gibt der Titel nicht an, wann die Eingabe beendet wird, wie etwa „es gibt mehrere Sätze von Testdaten, jede Zeile von Testdaten enthält eine positive ganze Zahl n (1<=n<=10000).“
Lösung : für n in sys .stdin
import sys
for n in sys.stdin:
n = int(n)
n1 = int(n**0.5)
s = 0
for a in range(1, n1+1):
for b in range(a, n1+1):
if n - a**2 - 2*(b**2) >= 0:
c = int(pow((n - a**2 - b**2 ), 0.5))
if a**2 + b**2 + c**2 == n:
s = 1
print("{} {} {}".format(a, b, c))
if s == 0:
print("No Solution")
Referenz: http://oj.ecustacm.cn/problem.php?id=1250
Der C++-Code für diese Frage lautet:
#include <iostream>
#include <cmath>
using namespace std;
bool flag;
int main(){
int n;
while(cin>>n){
int m = sqrt(n)+1;
for(int i=1;i<=m;i++){
for(int j=i;j<=m;j++){
for(int k=j;k<=m;k++){
if(i*i+j*j+k*k==n){
flag=true;
cout<<i<<' '<<j<<' '<<k<<endl;
}
}
}
}
if(!flag){
cout<<"No Solution"<<endl;
}
flag=false;
}
return 0;
}
6. Formatierte Ausgabe
Beispiel 1: Die Ausgabe wird auf 4 Nachkommastellen gerundet.
print('{:.4f}'.format(sqrt(sum/(n))))
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112930544
Beispiel 2: Geben
Sie für jeden Datensatz eine Zeitzeile hh:mm:ss aus, die angibt, dass die Flugzeit hh Stunden mm Minuten ss beträgt Sekunden.
Beachten Sie, dass führende Nullen aufgefüllt werden müssen, wenn die Zeit eine einstellige Zahl ist. Beispielsweise sollten drei Stunden, vier Minuten und fünf Sekunden als 03:04:05 geschrieben werden.
print("{:0>2d}:{:0>2d}:{:0>2d}".format(hh,mm,ss))
Referenz: https://blog.csdn.net/weixin_43914593/article/details/112728088