Speed Run 那種,拿來給競程ㄉ
喔對,我左上角的 chapter 都亂寫
# CHAPTER 2
就是把我懶得分類的東西
都丟到這個子標題下
# PRESENTING CODE
# PRESENTING CODE
Light Attract Bugs
# PRESENTING CODE
# PRESENTING CODE
cd {directory}你要切到要執行程式的那層資料夾,電腦才找得到檔案
python {filename}# PRESENTING CODE
# PRESENTING CODE
讓你解題的地方,丟扣上去,他會告訴你結果
# PRESENTING CODE
滿級更容易,天擇不掉人,台清交可能要漲分數了,我是不理解
# CHAPTER 2
python 的 i/o 和自動偵測變數很強 ...
甚至有點太強了
所以亂寫會壞掉
print("Hellooooooooooooooooooooooo World")
# 就,對,字面上的意思
# Python 的 print() 會自動換行
# 你可以在程式碼前面加米字號,變整行註解
"""
或是像這樣,用三個引號包起來
可以形成多行註解
註解在 Debug 時很好用
"""# PRESENTING CODE
print("Hellooooooooooooooooooooooo World", end = "")
# 所以你給他一個新的 end,取代掉默認值就好
# 這樣輸出的結果不會換行,後面不加空白# PRESENTING CODE
# PRESENTING CODE
| 變數類型 | 說明 | 例子 | 備註 |
|---|---|---|---|
| int | 整數 | -1、7、36 | 向下取整 |
| float | 浮點數 | 0.654、-1.98 | 精度問題 |
| boolean | 是或否 | True、False | 首字母大寫 |
| string | 字串 | "duck"、'cat' | 單或雙引號皆可 |
print(int(-2/3)) # 0# PRESENTING CODE
_int = 13
_str = "duck"
_float = 3.1415926
_bool = True
_undefined = None # 這意義不大
print(type(_int)) # <class 'int'>
print(type(_str)) # <class 'str'>
print(type(_float)) # <class 'float'>
print(type(_bool)) # <class 'bool'>
print(type(_undefined)) # <class 'NoneType'>
_undefined = 7
print(type(_undefined)) # <class 'int'># PRESENTING CODE
舉例而言,我很喜歡給 -1e9 這個值
因為一般運算時不可能達到這個數
當你 Debug 看到 -1e9
就知道這個變數從頭到尾都沒被改過
# PRESENTING CODE
| 運算子 | 說明 | 例子 | 備註 |
|---|---|---|---|
| + | 加 | 3+7 | =10 |
| - | 減 | 16-9 | =7 |
| * | 乘 | 3*7 | =21 |
| / | 除 | 2/3 | =0.666... |
| ** | 次方 | 2**7 | =128 |
| % | 模 | 8%3 | =1 |
| == | 比較 | (3+17) == (21-1) | True |
# PRESENTING CODE
f 是一個 >0 的 float
寫一套程式幫我把 f 無條件捨去至小數點後第三位
做完之後輸出
不要用 round(),如果你知道那是什麼
f = 3.1415926
fixed = int(f * 1000)
print(fixed / 1000)如果你是想擷取 f 的小數部分呢?
# PRESENTING CODE
print(max(1, 3, 5, 9.14561, 16)) # 16
print(min(1, 3, 5, 9.14561, 16)) # 1# PRESENTING CODE
print(True and False) # False
print(True or False) # True
print(not True) # Falsenot (A and B) = (not A) or (not B)
# PRESENTING CODE
str1 = "abc"
str2 = "efg"
print(str1 + str2) # abcefg
print(str1 * 3) # abcabcabcstr1 = "abc"
str2 = "efg"
print(str1[1]) # b
print(str1[2] + str2[0]) # ce# PRESENTING CODE
s = "adc"
s[1] = "b"
# TypeError: 'str' object does not support item assignments = "abZdefg"
ss = s[0:2] + "c" + s[3:7]
print(ss)
你也可以直接用 list 裝 char,我喜歡這麼做
# PRESENTING CODE
ch = "a"
print(ord(ch)) # 97
print(ord(ch)+1) # 98假設今天 ch 是任何一個小寫字母
寫一套程式幫我判斷
ch 是字母表中的第幾個字母
不要查 ASCII 表,你也不需要背
# PRESENTING CODE
假設今天 ch 是任何一個小寫字母
寫一套程式幫我判斷
ch 是字母表中的第幾個字母
不要查 ASCII 表,你也不需要背
ch = "h"
print(ord(ch) - ord('a') + 1)# PRESENTING CODE
str = "A B C D E F G"
a, b, c, d, e, f, g = str.split()
print(d) # Dsen = "I like the night. Without the dark, we’d never see the stars"
a, b = sen.split(". ") # 注意那個空格
print(a)
print(b)# PRESENTING CODE
pi = 3.14159
r = 3
print(f"r = {r}, perimeter = {2*r*pi}, area = {r*r*pi}")content = input()
print(f"Your input = {content}")
# 輸入一個字串,再輸出同樣的東西# PRESENTING CODE
T = 1
print(T) # 1
print(bool(T)) # True# PRESENTING CODE
把 list 的東西,一個一個抓過來代入 function
a, b = map(int, input().split())
print(a+b)
# 堆,你寫出了一個加法器# PRESENTING CODE
若華氏溫度為 F,一個整數
則可經由公式 \(C = (F-32)\div1.8\)
得出攝氏溫度 C
設計一套程式,吃進一個整數 F,輸出 C
C 以向零取整的方式,轉換至整數
F = int(input())
C = (F-32)/1.8
print(int(C))# PRESENTING CODE
給你一個整數 N
把它取絕對值後輸出
# PRESENTING CODE
有個阿罵每秒走 V 公尺
她每走 A 秒就要休息 B 秒才會繼續走
求她 X 秒可以走多少公尺
喔對,雖然有 if-else 或 loop 可能會比較好做
但這題有完全不需要的辦法
頂多你會需要用到一個 min()
# CHAPTER 2
if (condition_1):
...
elif (condition_2):
...
else:
...# PRESENTING CODE
if (condition_1):
...
if (condition_1_1):
...
else:
...
elif (condition_2):
...
else:
...# PRESENTING CODE
# PRESENTING CODE
吃進一個正整數 k
代表學生的百分制分數
輸出它的等第計分
假設使用者給的分數區間
不屬於以上任何一個分數
則輸出 ?
# PRESENTING CODE
X = int(input())
result = "?"
if (X > 100):
pass
elif (X <= 100 and X >= 90):
result = "A+"
elif (X >= 85):
result = "A"
elif (X >= 80):
result = "A-"
elif (X >= 77):
result = "B+"
elif (X >= 73):
result = "B"
elif (X >= 67):
result = "C+"
elif (X >= 63):
result = "C"
elif (X >= 60):
result = "C-"
elif (X >= 50):
result = "D"
elif (X > 0):
result = "F"
print(result)# PRESENTING CODE
2016 APCS 10 月 - pA
吃進三個正整數 a、b、c 代表三角形三邊長
把他們由小到大輸出
再告訴我這個三角形是直角、鈍角、銳角
或根本不存在
# PRESENTING CODE
a = 1
b = 2
a, b = b, a
# 先說,並非每個語言都支持你這麼寫a, b, c = map(int, input().split())
if (a > b):
a, b = b, a
if (b > c):
b, c = c, b
if (a > b):
a, b = b, a# PRESENTING CODE
3
2
1
a, b, c = map(int, input().split())2
3
1
if (a > b):
a, b = b, a2
1
3
if (b > c):
b, c = c, b1
2
3
if (a > b):
a, b = b, a# PRESENTING CODE
a, b, c = map(int, input().split())
if (a > b):
a, b = b, a
if (b > c):
b, c = c, b
if (a > b):
a, b = b, a
print(f"{a} {b} {c}")
if (a + b <= c):
print("No")
elif (a*a + b*b < c*c):
print("Obtuse")
elif (a*a + b*b == c*c):
print("Right")
else:
print("Acute")# PRESENTING CODE
給你兩個數字 a、b,以及 a 與 b 邏輯運算的結果
求 a 與 b 可能用到 AND、OR、XOR 的哪些運算
誒酥魚羹記得來修
這邊連結爛掉了
# PRESENTING CODE
# CHAPTER 2
whille (condition):
...# PRESENTING CODE
whille (True):
...# PRESENTING CODE
# PRESENTING CODE
while (True):
# 這裡每次迴圈都會被執行到
if (condition_1):
continue # 回去第二行
# 如果 condition_1,那這行就不會跑
if (condition_2):
break # 過去第 10 行
# 如果 (condition_1 or condition_2),這行就不會跑
# 這個不在迴圈中# PRESENTING CODE
n = 0
while (n < 100):
n += 1
if (n%2 == 0):
print(n)n = 0
while (True):
n += 1
if (n%2 == 1):
continue
print(n)
if (n>=100):
break
# PRESENTING CODE
print(f"{list(range(1, 10, 1))}") # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(f"{list(range(1, 10, 2))}") # [1, 3, 5, 7, 9]
print(f"{list(range(10, 1, -1))}") # [10, 9, 8, 7, 6, 5, 4, 3, 2]
print(f"{list(range(3, 18, 4))}") # [3, 7, 11, 15]print(type(range(1, 10, 1))) # <class 'range'># PRESENTING CODE
A 是隨便一個變數名稱,B 是一個可迭代的物件
(不可迭代物件還是能用,但順序會亂跳)
for i in range(1, 11, 1):
print(i)# PRESENTING CODE
for i in range(10, 0, -1):
print(i)for i in [1, 3, 5, 7, 9]:
print(i)n = 0
for i in range(1, 11, 1):
n += i
print(n)噢,理論上
現在 APCS 的第一題你都能解了
它的範圍真的就考到迴圈而已
# PRESENTING CODE
2017 APCS 3 月 - pA
給你一個正整數 X
找出 X 的 |奇數位數字和 - 偶數位數字和|
我每次對 X 做 %10,就可以取出末位數字
我每次對 X 做 // 10,就可以踢掉末位數字
最後 X 會變成 0
# PRESENTING CODE
2017 APCS 3 月 - pA
X = int(input())
now = True
# 如果 now 就加進 odd,否則加進 even
odd, even = 0, 0
while (X>0):
if (now):
odd += X%10
else:
even += X%10
X = X // 10
now = not now
print(abs(odd-even))# PRESENTING CODE
2017 APCS 3 月 - pA
X = input()
odd, even = 0, 0
for i in range(0, len(X), 2):
odd += ord(X[i]) - ord('0')
for i in range(1, len(X), 2):
even += ord(X[i]) - ord('0')
print(abs(odd-even))# CHAPTER 2
# PRESENTING CODE
| 元素 element | 5 | 7 | "s" | True | 'a' | "pa" | 31 | 3.1 | [2] |
|---|---|---|---|---|---|---|---|---|---|
| 編號 index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 類型 type | int | int | str | bool | str | str | int | float | list |
# PRESENTING CODE
| 元素 element | 5 | 7 | "s" | True | 'a' | "pa" | 31 | 3.1 | [2] |
|---|---|---|---|---|---|---|---|---|---|
| 編號 index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 類型 type | int | int | str | bool | str | str | int | float | list |
甚至另一個 list,或之後教到的 set、dict、class
# PRESENTING CODE
# 直接宣告一個有起始值的 list
L = [1, 2, 3, 4, 5]
# 宣告一個空的 list
M = []
# 把一坨東西強制轉成 list
N = list(map(int, input().split()))# PRESENTING CODE
L = [1, 2, 3]
print(L[1]) # 2L = [5, 7, "s", True, "a", "pa", 31, 3.1, [2]]
print(L[2])
print(L[7])
print(L[8]) # [2]
print(L[9]) # IndexError: list index out of range# PRESENTING CODE
L = [1, 2, 3]
print(L[0]) # 1
print(L[-1]) # 3
print(L[-2]) # 2
print(L[-3]) # 1# PRESENTING CODE
L = [1, 2, 3]
M = [4, 5, 6]
print(L+M) # [1, 2, 3, 4, 5, 6]
print(L*3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]L = [1, 2, 3]
print(len(L)) # 3# PRESENTING CODE
L = [0] * 100 # 就複製 100 次L = [0] * 100 # 你還是要先設定大小
for i in range(1, 101, 1):
L[i-1] = i # 然後乖乖跑迴圈# PRESENTING CODE
L = [0] * 100 # 就複製 100 次當然如果你想用 -1、None、"empty" 之類的也沒差
# PRESENTING CODE
L = [1, 2, 3]L.append("s")
print(L) # [1, 2, 3, "s"]# PRESENTING CODE
L = [1, 2, 3]L.pop(1)
print(L) # [1, 3]
print(len(L)) # 2
print(L[2]) # IndexError: list index out of range# PRESENTING CODE
L = [1, 2, 3]L.insert(1, "duck")
print(L) # [1, 2, 'duck', 3]但沒事不要這麼做,壞習慣:(
# PRESENTING CODE
L = [0] * 100
for i in range(1, 101, 1):
L[i-1] = i
for it in L:
print(it)# PRESENTING CODE
可以創造出一個包含 [L, R) 所有元素的 list
L = [0] * 100
for i in range(1, 101, 1):
L[i-1] = i
M_1 = [L[i] for i in range(0, 21, 1)]
M_2 = L[0:21]
# M_1 和 M_2 是完全相同的東西
# [1, 2, 3, 4, 5, ..., 20]# PRESENTING CODE
numbers = [1, 2, 3, 4, 5]# 翻譯:我要 "n的平方",對於 "numbers" 裡的每一個 "n"
result = [n ** 2 for n in numbers]result = [] # 1. 先拿空碗
for n in numbers: # 2. 一個個拿
result.append(n ** 2) # 3. 運算 + 放進去# PRESENTING CODE
numbers = [1, 2, 3, 4, 5]# 翻譯:我要 "n平方",對於 numbers 裡的 n,但 "只要偶數"
result = [n ** 2 for n in numbers if n % 2 == 0]result = []
for n in numbers:
if n % 2 == 0: # 多了這層過濾
result.append(n ** 2)# PRESENTING CODE
給你 a, b,代表要觀察的商品代號
總共有 \(N\) 名顧客,接下來 \(N\) 行中
每行會有若干個整數 k,\(1 \leq |k| \leq 100\)
如果 k>0,代表顧客拿了一個代號 k 的物品放進購物車
如果 k<0,代表顧客從購物車中移除一個代號 k 的物品
如果 k=0,代表此行結束,顧客去結帳了
求有多少顧客結帳時,購物車中同時有 a 與 b?
# PRESENTING CODE
代表你陣列開 100 格就夠了
cart = [0] * 117 # 通常會故意開大一點以防萬一很多題目都是類似邏輯,我們會讓 index 代表某種東西,value 代表另一種東西,而 list 負責幫我們儲存這種"一對一的關係"
# PRESENTING CODE
a, b = map(int, input().split())
N = int(input())
ans = 0
for _ in range(N):
line = list(map(int, input().split()))
cart = [0] * 117
for it in line:
if (it == 0):
break
if (it > 0):
cart[it] += 1
else:
cart[-it] -= 1
if (cart[a] > 0 and cart[b] > 0):
ans += 1
print(ans)# PRESENTING CODE
print(2 in con) # Truejudge = False
for it in con:
if (it == 2):
judge = True
print(judge) # Truecon = [1, 2, 3, 4, 5]# PRESENTING CODE
con = list(map(int, input().split()))
N = int(input())
ans = 0
for _ in range(N):
line = map(int, input().split())
cart = [0] * 117
for it in line:
if (it == 0):
break
if (it > 0):
cart[it] += 1
else:
cart[-it] -= 1
judge = True
for it in con:
if (cart[it] <= 0):
judge = False
braek
if (judge) ans += 1
print(ans)# PRESENTING CODE
# PRESENTING CODE
這就是為什麼要先看範測再寫
一般競技程式或 APCS 的題目
記憶體限制都能允許你把 list 開到 1e6 左右
你可以直接盲猜 ( 老實說再更大,時間上也算不出來 )
# PRESENTING CODE
# PRESENTING CODE
m = int(input())
arr = [0] * (m+17)
arr[0] = 0
arr[1] = 1
for i in range(2, m+1, 1):
arr[i] = arr[i-1] + arr[i-2]
print(arr[m-1])# PRESENTING CODE
n 很小,你可以一直掃沒關係
這題跟 list 半點關係都沒有,只是我剛好看到
n 很小,你可以一直掃沒關係
他讀取輸入有點小麻煩
建議用 list(map(int, input().split())) 再代 for 迴圈
# CHAPTER 2
我本來以為這章會很短
但不知不覺做太多了
# PRESENTING CODE
tu_1 = (1, 2)
tu_2 = (3, 4, 5, 6)
tu_3 = (7, "st", 1.34, True)
a, b = 8, 9
tu_4 = tuple(a, b)資料結構:大容器,裡面裝很多變數
Hashable:可以拿來 sort(我等等會講)
# PRESENTING CODE
不可迭代:你不能用 for 去遍歷它
資料結構:大容器,裡面裝很多變數或資料結構
Hashable:可以拿來 sort(我下頁會講)
tu = (1, 2)
print(tu[0]) #1
print(tu[1]) #2
print(tu[2]) # IndexError: tuple index out of range# PRESENTING CODE
string
tu = (1, 2)
tu[0] = 3 # TypeError: 'tuple' object does not support item assignments = "abcdefg"
s[0] = A # TypeError: 'str' object does not support item assignment# PRESENTING CODE
重新宣告一個 tuple 取代原本那一個
tu = (1, 2)
tu = (3, tu[1])s = "abcdefg"
# 補充一下,如果你不打上界,它就會跑到底
s = 'A' + s[1:]
# 所以 s[1:] 就是從 index=1 跑到最後一個字母# PRESENTING CODE
a = (1, 2)
b = (3, 4)
print(a+b) # (1, 2, 3, 4)
print(a*2) # (1, 2, 1, 2)# 因為 index=0 時,3 > 1
print((3, 4) > (1, 2)) # True
# 因為 index=0 時,3 = 3,接著看 index=1
# index=1 時,4 > 2
print((3, 4) > (3, 2)) # True# PRESENTING CODE
不可逆:你可以用 x 算出 f(x),但不能用 f(x) 推出 x
唯一:如果 f(x) = k,那絕對找不到一個 y 使得 f(y) = k
高敏感度:哪怕 x 和 y 只差一點點,f(x) 和 f(y) 也差超多
網站方不可能儲存你密碼的原文嘛,這太蠢了
它只需要在你輸入密碼時,驗證"你有沒有打對"
那它只要檢查 f(x) 即可,就算 f(x) 外洩,駭客也找不到 x
# PRESENTING CODE
有些資料結構
為了讓 push 和 pop 更快
會用一些神奇的東西優化
例如 set 和 dict 用 Hash Table
長右邊這個樣子
# PRESENTING CODE
可能你丟進去時,list 的樣子是 \(L_1\),得到的結果是 \(h_1\)
後來你在這個 list 中 .append() 一個值
現在多個值的 list 叫 \(L_2\),得到的結果是 \(h_2\)
那"優化過的資料結構"就會壞掉
# PRESENTING CODE
例如二維、三維座標。我之後座標一定會用 tuple 存
你可以慢慢培養何時用 tuple、何時用 list 的語感
但至少你要先看懂怎麼用,因為太常出現了
# CHAPTER 2
sorted
# PRESENTING CODE
li = [3, 5, 1, 7, 9, 6, 1.8]
# 把一個整理完的 list 賦值給 li
li = sorted(li)
print(li) # [1, 1.8, 3, 5, 6, 7, 9]# PRESENTING CODE
li = [3, 5, 1, 7, 9, 6, 1.8]
# 把一個整理完的 list 賦值給 li
li = sorted(li)
print(li) # [1, 1.8, 3, 5, 6, 7, 9]有個預設是 False 的參數叫 reverse
把它設成 True 就好
li = [3, 5, 1, 7, 9, 6, 1.8]
# 把 reverse 改成 True
li = sorted(li, reverse = True)
print(li) # [9, 7, 6, 5, 3, 1.8, 1]reverse 預設就是 False,如果你沒有要動可以不特別寫出來
# PRESENTING CODE
給你一堆正整數,然後叫你排序
喔對,Python 的 sorted() 底層實作老快了
絕對不用擔心時間問題
假設有 N 筆資料
最壞情況下只需要 \(N\,log_{2}N\) 次運算就能排序
一般情況下只會更好
比你手動刻的 Bubble Sort (最大運算量 \(N^2\)) 快很多
# PRESENTING CODE
啊嗯,就照做
N = int(input())
L = list(map(int, input().split()))
L = sorted(L)
for it in L:
print(L, end = " ")# PRESENTING CODE
e.g.
日期,先比較年、再比較月、再比較日
月份,電腦看不懂 Jan.、Feb.、Mar. 之類的
因為 tuple 的比較邏輯就是從 index 小的開始比
e.g
(年份, 月份, 日期)、(數字 1~7, 英文簡寫)
# PRESENTING CODE
給你 N 個二維座標,輸出他們排序後的結果
先比較 x,如果 x 相同再比較 y
N = int(input())
coo = []
for _ in range(N):
x, y = map(int, input().split())
# 把 x 和 y 裝進 tuple 後塞進 list
coo.append((x, y))
coo = sorted(coo)
for pos in coo:
print(f"{pos[0]} {pos[1]}")# PRESENTING CODE
給你 N 個字串,輸出最"和諧"的那個字串
和諧的定義:"相異字母數"愈少的字串愈和諧,如果相異
字母數相同,那麼字典序愈小的字串愈和諧
競程領域中常常有這種莫名其妙的詞,不用太在乎
(相異字母數, 字串本身)
# PRESENTING CODE
# 紀錄每個字母出現過幾次,因為不知道字串長什麼樣子,所以我開比較大
alphabet = [0]*100
for ch in row_text:
# 要有個基準把字母校正成 index,那我就選字母 'A' 的 ASCII
alphabet[ord(ch) - ord('A')] += 1
# 相異字母數
repeat = 0
for letter in alphabet:
# 如果這個字母出現的次數大於零,反正就是它有出現過
if (letter > 0):
repeat += 1
開個 list 計算每個字母出現幾次如何
# PRESENTING CODE
N = int(input())
L = []
for _ in range(N):
row_text = input()
# 紀錄每個字母出現過幾次,因為不知道字串長什麼樣子,所以我開比較大
alphabet = [0]*100
for ch in row_text:
alphabet[ord(ch) - ord('a')] += 1
# 相異字母數
repeat = 0
for letter in alphabet:
# 如果這個字母出現的次數大於零,反正就是它有出現過
if (letter > 0):
repeat += 1
# 把他們包成 tuple 丟進 list
L.append((repeat, row_text))
# 現在 list 中最小的就是答案!
L = sorted(L)
# L 中最小的是 L[0],而你要取 L[0] 的第 [1] 項
print(L[0][1])
"""
上面那行和下面等價
smallest = L[0]
print(smallest[1])
"""喔對,簡報中的程式碼區塊是可以用滑鼠滾輪滑動的
# PRESENTING CODE
輸出第二高的山的名字
你可能會想把山的高度和名字
綑在同一個 tuple 裡再排序
# PRESENTING CODE
題目有說"讀取到 EOF",代表這是上古時期的題目
據我所知現在 APCS 不會這樣出了
EOF 是 End Of File 的意思,現在題目都會直接告訴你測資數,總共有 T 筆測資之類
那個我有空再補充,可以先貼下面模板拿去用
while True:
try:
# 把你的 code 寫在這個無窮迴圈裡,要兩個縮排
# 第一行我給你了,可以接著寫
N = int(input())
except EOFError:
# 不要刪掉這行
break# PRESENTING CODE
你可能會想記錄各元素排序前的 index
那可以考慮直接把它丟在 tuple 的最後一項
反正按照題意,最慢最慢,比較到字典序就好
評分找大的、字典序找小的
你可能會想稍微處理一下評分或字串的其中一個
# CHAPTER 2
現在要玩一個遊戲,給你一個 \(1 \times N\) 個格子的長條棋盤
每個格子上都有一個整數,可以是負數
玩家一開始在第 1 格,總共有 \(Q\) 筆操作
求玩家在所有操作中,腳下數字的加總
https://zerojudge.tw/ShowProblem?problemid=o712
https://zerojudge.tw/ShowProblem?problemid=r490
https://zerojudge.tw/ShowProblem?problemid=r489
https://zerojudge.tw/ShowProblem?problemid=q837
https://zerojudge.tw/ShowProblem?problemid=q182
你可以改一下西洋棋騎士問題
# CHAPTER 2
https://zerojudge.tw/ShowProblem?problemid=o713
https://atcoder.jp/contests/abc383/tasks/abc383_c(這是淹水問題但我覺得很簡單)
# CHAPTER 2
# PRESENTING CODE
# CHAPTER 2
https://atcoder.jp/contests/abc155/tasks/abc155_c
# CHAPTER 2
超好笑,這是清大程設上期末考題,果然他們早在 2014 年就喜歡噁心學生
超好笑,這是清大程設上期末考題,果然他們早在 2014 年就喜歡噁心學生
# CHAPTER 2
# CHAPTER 2
# CHAPTER 2
Part. I
li = [1, 2, 3, 4, 5]
for it in li:
print(it, end = 'X')
# 1X2X3X4X5X
print('X'.join(li)) # 1X2X3X4X5(然後換行)# PRESENTING CODE
# PRESENTING CODE
N = int(input())
li = list(map(int, input().split()))
ans = 0
tmp = 1 # 目前累計的樓層數
for i in range(1, len(li), 1):
if (li[i] < li[i-1]):
# 如果下棟更低,那就繼續飛
tmp += 1
else:
# 別飛了,更新答案
ans = max(ans, tmp)
# 看看把現在這棟當起點會不會更好
tmp = 1
# 如果不加這行,你遇到一路遞減的 case 會爛掉,ans = 0
ans = max(ans, tmp)
print(ans)