AtCoder Beginner Contest098に参加しました
AtCoder Beginner Contestとは?
こんにちはstです。
AtCoder Beginner Contestは、AtCoderで開催されている初心者向けのプログラミングコンテストです。
競技プログラミングと呼ばれている形のコンテストですね。
このコンテストに部員は毎週参加しています。
私はC問題までしかできませんでしたが、D問題を解いている人もいました。すごい。
できなかったなりに解説をしてみようと思います。
(言語はC++になります)
解法
A問題
A+B、A-B、A*Bの最大値を求める問題です。
if文を書いてもいいんですが、std::max()
を使えばスマートに書くことができます。
ただ、3つ以上の最大値をとるときには中に{}をいれなくてはならないので注意が必要です。
こんな感じですね。
cout<<max({A+B,A-B,A*B})<<endl;
ここまで2分ですね。
B問題
すみません。
多分2重ループか3重ループなんでしょうが、脳死していたためsetとsetの二刀流で解きました。
setを使うとすると、
まず、文字列を前から見ていきます。
0から現在いる文字列の添え字(例えばi)までの各文字をset(ここではs1とする)にぶち込み(insert)、重複除去します。
現在いる文字列の添え字(例えばi)から文字列の最後までループを回し、s1.find()でs1に入っているか調べ、あったら新しいset(s2とする)にそれをinsertします。
最後のs2のsizeの最大値をとっておわり。
汚いですが一応載せときます。
for(int i=0;i<S.size()-1;i++){ set<char> s1,s2; for(int j=0;j<=i;j++){ s1.insert(S[j]); } for(int j=i+1;j<=S.size();j++){ if(s1.find(S[j])!=s1.end()){ s2.insert(S[j]); } } if(s2.size()>max){ max=s2.size(); } }
ここまで8分です(遅い
C問題
これですよ。
死んだの。
気づくまで40分かかった。
- Eの数を数える(変数cntに保存)
- 文字列Sを見ていって、S[i]=='E'ならcntを1減らし、S[i-1]=='W'なら1を足す。
- cntの最大になるときの値が答え。
雑ですみません。
D問題
解けず
感想
レートは上がりましたが、見直すところが多かったですね。
(特にset乱用が癖になってる)
こんにちは
ドメインが失効してしまったトホホな話
初めまして、中学部長のstです。
昔むかし、東京都市大学付属中学校・高等学校マルチメディア研究部のWordPressの公式ホームページがありました。
しかし、管理者がいなくてもうドメイン失効させてもいいよね~ってことでドメインが失効。
ここにマル研のホームページは消えてしまった。
でも、なんか日々の活動を紹介するページが欲しいな~ってことでこれをつくりました。
ここで部活動の公開なんかをやっていきたいと思います。
ただ、あらかじめ言っておきますと
- 書いている人は全くプロではない。
- 素人
- 公式が復活したら消えるかもしれない
まあそれでも初心者さんとかの手助けになったり、マルチメディア研究部に少しでも興味をもっていただけたらなと思います。
どうぞよろしくお願いします。
マルチメディア研究部について
活動
プログラミングをはじめ、LEGO、音楽制作、画像制作、3DCGなど、コンピュータを使ってさまざまなことをして日々活動しています。
柏苑祭に向けてゲームやLEGOの作品の展示が主な目標です。
また、プログラミング班はJOI(情報オリンピック)やPCK(パソコン甲子園)の参加、LEGO班はWROの参加などもしています。
作品
準備中です。