1
0

More than 3 years have passed since last update.

Pythonで日立製作所 社会システム事業部 プログラミングコンテスト2020を解きたかった

Posted at

はじめに

こんばんは、tax_freeです。前回のABC(ABC157,158)は忘れていて参加できませんでした。もったいない。
今回は、ARC相当のコンテストでした。私は、A,Bの二つしか解けませんでした。とても悔しい。

A問題

問題

考えたこと
最初は問題文を読み間違えていて3WAも出してしまいました。今回の敗因はここ。
問題文の'hii'はhitachi文字列ではありませんを完全に読み落していました。
最初は、'hi'が含まれていればよいと思ったので

'hi' in [文字列]

でif文にかけていました。
それだけでは、'hii'に対応できないので改善しました。

s = str(input())

checker = True
if 'hi' not in s:
    checker =False

while 'hi' in s:
    s = s.replace('hi','XX')

for i in range(1,len(s)-1):
    if s[i] =='X':
        if s[i-1] == 'i' or s[i-1] == 'h'or s[i+1] == 'i' or s[i+1] == 'h':
            checker = False
            break

if checker:
    print('Yes')
else:
    print('No')

前後の文字まで判別してACが出ました。
A問題だからと油断していました。

B問題

問題

考えたこと
今までの最小金額と今の最小金額を比べて更新していけばいいじゃんという指針で解きました。

a, b, m = map(int,input().split())
a_l = list(map(int,input().split()))
b_l = list(map(int,input().split()))
m_l = []
for i in range(m):
    m_l.append(list((map(int,input().split()))))

m_l.sort(key=lambda x: x[2])
a_l_s = sorted(a_l)
b_l_s = sorted(b_l)
ans = a_l_s[0] + b_l_s[0]

for j in range(m):
    price = a_l[m_l[j][0]-1] + b_l[m_l[j][1]-1] - m_l[j][2]
    if price < ans:
        ans = price

print(ans)

多次元配列のsortの仕方を毎回忘れてしまうので、覚える。

解けなかったD問題

問題

考えたこと
与えられている時間$t$内であればいいので、whileで回せばいいのではと思い書いた。TLEだけでなくWAも出てきたので、指針が間違えている。最後はやけくそになって3回くらいsubmitしてた

まとめ

少しでも競プロから離れていると、すぐに解けなくなることを実感した。学校が休みになったので競プロの勉強もします。
おやすみなさい

1
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
1
0