ebisukeプログラミング初心者脱出黙示録

30歳を過ぎてから始めたプログラミングと競プロの記録。Pythonで取り組んでいます。Arduinoで電子工作も

AtCoder-ABC226 A - Round decimals / B - Counting Arrays【Python解答例】

AtCoder Beginner Contest226のA とB問題についてPythonの解答例を記事にしていきます。
AtCoder Beginner Contest 226 - AtCoder



AtCoder Beginner Contest226 A - Round decimals

A - Round decimals

問題文

小数第三位までで表すことのできる実数 X が、小数第三位まで入力されます。
X を小数第一位で四捨五入した結果として得られる整数を出力してください。

制約

・0≤X<100
・X は小数第三位までで表現可能である。
・X は小数第三位まで与えられる。

解答例

from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN

x = float(input())

ans = Decimal(str(x)).quantize(Decimal('0'), rounding=ROUND_HALF_UP)

print(ans)

解説

小数第三位まで与えられたとき、小数第一位で四捨五入した結果を答える問題です。

Pythonで四捨五入をするためにdecimalモジュールをインポートします。

解答例のコードで小数第一位を四捨五入することができ、ansを出力してACでした。



AtCoder Beginner Contest226 B - Counting Arrays

B - Counting Arrays

問題文

1 から N までの番号がついた N 個の数列が与えられます。
数列 i は、長さが L i​ で j (1≤j≤L i​ ) 番目の要素が a i,j​ であるような数列です。

数列 i と 数列 j は、 L i​ =L j​ かつすべての k (1≤k≤L i​ ) に対して a i,k​ =a j,k​ が成り立つ時に同じであるとみなします。
同じ数列は 1 種類として数えるとき、数列 1 から 数列 N の中に全部で何種類の数列がありますか?

制約

・1≤N≤2×10 ^5
・1≤L i​ ≤2×10 ^5 (1≤i≤N)
・0≤a i,j​ ≤10 ^9 (1≤i≤N,1≤j≤L i​ )
・すべての数列の要素の個数の和、すなわち ∑ i=1N​ L i​ は 2×10 ^5 を超えない。
・入力はすべて整数である。

解答例

n = int(input())

A = set()
for i in range(n):
    array = input()
    A.add(array)

print(len(A))

解説

N個の数列が与えられたとき異なる数列が何個あるか答える問題です。

数列を文字列で受け取り、setを使うことで同じ数列を除去していきます。

すべての重複を確認したあとで、Aの長さ(個数)を出力すればOKでした。