競プロ日記

競技プログラミング超初心者の日記です

きょうのまなび(AOJ)20210505

今日もAOJの問題を解きました

ITP1_9_C:文字列の比較
ITP1_9_D:文字列変換
ITP1_10_ A:距離
ITP1_10_B:三角関数
ITP1_10_C:標準偏差
ITP_1_10_D:ミンコフスキー距離

以下それぞれの雑記

ITP1_9_C:文字列の比較

C++の文字列って<=>の記号で辞書比較できるんだって初めて知った

ITP1_9_D:文字列変換

replace関数のことをすっかり忘れて、for文で地道に解いてた

string使ったけど、reverseとかreplace使うのには配列の方が扱いやすかったかもしれない

ITP1_10_ A:距離

出力時の桁数指定のために使うfixedとsetprecision()をそろそろ諳んじたい

「桁」っていうイメージを強く持ちすぎているせいか、「精度」って意味のprecisionがなかなか思い出せない

prec...まで思い出せれば予測変換でどうにかできるんだけど

トイレにでも貼っとくかな

ITP1_10_B:三角関数

sin(),cos()関数の()の中に入るのがラジアンっていうの忘れてたから、テストしたらとんでもないことになって焦った

忘れないようにメモしておこう

角度からラジアンの変換
M_PI/180.0 * angle

ITP1_10_C:標準偏差

いい感じにfixedとsetprecision()の復習になった

while()文のもっといい書き方ないかなあ、自分の書き方にセンスをあんまり感じないんだよね

あと、久しぶりにaccumulate()使った

調べてみたら文字の連結にも使えるみたい

第4引数についていまいちわかってないけど、使えたら便利そうだからまた勉強しよう

accumulateメモ
accumulate(v.begin, v.end(), 初期値)

ITP_1_10_D:ミンコフスキー距離

ミンコフスキー距離って何?ってなったけど、わかりやすい問題文のおかげでそんなに躓くことなく進んだ

ただ、n乗根の計算の時にpow()でのn乗根で下のような計算の違いが出てちょっと引っかかった

pow(10,1.0/3.0)
→2.1544346900(正解)

pow(10,1/3)
→1.0000000000(不正解)

double N = 1.0/3.0
pow(10,N)
→inf(不正解)

2番目は1/3がint型で計算された結果、小数点以下が切り捨てられて0乗根になったんだろう

でも、1番目と3番目はどう違うんだろう?

解決したらまた追記したい