from sys import stdin
T = int(stdin.readline())
for _ in range(T):
s = stdin.readline().replace('.', '')
# 先將 . 去掉
原長度 = x = len(s)
while(x):
s = s.replace('pq', '')
# 把 pq 抽走
y = len(s)
if(y == x): break
x = y
print((原長度-x)//2)
2020/02/29
[zerojudge] a565: 2.p&q的邂逅
[zerojudge] e446: 排列生成
import sys
a = int(input()) # 只有一行輸入
f = [str(c) for c in range(1, a+1)]
# 輸入 3 --> ['1', '2', '3']
d = permutations(f)
'''
利用 permutations 求全排列
print(list(d)) 可以觀察 d
[('1', '2', '3'), ('1', '3', '2'),
('2', '1', '3'), ('2', '3', '1'),
('3', '1', '2'), ('3', '2', '1')]
'''
for u in d:
sys.stdout.write(' '.join(u) + '\n')
[zerojudge] d518: 文字抄寫 II
import sys
opt = ''
for s in sys.stdin:
w = int(s)
c = 1 # counter init
f = [{} for i in range(26)]
# 每個字母獨立一個 dict
for i in range(w):
s = sys.stdin.readline()
ch = ord(s[0]) - 97
# 讀入字串的第一個字母的 ascii 值
# 在 f 的位置 f[0] 就是 a 的字典
if(f[ch].__contains__(s)):
opt += 'Old! {}\n'.format(f[ch][s])
# 字典已有此字
else:
opt += 'New! {}\n'.format(c)
f[ch][s] = c
# 字典沒有這個字,將 c 紀錄起來。
c += 1
sys.stdout.write(opt.strip())
# 一次印出
[zerojudge] d057: 11494 - Queen
import sys
for s in sys.stdin:
if(s == '0 0 0 0\n'): break
x1, y1, x2, y2 = [int(z) for z in s.split()]
m, n = abs(x1-x2), abs(y1-y2)
r = 2
if(m + n == 0): r = 0 # 同一點
elif(m * n == 0): r = 1 # 同一軸
elif(m == n): r = 1 # 同斜率
print(r)
[zerojudge] d596: 1. 猜九宮格裡的地雷
import sys
# 把每個九宮格的鄰居先建表
d = ({'1': set(['2','4']),
'2': set(['1','3','5']),
'3': set(['2','6']),
'4': set(['1','5','7']),
'5': set(['2','4','6','8']),
'6': set(['3','5','9']),
'7': set(['4','8']),
'8': set(['5','7','9']),
'9': set(['6','8'])})
w = int(sys.stdin.readline())
for i in range(w):
a, b, c = sys.stdin.readline().strip().split()
# d[a] 是可能地雷, d[b] 及 d[c] 是排除的
r = sorted(list(d[a] - d[b] - d[c]))
# 使用減法可以省去很多判斷
# r 為空,表示矛盾。
if r: print(*r)
else: print('Empty')
2020/02/28
[zerojudge] a010: 因數分解
# a010 因數分解 python
import sys
import math
'''
題目說 n <= 1000000
而 n 的質因數 <= sqrt(n)
所以先來建立一個質數表
'''
limit = 1000000
u = int(math.sqrt(limit))
sieve = [0, 0, 2, 3] + [1] * (u - 4)
prime = [2]
for i in range(3, u, 2):
if(sieve[i] == 0):
# sieve[i] 為 0 表示被篩掉了
continue
prime.append(i)
for j in range(i * i, u, i):
sieve[j] = 0
# 你可以 print(prime) 來核對
# print(prime)
def fact(n):
r = []
k = math.sqrt(n)
for x in prime:
if(x > k): break
# 檢查到 n 的平方根
c = 0
while(n % x == 0):
c += 1
n //= x
if(c): r.append([x,c])
# c 是試除的次數
if(n > 1): r.append([n,1])
# 剩餘的數 > 1 必定是質因數
return r
def op(z):
if(z[1] == 1): return str(z[0])
return '{}^{}'.format(z[0], z[1])
# 主程式
for s in sys.stdin:
n = int(s)
f = fact(n) # 先分解
# print(f) 看結果對不對
r = list(map(op, f))
print(' * '.join(r))
'''
假設 n = 100
fact(n) = [[2, 2], [5, 2]]
r = ['2^2', '5^2']
'''
[zerojudge] e700: 星座
import sys
for s in sys.stdin:
m, d = s.strip().split('/')
md = m.rjust(2, '0') + d.rjust(2, '0')
if(md < '0121'): print('摩羯座')
elif(md >= '0121' and md <= '0219'): print('水瓶座')
elif(md >= '0220' and md <= '0320'): print('雙魚座')
elif(md >= '0321' and md <= '0420'): print('牡羊座')
elif(md >= '0421' and md <= '0521'): print('金牛座')
elif(md >= '0522' and md <= '0621'): print('雙子座')
elif(md >= '0622' and md <= '0722'): print('巨蟹座')
elif(md >= '0723' and md <= '0821'): print('獅子座')
elif(md >= '0822' and md <= '0923'): print('處女座')
elif(md >= '0924' and md <= '1023'): print('天秤座')
elif(md >= '1024' and md <= '1122'): print('天蠍座')
elif(md >= '1123' and md <= '1222'): print('射手座')
elif(md >= '1223'): print('摩羯座')
訂閱:
文章 (Atom)