Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

第1回競技プログラミング勉強会

104 views

Published on

classi

Published in: Technology
  • Be the first to comment

  • Be the first to like this

第1回競技プログラミング勉強会

  1. 1. 第1回プログラミング勉強会
  2. 2. A: Placing Marbles https://beta.atcoder.jp/contests/abs/tasks/abc081_a
  3. 3. 概要 0または1のついたマスが1~N番目まで与えられるので 1 のついているマスを数え る
  4. 4. 解法例1 0~N-1までループして1のマスの場合はsum++していく S = input() sum = 0 for i in range(len(S)): if '1' == S[i]: sum += 1 print(sum)
  5. 5. 解法例2 0のマスを空文字列に置換してlengthを見る S = input() replaced_string = S.replace('0', '') print(len(replaced_string))
  6. 6. B: 流行 https://beta.atcoder.jp/contests/abc004/tasks/abc004_1
  7. 7. 概要 2*N を出力する print(int(input()) * 2)
  8. 8. C: おいしいたこ焼きの作り方 https://beta.atcoder.jp/contests/abc005/tasks/abc005_1
  9. 9. 概要 x, yが与えられるので y / x を出力 x, y = map(int, input().split()) print(int(y / x)) # 小数点以下を出さないため
  10. 10. D: アルバム https://beta.atcoder.jp/contests/abc008/tasks/abc008_1
  11. 11. 概要 S, Tが与えられるので S~Tにある写真の数を数える 各ページに写真が入っているので (T - S) + 1 を出せば良い S, T = map(int, input().split()) print((T - S) + 1)
  12. 12. E: ハンドルネーム https://beta.atcoder.jp/contests/abc010/tasks/abc010_1
  13. 13. 概要 Sが与えられるので末尾に pp をつける print(input() + ‘pp’)
  14. 14. F: 名前の確認 https://beta.atcoder.jp/contests/abc011/tasks/abc011_2
  15. 15. 概要 Sが与えられるので,1文字目を大文字に それ以外を小文字にする
  16. 16. 解法例1 - 1 1文字目が大文字でないなら大文字に変換する 2文字目以降小文字でないなら小文字にする
  17. 17. S = input() ans = '' # ASCIIコード表で a以上 z以下であれば小文字 if 'a' <= S[0] and S[0] <= 'z': # ASCIIコードを-32すると小文字の場合は大文字になる ans += chr(ord(S[0]) - 32) else: # 大文字だったらそのまま入れる ans += S[0] # 2文字目以降は小文字に変換 for i in range(1, len(S)): # 大文字かどうか if 'A' <= S[i] and S[i] <= 'Z': # 小文字に変換する場合は +32する ans += chr(ord(S[i]) + 32) else: ans += S[i] print(ans)
  18. 18. または言語の組み込み関数があればそれでも良い S = input() print( S[0:1].upper() + S[1:len(S)].lower() )
  19. 19. G: 入浴時間 https://beta.atcoder.jp/contests/abc012/tasks/abc012_2
  20. 20. 概要 N秒が与えられるので,時間:分:秒 の形式にして出力する
  21. 21. 解法例 【秒→時間への変換】 1時間は60秒*60分なので 時間 = N秒 / (60 * 60) 【秒→分への変換】 1分は60秒なので N / 60 ただし時間も考慮しないといけないので, 60分で割った余りを出す 分 = N / 60 % 60 秒は 60で割った余り
  22. 22. H: 雨上がり https://beta.atcoder.jp/contests/wupc2nd/tasks/wupc_02
  23. 23. 概要 0~Nまで各マスに. と x(水たまり) の書いてある文字列が与えられる 0番目からスタートして,その地点から1, 2, 3つ先の区間にまでいける なるべく水たまりを避けた場合に踏む水たまりの数を求める
  24. 24. 解法例1 シミュレーションする 上のような場合は,最初に3つ進んで次に3つ進めばひとつも踏まないので, 答えは0
  25. 25. 解法例1 1度に3つずつしか進めないので,2回目に移動する時にどうしても1つ水たまりを踏ん でしまう 答えは1
  26. 26. 解法例1 N = int(input()) # 3つ先だと配列外参照してしまう場合があるのでてきとうにつけておく S = input() + '......' sum = 0 # iは現在位置を示す i = 0 while i < N: # 現在位置から3つ先が . だったら3つ先のマスに進む if S[i+3] == '.': i += 3 elif S[i+2] == '.': i += 2 elif S[i+1] == '.': i += 1 # 現在位置から1~3つ先全てがxだった場合は,3つ先まで進んで # 水たまりを踏んだ回数(sum)に1を足す else: i += 3 sum += 1 print(sum)
  27. 27. 解法例2 考察してみる 一度に進む歩数は1~3歩と制限があるが 進む回数には制限がない つまり? こういうケースでは ・1歩ずつ3回進む ・3歩で1回進む どちらも変わらない
  28. 28. 解答例2 白が連続している場合は1つにまとめても変わらない
  29. 29. 解答例2 次に水たまりのない部分で分割して, 各水たまりのかたまりを見て,3で割った数を答えの変数 に足していけば良い
  30. 30. 解答例2 2 / 3 = 0 1 / 3 = 0 答えは0
  31. 31. 解答例2 4 / 3 = 1 1 / 3 = 0 答えは1
  32. 32. 解答例2 N = int(input()) # 水たまりの無い部分で分割 S = input().split('.') sum = 0 # 分割した要素に対してループ # 区切り文字で指定したものは勝手に空文字列が入っているの で気にしなくてもおk for i in S: # 3で割った値を答えの変数に足す sum += len(i) / 3 print(int(sum))
  33. 33. I: 2月29日 https://beta.atcoder.jp/contests/code-festival-2014- quala/tasks/code_festival_qualA_c
  34. 34. 間に合わなかった・・・・

×