考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

2019-03-01から1ヶ月間の記事一覧

ABC021-B - 嘘つきの高橋くん を解く

ABC021-B - 嘘つきの高橋くん 問題が何言っているのかよくわからない… 最短経路の可能性があるかどうかを求める問題らしいが… とりあえず入力例を見てみよう … なるほど 入力例1とその説明を見てなんとなく問題の意味はわかった 町の数と、出発する町の番号…

ABC020-B - 足し算 を解く

ABC020-B - 足し算 まあ言われた通りやるだけかな… という感じ AとBを連結したものを2倍して出力する 提出したコード # 入力 A,B=map(str,input().split()) # 出力 print(int(A+B)*2) 一つ注意として、連結するためには文字列型である必要があるためmap の第…

ABC019-B - 高橋くんと文字列圧縮 を解く

ABC019-B - 高橋くんと文字列圧縮 与えられた文字列が "aabbbaad" なら "a2b3a2d1" に、 "aabbbbbbbbbbbbxyza" なら "a2b12x1y1z1a1" のように 変換する問題 前から文字を数えていって 違う文字になったらその都度変換・接続していけばいい感じかな 以下は処…

ABC018-B - 文字列の反転 を解く

ABC018-B - 文字列の反転 与えられた文字列について 指定された区間の部分文字列を反転させる操作を何度か行った結果を求める問題 文章の説明だけではわかりにくいので 実際にどのような操作を行うのかを例で確認してみる 文字列:abcdef 区間:3 5 区間:3 …

ABC017-B - choku語 を解く

ABC017-B - choku語 choku語 なる独自のルールを満たす文字列であるかを判定する問題 なんだか難しそう 【定義】 ・空文字列はchoku語 ・choku語の末尾に "ch" をつけた文字列もchoku語 ・choku語の末尾に "o" をつけた文字列もchoku語 ・choku語の末尾に "k…

ABC016-B - A±B Problem を解く

ABC016-B - A±B Problem A, B, C が与えられるのでCが ① AとBを足したものなのか ② AからBを引いたものなのか ③ ①②のどちらとも判断がつかないか ④ ①②③のどれでもないか を判定する問題 A+BとA-Bを計算してそれぞれ見ていけばいい ただし、③に該当する場合は…

ABC015-B - 高橋くんの集計 を解く

ABC015-B - 高橋くんの集計 平均を切り上げで求めよという問題 書き方を知っていれば簡単 >>> 1.5//1 1.0 >>> 2.5//1 2.0 上記のように、Pythonの "//" による割り算は、一見切り捨てに見えるが 実は0に向かって丸めているだけだ よって負の数に変換してから…

ABC014-B - 価格の合計 を解く

ABC014-B - 価格の合計 うーん、問題文が何言ってるかわからない 文章が難しすぎる … 気合で読んでみたところ、与えられた数字 X を2進数に直したとき 1が立っている箇所の an の総和を求めればいいらしい うーん、わかりづらいな 例えば X=5 an = {1, 10, 1…

ABC013-B - 錠 を解く

ABC013-B - 錠 押すと数字が1増える赤いボタンと 押すと数字が1減る青いボタン 数字aを数字bにするためにはそれぞれ何回押すか、という問題 なんだ、|a-b| で楽勝だな! …いや、何か補足があるぞ > 9 のときに赤いボタンを押すと 0 になり、ディスプレイの…

ABC012-B - 入浴時間 を解く

ABC012-B - 入浴時間 秒数が与えられるのでそれを hh : mm : ss の形式に直す問題 何時間かは3600で割れば出るし 何分かは60で割れば出る 難しいことはない 提出したコード # 入力 N=int(input()) # 何時間か求める hh=N//3600 N-=hh*3600 # 何分か求める mm…

ABC011-B - 名前の確認 を解く

ABC011-B - 名前の確認 与えられた文字列の1文字目を大文字に、残りは小文字にして出力する問題 はいはい余裕余裕 Pythonはこういうの得意なんでね 提出したコード # 入力 S=input() # 出力 print(S[0].upper()+S[1:].lower()) S[0] で文字列Sの1文字目を、S…

ABC010-B - 花占い を解く

ABC010-B - 花占い これまた問題文が長いので出力例でも見るか … (よくわからなかった) 問題文読むか仕方ない… ①「好き」「嫌い」「好き」… ②「好き」「嫌い」「大好き」「好き」… 上記2パターンのどちらでも「嫌い」にならないように 花びらの数を減らし…

ABC009-B - 心配性な富豪、ファミリーレストランに行く。 を解く

ABC009-B - 心配性な富豪、ファミリーレストランに行く。 長い問題。競プロ特有の「前半は読む意味のない文章」ってやつですね… どうやら、与えられる数字から 2番目に大きいものを選んで出力する問題のようだ 制約が N (2≦N≦100) とゆるゆるなので、計算量…

ABC008-B - 投票 を解く

ABC008-B - 投票 タイトルの通り「投票」して 一番票数の多い人の名前を出力する問題のようだ 内容は比較的簡単だけど… どうやって実装するんだ? ん? > N(1≦N≦50)N(1≦N≦50) 最大でも50人しかいないのか… これだったら多少非効率なやり方でもいけそうだ 上…

ABC007-B - 辞書式順序 を解く

ABC007-B - 辞書式順序 なんか小難しいことが色々書いてある 諦めるか? …いや、なんだこれ? 入力された文字列より辞書順で早い文字を何でも良いので1つ出力しろ? なんだ、超楽勝じゃん 毎回 "a" を出力すればいいだけ。簡単だ 入力した文字より辞書順で小…

ABC006-B - トリボナッチ数列 を解く(3)

ABC006-B - トリボナッチ数列 を解く(2) の続き MLE 対策をしてコードを修正するも今度は TLE になってしまった …この問題ムズくね? 競プロ初心者が挑戦したら挫折するレベルだろ せめて n の上限が 10^6 じゃなくて 10^5 だったら前回のコードで通ったろう…

ABC006-B - トリボナッチ数列 を解く(2)

ABC006-B - トリボナッチ数列 を解く(1) の続き 提出したコードは MLE になってしまった なんで MLE になったんだっけ? for i in range(3,n): l[i]=l[i-3]+l[i-2]+l[i-1] そうだったこんな調子でリストに馬鹿でかい数字をガンガン入れたから MLE になったん…

ABC006-B - トリボナッチ数列 を解く(1)

ABC006-B - トリボナッチ数列 なんか "数学" って感じだなあ…漸化式? 数学全然わからないので困る まあ式の通りに1から数字を埋めていけば答えが出そうだ 提出したコード l=[0]*100000 # a1=0, a2=0, a3=1 l[0]=0 l[1]=0 l[2]=1 # 入力 n=int(input()) for …

ABC005-B - おいしいたこ焼きの食べ方 を解く

ABC005-B - おいしいたこ焼きの食べ方 うーん… ABC004-B がまあまあ実装重めだったから 今回は実装簡単なものにしたのかな? 「一番できたて」 = 「出来てからの時間が最も短い」数字を選び出力する 簡単な問題 強いて言うなら、入力が複数行あるのがつまづ…

ABC004-B - 回転 を解く

ABC004-B - 回転 4×4の文字列を180度回転させて出力する問題 自分で考えてやる分には簡単だけど プログラムでやるとなると少し厄介そうだ 2次元配列を使うのがいいかな その前に、180度回転させると各座標はどこに移動するのか はっきりさせる必要がある (…

ABC003-B - AtCoderトランプ を解く

ABC003-B - AtCoderトランプ なんか問題の意味がよくわからないな…サンプル見てみるか (サンプル確認) なるほど 一行目の文字列と二行目の文字列が一致していれば "You can win" 一致しなければ "You will lose" を出力すればいいわけか でもって "@" は "…

ABC002-B - 罠 を解く

ABC002-B - 罠 入力された文字列から 'a', 'i', 'u', 'e', 'o' を取り除いて出力すればいい 実装は軽そうだ Pythonは文字列をそのままfor文のin句に入れると一字ずつ取り出してくれるので便利 一字ずつ見ていって 'a', 'i', 'u', 'e', 'o' 以外なら連結して…

ABC001-B - 視程の通報 を解く

ABC001-B - 視程の通報 いきなり面倒臭そうだ… …でもよく読んでみるとそこまで複雑ではない 5パターンの分岐を書けばいいだけじゃん 説明中に書かれている単位は[km]だけど 入力は[m] 直す必要がある 各分岐中の処理は簡単な算数だけど、1桁の場合は十の位を…