ferinの競プロ帳

競プロについてのメモ

競技プログラミング

ABC049を解いてみた

abc049.contest.atcoder.jp A問題 入力がa, i, u, e, oならvowel、そうでなければconsonantを出力しました。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 int main(void) { string str; cin >> str; if(str == "a" || str</bits/stdc++.h>…

ABC023を解いてみた

abc023.contest.atcoder.jp A問題 string型で入力を受けとり1桁ずつに区分けし加算していきました。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 int main(void) { int x, ans = 0; string str; cin >> str; for(int i=0;</bits/stdc++.h>…

ABC040を解いてみた

abc040.contest.atcoder.jp A問題 n-1とx-nのうち小さい方を出力しました。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 int main(void) { int n = 0, x = 0; cin >> n >> x; if(x-1 >= n-x) cout << n-x << endl; else c</bits/stdc++.h>…

ABC022を解いてみた

abc022.contest.atcoder.jp A問題 N日目のとき、適正体重かどうかを判定しました。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 int main(void) { int n=0, s=0, t=0, w=0, a[1000], ans=0; cin >> n >> s >> t; cin >> w</bits/stdc++.h>…

ABC041を解いてみた

A問題 入力をString型で受けとりS[i-1]を出力しました。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 int main(void) { string S; int i; cin >> S; cin >> i; cout << S[i-1] << endl; return 0; } B問題 直方体の体積の</bits/stdc++.h>…

ABC042を解いてみた

abc042.contest.atcoder.jp A問題 入力をソートして5, 5, 7になっていればYES, なっていなければNOを出力しました。 a = [int(i) for i in input().split()] a.sort() if a[0] == 5 and a[1] == 5 and a[2] == 7: print("YES") else: print("NO") B問題 ソー…

ABC048に参加してみた

abc048.contest.atcoder.jp A問題 スライスを使って先頭の文字だけを取得して連結しました。 s = [i for i in input().split()] ans = s[0][0:1] + s[1][0:1] + s[2][0:1] print(ans) B問題 ans = b/x - a/x で求まります。aがxの倍数の時だけans++とすれば…

ABC043を解いてみた

abc043.contest.atcoder.jp A問題 1からNまでの和をn(n+1)/2で求めます。 n = int(input()) print(int(n*(n+1)/2)) B問題 sの長さは10以下と非常に短いため、条件に従って答えとなる文字列を操作していけばよさそうです。この方針で実装しました。 s = list(…

ABC044を解いてみた

abc044.contest.atcoder.jp A問題 k k >= n のとき ans = n*x と場合分けできるのでそれに従って実装するだけです。 n = int(input()) k = int(input()) x = int(input()) y = int(input()) if k < n: ans = k*x+(n-k)*y else: ans = n*x print(ans) B問題 …

ABC045を解いてみた

abc045.contest.atcoder.jp A問題 台形の面積の公式を実装するだけです。 a = int(input()) b = int(input()) h = int(input()) print(int((a+b)*h/2)) B問題 Sa, Sb, Sc import sys stra = input() strb = input() strc = input() flag = 1 while True: if …

ABC046を解いてみた

abc046.contest.atcoder.jp A問題 内包表現を使って入力を受けとり、set関数で重複を削除した配列の長さをlen()で数えました。 print(len(list(set([int(i) for i in input().split()])))) B問題 一番左のボールに塗る色がk種類あり、その右のボールの色はk-…

動的計画法

蟻本の動的計画法の漸化式を求める方法を実践してみたメモ例1 ABC021のD問題 abc021.contest.atcoder.jp まず深さ優先探索で全探索を行う。a_i = numのときの取りうるパターン数を返す関数dfs(i, num)をつくり再帰処理を用いて計算しました。 # DFS n = int…

ABC021を解いてみた

A問題 nが8より大きいか、4より大きいか…と貪欲的に判定していきました。 A問題にしては難しいなーと思ったら数字の重複可能なことを見逃してました… n = int(input()) flag = [0 for _ in range(4)] count = 0 if n >= 8: flag[3] = 1 n -= 8 count += 1 if…

ABC020を解いてみた

A問題 qの値に合わせて出力する内容を変えます。 q = int(input()) if q == 1: print("ABC") else: print("chokudai") B問題 文字列として入力をそれぞれ受け取り連結しました。そして、整数型に変換して2倍したものを出力しました。 a, b = input().split()…

ABC019を解いてみた

A問題 入力を配列として受け取り、sort関数を用いてsortしたあと中間の要素を出力しました。 a = [int(i) for i in input().split()] a.sort() print(a[1]) B問題 変数sに入力の文字列を受け取り、先頭から連続した文字が何個続くのかを求め、文字と続く個数…

ABC018を解いてみた

abc018.contest.atcoder.jp A問題 aより大きいbが存在すれば、aの順位は一つ落ちることになります。a, b, cの大小関係を調べこの条件にのっとって順位を表す変数の変更しました。 a = int(input()) b = int(input()) c = int(input()) ranka = 1 rankb = 1 r…

ABC017を解いてみた

A問題 条件に従って処理して出力しました。 a, b = map(int, input().split()) c, d = map(int, input().split()) e, f = map(int, input().split()) #小数にならないことは保証されているので切り捨てとかは気にしないで大丈夫 print(int((a*b/10)+(c*d/10)…

ABC016を解いてみた

A問題 m%d が0かどうかで判断しました。 m, d = map(int, input().split()) if(m%d == 0): print("YES") else: print("NO") B問題 4パターンに場合分けしてelse-if構文で実装しました。 a, b, c = map(int, input().split()) if(a+b == c and (a-b == c or b…

ABC015を解いてみた

A問題 len(a)でaの長さがわかるのでaとbの長さを比較して長い方を出力しました。 B問題 n=100と小さいので全探索で解きました。a[i]が0でないときだけバグ、バグのあるソフトの総数を表す変数に加算していき割って切り上げたものを出力しました。 C問題 n, k …

ABC014を解いてみた

abc014.contest.atcoder.jp A問題 (a%b == 0) のとき0を出力し、そうでないとき(b-(a%b))を出力しました。A問題でif文使うの珍しい気がしました。 B問題 x = bin(x)[2:][::-1] として配列で扱いました。あとはforループで1文字ずつ確かめていって(x[i] == 1)…

ABC013を解いてみた

abc013.contest.atcoder.jp A問題 入力の文字コードとAの文字コードの差をとって出力しました。 B問題 足す方と引く方に10回ずつループして目標の値に到達するまでにかかる回数が短い方を出力しました。 C問題 わからなかったので解説の通りに実装。ynのとき…

ABC012を解いてみた

A問題 a, b を受け取って b, aを出力しました。 B問題 int(n/3600) を時間、その分をnから引いてint(n/60)を分、その分をnから引いた分を秒を表す変数に代入します。そして、zfill()で0パディングして":"と連結して出力しました。 C問題 制約と入出力例から…

ABC011を解いてみた

abc011.contest.atcoder.jp A問題 nが12のときだけn=0にしてn++を出力しました。 B問題 文字列型の配列の形で入力を受け取り、upper()とlower()を利用して1文字目を大文字に、残りの文字を小文字にする処理をしました。 C問題 全探索以外のアルゴリズムを思…

ABC010を解いてみた

A問題 入力と"pp"を連結して出力しました。 B問題 疑似Do-Whileループで2nでも3n+2でもなくなるまで-1していきました。-1した回数を数えてその回数を出力しました。 C問題 n個の家に対して全探索を行い、それぞれの家に寄ってから移動が終了するまでの距離と…

ABC009を解いてみた

abc009.contest.atcoder.jp A問題 入力を2で割って切り上げて出力しました。 B問題 降順でソートして先頭から順番に値を見ていき切り替わったところの値を出力しました。 C問題 思い浮かばなかったので解説よんでコード書きました。実装に手こずってしまい1…

AGC007に参加してみた

リアルタイムでコンテストに参加するのは初めてで緊張しました… 結果はA,Bの2完でした!過去問を解いていた感じではB問題で解けるか五分五分くらいだったので目標の2完が達成できて嬉しいです。B問題を時間ギリギリで解けたときの達成感で競プロのモチベが上…

ABC008を解いてみた

abc008.contest.atcoder.jp A問題 入力SからTまでの数の個数を数えればいいのでT-S+1を出力しました。 B問題 全探索で名前が同じであればその名前の票数に対応する変数を+1し一番票数が多い名前を出力しました。 C問題 部分点狙いの全探索で実装しました。it…

ABC007を解いてみた

abc007.contest.atcoder.jp A問題 入力から1を引いた数を出力しました。特につまずくこともなかったです。 print(int(input())-1) B問題 辞書順で前になるものならば何でもいいということだったので入力がaのときだけ-1を出力しそれ以外ならば辞書順で1番前…

ABC047を解いてみた

abc047.contest.atcoder.jp A問題 それぞれの数が他の2つの和と等しいかどうか確認してどれか1つでも真であれば"Yes"を出力します。特につまずくこともなく成功でした。 B問題 白と黒のどちらで塗りつぶされているかを0と1として管理する変数を用意し、n回ル…

ABC006を解いてみた

abc006.contest.atcoder.jp A問題 一桁なので3のつく数は3のみで、3は3の倍数です。なので、3の倍数かどうかを確かめるだけで判定可能です。あとは出力するだけです。特につまづくことなく成功でした。 B問題 再帰を使った処理だと遅すぎるだろうなーと想像…

ABC004を解いてみた

abc004.contest.atcoder.jp A問題 入力を2倍して出力する問題です。特に引っかかることもなく成功です。 B問題 次のように2次元配列を用意して入力元のデータを2重ループ内で入れ替えていきます。 for i in range(4): for j in range(4): b[i][j] = a[3-i][3…

ABC003を解いてみた

A問題 期待値を求める式は 10000 * (1/N) + 20000 * (1/N) + … + N*10000 * (1/N) = 10000 * (1/N) * (1 + 2 + … + N) = 10000 * (1/N) * (1/2) * N(N+1) = 5000 * (N+1) と変形できたので5000*(N+1)を出力します。 B問題 SとTを1文字ずつ先頭から確かめてい…

ABC002

プログラムの勉強のために競技プログラムを始めてみようと考えてAtCoderのAtCoder Beginner Contest(ABC)に参加してみることにしました。勉強を兼ねて言語は最近始めたPython3でやってみます。まず慣れるためにも過去問(ABC002)を解いてみました。 問題A …