[白俊]162021929-Python 3


1929.小数を求める


https://www.acmicpc.net/problem/1929

私の答え-成功

M, N = map(int, input().split())
nums = [1]*(N+1)
nums[0], nums[1] = 0, 0

r = int(N**0.5)
for i in range(2, r+1):
    if nums[i]:
        for j in range(i+i, N+1, i):
            nums[j] = 0

for i in range(M, N+1):
    if nums[i]:
        print(i)
私は以前見たエラトステネスの死体でそれを解いた.
大きい数Nに等しいnumsを作成して1に初期化する
2からルートNまでの番号の倍数をすべて0に変更
(0,1度は0)
nums値が1の数字は少数なので、MからNの数字を見て1万個出力できます

1620.私はポケモンマスター李多順です


https://www.acmicpc.net/problem/1620

私の答え-成功

from sys import stdin

N, M = map(int, stdin.readline().split())
ans = [0] * (M)

nums = {}
names = {}
for i in range(N):
    inp = stdin.readline().strip()
    nums[i+1] = inp
    names[inp] = i+1

for i in range(M):
    Q = stdin.readline().strip()
    if Q.isdigit():
        print(nums[int(Q)])
    else:
        print(names[Q])
key値という名前のdicksherry numsと
キー値として数値を作成して保存するバイナリ名
M個の入力を受信してデジタル面numsの値を印刷する
またはnameの値を印刷する
この問題は問題そのものの難易度よりもタイムアウト解決が肝心だ.
  • すべての数値と名前のキー値を1つのdicに格納->タイムアウト
    => {"1": "Pikachu", "Pikachu": "1", ... }
  • nums、名前区切り->タイムアウト
  • をリストに直接保存し、インデックスと値->タイムアウト
  • を使用します.
  • は直ちに印刷せずansに格納され、一次出力->タイムアウト
  • ansに保存する場合、append->タイムアウトではなくサイズを予め指定します
    ... など様々な方法で
  • を使いました
    でもダメだと思いinput()の代わりにstdinを使いましたreadline()の使用
    ディック・シャナリー&stdin.readline()&直接利用出力でパスしました.
    白準Python 3速度の改善
    stdin比
  • input()です.readline()の方が速いです.
  • 注意事項、stdin.readline()は、プリアンブルとともに格納されるためstrip()が必要です.
    数値を入力する場合はstrip()ではなくint()を使用します.
    また、map()の使い方はinput()と同じです
  • リストに追加するのではなく、あらかじめサイズ
  • を指定する.
  • 個の値ごとに印刷()するよりも、文字列の開文字とともに保存し、出力します.
    ex) s += a + '\n' & print(s)
  • 注)https://breakcoding.tistory.com/109