ぷぇ

競技プログラミングとかについて書きます。

AOJ1316/The Sorcerer's Donut

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1316

 

ドーナツに文字が刻み込まれているので、その中から複数回出現する部分文字列の中で最大の長さのものを出力する問題です。

 

入力は長方形に並べられた文字列ですが、端に行くと反対の端から出てくる仕様になっています。(ドーナツに刻み込まれているのを想像すればわかる)

 

長方形全ての文字をそれぞれ始点にした時、それぞれ8方向に探索して部分文字列を得る度にsetに突っ込んで既出だったら答えを更新します。

 

AOJ1316

AOJ2300/Calender Colors

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2300

 

n個の中からm個選んで

 

そのm個の中で作れる全通りのペアについて

 

それぞれの要素について二乗和を求めて

 

全て足した値の最大値を求める問題です。

 

バックトラックで解きましたがもう少し賢く解けそうですね…

 

n個の中でi番目について (選ぶ|選ばない) して

 

再帰的に解いています。

AOJ2300

 

AOJ1275/And Then There Was One

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1275

 

queueを使う練習です。

 

mから始まり、nの次に0になって、m-1で終わる数列に対して

 

最初の一回目と、それ以降k回毎に要素を取り除きます。

 

それ以外の時は取り除いた要素をqueueの末尾に追加します。

 

これを要素数が1になるまで繰り返すだけ。

 

queueの操作は、先頭を参照がqueue.front(),

 

先頭を削除がqueue.pop()です。先頭とは、queueの中で

 

一番古くに追加された要素を指します。

 

AOJ

AOJ1180/Recurring Decimals

 

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1180&lang=jp

 

シミュレーションします。

 

数→文字列→数と変換し、その過程でsortをはさみます。

 

生成した文字列は出現済みということでmapに投げて管理します。

 

sprintf, map, reverse, atoi辺りはサッと使えるようにしたいですね。

 

AOJ

AOJ2400/You Are the Judge

 

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2400

 

sortを楽にするためにpairを入れ子にする。

 

pairをsortに投げるとfirst, secondの順にsortしてくれるため、

 

sortの優先順位が高い順にpairの中身を決める。

 

昇順と降順をデータの種類ごとに変えてソートするときは

 

降順にしたいデータの正負を逆転して昇順でソートする。

 

string型の比較は ==, != でもできる。

 

AOJ