0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プログラミングよくわからんケモノのABC397

Posted at

ABC397感想

D問題のインパクトがすごい。

A問題

平熱、発熱、高熱を判定するプログラムを作成しろってだけの問題です。

まあただ数値を判定すればいいんですが、小数なので型がfloatであることには気をつけましょう。(一敗)
ちなみに特に10倍にする意味はありません。あんまりfloatを使ったことが無いので不安でこうしましたが、型違いによる判定不可とかになりかねない行為なので、気を付けていきたいです。

python abc397_a.py
print(3 if (x := float(input()) * 10) < 375 else 2 if x < 380 else 1)

B問題

入出の数を合わせろって問題です。

色々やりようはあると思いますが、素直に前から見ていき、
1. 1文字目がoなら修正数+1
2. 2文字目がiなら修正数+1
3. リストの前2文字がi, oであれば、リストを2文字、そうではないなら1文字抜く
とやるのがシンプルだと思います。
後は最後の文字がiだった場合追加で修正+1を入れたり、前から抜いていくのでリストではなくqueueを使用したり、ちょっとした調整をしているくらいです。

python abc397_b.py
import sys
import collections as cs

l = cs.deque(sys.stdin.readline())

ans = 0
while l:
  p = l.popleft()
  
  if p == "i":
    if not l:
      ans += 1
    
    elif l[0] == "o":
      l.popleft()
      
    else:
      ans += 1
      
  if p == "o":
    ans += 1
    
print(ans)

C問題

左右の種類数の和を最大化しろって問題です。

と言っても、仕切りを前後に動かすしかないので、シンプルに前から見ていけばいいと思います。
確認をとっていませんが、流石に一々種類数を数えると間に合わなくなるので一工夫必要ですが、左は入ってきた数字が初めての数字かを確認し、右は抜けた数字が最後の一個であるかを確認すればいいだけです。

左はset、右は辞書型で管理すれば問題ないでしょう。
ちなみに私は左は辞書型で管理しました。お好みで調整してください。

python abc397_c.py
import sys
import collections as cs

N = int(sys.stdin.readline())
l = cs.deque(map(int, sys.stdin.readline().split()))

right_dict = {}
for i in l:
  if i not in right_dict.keys():
    right_dict[i] = 1
    
  else:
    right_dict[i] += 1

left_dict = {}
left_piece, right_piece = 0, len(right_dict.keys())
ans = 0
while l:
  i = l.popleft()
  right_dict[i] -= 1
  
  if right_dict[i] == 0:
    right_piece -= 1
    
  if i not in left_dict.keys():
    left_dict[i] = 1
    left_piece += 1

  ans = max(ans, left_piece + right_piece)
  
print(ans)
    
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?