あるごリズム備忘録

学んだことの記録と日記

競プロの記録 (2016_09_10)

今日は新規7問、再解答3問を解いた。

1問目:yukicodere_No.069
No.69 文字を自由に並び替え - yukicoder

要素にstringを持つ配列はsortできるけど、string自体をsortすることはできない。(たぶん)
今回は26持ち分のカウントを作って、それが一致しているかを見た。

2問目:yukicodere_No.070
No.70 睡眠の重要性! - yukicoder

分単位に直して、起きた時刻から、寝た時刻を引けばよい。
差が負になったら24時間を足す。
時計の図的にイメージすれば、この24時間を足す処理は自明だが、
これもまた場合分けでやってしまった。
こういう風なアイディアはどうすれば思いつくようになるのだろうか。
yukicoderの星1のような問題を解き続けて慣れることが、それにつながる気がする。
補足。
VisualStudioだとscanf()が使えず、scanf_s()にする必要があるが、提出の時はscanf()に直す必要があるようだ。

3問目:yukicodere_No.079
No.79 過小評価ダメ・ゼッタイ - yukicoder

投票数を配列に保存して、後ろの方から票数の大きいものを探していけばよい。

4問目:yukicodere_No.082
No.82 市松模様 - yukicoder

市松模様は前後左右が異なる色になっている。
これは左上のマスからのマンハッタン距離の偶奇で塗る色を決定できる。

5問目:yukicodere_No.083
No.83 最大マッチング - yukicoder

できるだけ「1」(2本分)を使って数値の桁を増やしたほうが良い。
最大桁の数字に関しては、Nが奇数の時は「7」、偶数の時は「1」にする。
他の数字に関しては考える必要がない。
自分にしてはよく思いついたなと思う。
今回のように「この難易度で、こんなに場合分けやパターンを考えるハズがない。」と、
感じたときは、たいていこのようなひっかけがある。

6目:yukicodere_No.088
No.88 次はどっちだ - yukicoder

コマの数の偶奇だけで決まる問題。実は局面は無意味。
先手の名前によって出力を変えなくてはいけない。
はじめ、入力があった時点で先手後手の名前を登録していたがそんなものは必要ない。次のように書ける。

if ((S == "oda") == (cnt % 2 == 0)) cout << "oda "<< endl;
else cout << "yukiko" << endl;

7問目:yukicodere_No.089
No.89 どんどんドーナツどーんといこう! - yukicoder
断面積に断面の重心動く距離をかけてものが体積になる。
これは感覚的に計算してしまったけど、ちゃんとパップス・ギュルダンの定理というもので証明されているらしい。
(補足)
C++(VisualStudioだけ?)でM_PIを使うときは、次のようなマクロと、インクルードが必要らしい。
>|cpp
#define _USE_MATH_DEFINES
#include
|