LoginSignup
0
1

More than 1 year has passed since last update.

AtCoder Beginner Contest 282 A〜C問題をPythonで解いてみました

Last updated at Posted at 2022-12-18

ABC282(AtCoder Beginners Contest 282)
A〜C問題をPythonで解いてみました。

  • コードは雑めです。ゆるしてー
  • 競技プログラミングの勉強一切したこと無いので、テクニックは知らないよ。ごめんねー

A問題

提出コード

k = int(input())
print("ABCDEFGHIJKLMNOPQRSTUVWXYZ"[:k])

文字コードを1ずつ増やしながらループで出してもいいですね

B問題

提出コード

n, m = map(int,input().split())
int_s = []
for s_i in range(n):
  s_i = input()
  int_s_i = 0
  for s_i_ch in s_i:
    int_s_i <<= 1
    if s_i_ch == 'o':
    	int_s_i |= 1
  # print(f"{s_i}={bin(int_s_i)} len(s_i)={len(s_i)}")
  int_s.append(int_s_i)
 
all_bit = (1<<m)-1
pair = 0
for n1 in range(n):
  for n2 in range(n1+1,n):
    if (int_s[n1] | int_s[n2]) == all_bit:
      pair += 1
 
print(pair)

制約で問題数が30までだったのでbit演算で行けると思って書きました。
'o'のところでbitを立てて、bit演算のORを取るとどちらかが1のときbitが立ちますね
あとは全bit立っているかどうかを比較するだけで全問正解できるかどうかがわかります。

C問題

提出コード

n = int(input())
s = input()
kukuri_flag = False
s2 = []
for ch in s:
  if ch == '"':
    kukuri_flag ^= True
  elif not kukuri_flag and ch == ',':
    ch = '.'
  s2.append(ch)

print("".join(s2))

Pythonのstringはimmutable、listはmutableなので、stringの連結は遅いだろうなぁと思いまして。
単純にstringを連結していくよりはlistをappendしていってjoinした方が速いって情報をいくつか見つけたのでそのように実装しました。

感想

アプリサイズ10Kbyte制限のアプリ作った時に、bit演算で論理演算するようなことしてサイズを縮小していたので、その時のことを思い出しました。
条件分岐はJUMP命令があるのでアドレス格納する分データがでかくなるからやっていたノウハウですが、今は使用することのない変態ノウハウですねw
16色のゲームを作った時とか、昔はbit演算はよく使ったんですけど、最近はあまり使いませんねー。

ツッコミ

  • Q B問題、わざわざbit演算しなくてもいいのではって気持ちになった(余計こんがらがりそう)
  • A わたしはbit演算のほうがイメージしやすいんですよ。ちょっと変なのかもしれない
0
1
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
1