焼岳登山記録その2(山頂到着後)
焼岳登山記録その1(登頂まで) - フラニーとやさしい世界 の続きです.
山頂到着後:
前評判通り360度全てが見えて素晴らしい景色だった.ひとまずひとしきり写真を撮りまくった.写真を撮ったり撮ってもらったりした.
お昼ごはんはお湯を沸かしてカップラーメンを食べた.めちゃめちゃおいしい.そういえば昔はカップラーメンとコーヒーの食べ合わせはどうなんだと思ってた気がするけど,いつの間にかなんとも思わなくなってた気がする.
下山まで:
中の湯から来て上高地に下る人が多いことを思うと,中の湯側を見ないのはもったいない気もしたが,帰れなくなってしまうので予定通り上高地に下る.行きですれ違った人が言うには中の湯側はあんまり紅葉って感じではないらしく,その意味では上高地側の方が綺麗な模様.
帰りはほとんど写真を撮らずに下山した.途中のエネルギー補給はアミノバイタルのタブレットを10粒くらい噛んだ気がする.
行きでは暗くて見えなかった田代橋~焼岳登山口のハイキングコースがなかなか綺麗だった.
YAMAPのデータ:
下山後止め忘れて温泉に入ってしまったので30分くらいは余計にカウントされている.かなり疲れたし足もボロボロだけど,今回は途中座り込んでしまうようなことがなかった辺りに若干の成長を感じた.
下山後:
下山後は田代橋徒歩5分の上高地温泉ホテルで入浴した.日帰り入浴は出入り口が分けられていて,気を使わずに使えてありがたいという感じ.なかなかアメニティが充実していて,個人的には石鹸が置いてあるのが嬉しかった.露天風呂が素晴らしく,定員1,2名の桶の風呂が2つ置かれいて,ザバーッとお湯を溢れさせながら入って,桶の縁に両肘を出して王様のように入っていた.結構長居してしまって,全ての身支度を整えてホテルの外に出るまで計1時間くらい使ってしまった.
その後は上高地を適当に散策して帰宅した.入浴に時間を使いすぎて大正池には行けず,田代池まで行って戻ってきた.上高地の写真は上げなくても良いかなという気がするので,登山に関係ありそうなものだけ上げることにする.
バスターミナルまでの道でお腹が減りすぎて限界だったので,平地だけどパワーリキッドをもう1つ食べて,アミノバイタルのタブレットも7,8粒くらい追加した.サプリ系(?)だけでどれくらい行動できるんだろうと思って形のある行動食を減らしていたけど,早朝から夕方までの活動だと流石にもう少し食べた感があるものを摂った方が良いのかもしれない.帰りのバスでは非常食諸々を開けて食べまくった.
バスターミナルでは松本などへの路線バス待ちの人が列を作っていた.全然乗れないというほどではなかったけど,高速バスだとこういう煩わしさがないのも良いところだなあと思ったり.眠れなくてもそれなりに活動はできそうなので,上高地みたいな電車だと行きにくいところに行くときはちょくちょく使っていきたいですね.
おわり.
焼岳登山記録その1(登頂まで)
2020/10/21に焼岳に登ってきて写真を沢山上げたくなったので、ついでに記録を付けようということで書いてみます.
- 行動予定(山と高原地図参照)/実際の行動
登山口まで:
ーさわやか信州号5805便ー
バスタ新宿発(2020/10/20/22:25)
上高地バスターミナル着(05:20)/上高地帝国ホテル前着(05:10)
登山ルート:
田代橋着(05:40)/(05:25)
焼岳小屋着(08:30)/(08:05)
焼岳北峰山頂着(09:40)/(09:35)
下山ルート:
焼岳北峰山頂発(10:30)/(10:55)
焼岳小屋着(11:30)/(11:55)
上高地温泉ホテル着(13:45):入浴/(13:30)
新宿まで:
ーさわやか信州号5806便ー
上高地バスターミナル発(16:10)
バスタ新宿着(20:57)
- 摂取した食料と時刻
・サンドイッチ*1:04:30
・パワーリキッド*1:08:05
・カップラーメン*1:10:15
・パワーリキッド*1:15:30
・アミノバイタルタブレット*18:下山途中から随時
- 登り
登山口まで:
夜行バス自体が初めてで地味に楽しみだった.平日だからかコロナだからか,全員隣が空席だった.ということで多分条件は良かったんだろうが,やはり初心者だからか,初めの休憩地点(談合坂PA)までの1時間くらいしか寝られなかった.昨日起きたのが遅かったので連続時間的には多分大丈夫だろうと思いつつ,若干不安になって,これフラグじゃないよな…などと考える.
元々上高地バスターミナルで降りるつもりだったが,帝国ホテル前にも止まるようで,こっちの方が登山口である田代橋まで明らかに近いので,予定を変更してここで降りることにした.
焼岳小屋まで:
帝国ホテル前でガチ暗闇にいきなり放置されてビビる.とりあえず手探りでヘッドライトを取り出す.まだかなり暗いのですぐに行動するかちょっと悩んだが,めちゃめちゃ寒い(ちょっと後に温度計を見たら0℃になっていた)し周りには吹きさらしの小さな小屋しかないので,とりあえずYAMAPを頼りに田代橋を目指す.上高地バスターミナルで降りる人が多いのは,そっちの方が時間が丁度良いからなのかなあとか考える.10mくらい歩くと看板がある.
コンクリートの道を道なりに歩くと10分くらいで田代橋に着く.予想に反して割と普通の橋だった.老夫婦が星を見ていた.流石に東京よりは見えるけど,もう明るくなってきていたのか,満点の星空という感じではなかった.ちなみにこの日の日の出は06:02らしい.
田代橋から数メートルのところに西穂高への登山口と,上高地温泉ホテル,それから焼岳方面への分岐がある.今回は焼岳に行くので左へ.
ここにも寒さを凌げる場所はないので,とりあえずコンクリートが続く分は歩いてみることにする.
15分くらい歩くと焼岳登山口との分岐がある.
看板を見て登山届を(印刷してきたのに)出し忘れたことに気づく.というか上高地帝国ホテル前からここまでにはそういうところはなかったので,みんなバスターミナルまで乗るのはそのためもあるのかなあなど考える.薄暗い中一人でちょっと怖かったこともあり,QRコードから電子提出しようとも思ったが,寒くてこんなことをしてると指がやられてしまうと思って諦めた.長野に行くときは印刷して持っていくんじゃなくて,あらかじめ電子提出するのが良いんだね.
だんだん明るくはなってきたが,歩くペースは結構遅いはずなのに誰にも追いつかれずかなり心細い.独り言をめっちゃ言いながら歩く.上高地だし熊なんていないだろと思って熊鈴を付けないで歩いてたけど,まさにこの日の前日に上高地のハイキングコース(!)で熊が出ていたらしく,暗がりの中ということもあってちょっとリスキーだったかもしれない.
この梯子まではそこまで足元に注意しなくても歩けるような道がずっと続いて,ひたすら水平距離を稼いだ.正確な地点を忘れてしまったが,この梯子までで焼岳小屋までの4/5くらいを進んでいて,時刻は確かまだ7:00くらいだった.ひょっとして焼岳イージーか?と思ったけどそんなことはなく,ここから一気に急になる(が,あんまり写真を撮ってなかった)
一気に急になる,と書いたけど意外とあっさり開けたところに出る.この辺りは硫黄の匂いが山頂の方から流れてきていて,活火山という雰囲気がしてくる.しばらく低木の群れをクネクネ歩く感じの道が続く.
道なりに進んだ突き当りに名物の10mの梯子がある.
この梯子は毎年10月下旬に撤去されるらしく,そうなるとここが越えられなくて,上高地側からは焼岳に物理的に登れなくなるらしい.
ここを越えるとだんだん北アルプスって感じの美しいゾーンに入ってくる.
山頂まで:
5分くらい休憩して行動再開.看板のYAKE PEAKの方向に進むと,さっきの旧中尾峠とは裏面から小ピークを回り込むような形で,すぐに開けたところに出る.
おおよそコースタイム通りで山頂に到着した.焼岳小屋までは若干巻いてたので,最後の方でペースが落ちたらしい.ルートがわかりにくくて結構緊張しながら歩いたからかなあ.最近ぼちぼち走っていた甲斐もあってか,珍しくバテバテという感じではなかった気がする.
写真をたくさん貼ってだいぶ長くなってきたので, 焼岳登山記録その2(山頂到着後) - フラニーとやさしい世界 に続きます.
ABC155[C]
情弱なのでAtCoder Problemsのサイトの見方がよくわかってなかったが,loginしてみたらACした問題が全て見れてしゅごかった.1日1ACをやっていく気持ちになったので,その初日ということで.とりあえず自分の実力的にアルゴリズム以前に文法が一生覚えられない段階なので,C問題を中心に潰していこうと思う.
ググりながら解いたらおよそ解説PDFの通りになった.初めsetとvectorで別々に管理しようとしてたので頭が悪い.
参考になった記事:C++:std::map の基礎
所属判定はfindよりcountの方が簡単
iteratorからkey,valueを取り出すときの書き方がit->firstみたいになるのって何でこんな文法なんだろう…(it.firstみたいな感じじゃないのは何でなんだろう)
ABC156
修論の影響で生活習慣が後ろ倒しになっていて,晩御飯を食べ終えて部屋に戻ってきてツイッターを見て「そういえば今日ABCだったじゃん!(23時)」って気づくのが3回くらい続いていて,久しぶりの参加になってしまった.
解説PDF:今回のはやけに丁寧で勉強になる.
[C]までは問題なくできた.[C]は全探索に気づかなったので平均取ってN
で割ったのをint
に丸めて,それとそれを+1
したもので決勝戦をやる感じで書いた.計算量を見ましょう.
[D]
これがずっとできなくて終わってしまった.2^n mod 10^9+7
は,
L=10^9+7
,p
を2^p<=L
を満たす最大のp
として,そのp
を求める.n=cp+d
なるc,d
を求める.2^n=(2^d)*(2^p)^c
を計算する.
という方法でなんとか計算した(2^n
をn
についてのforで計算するとO(10^9)
になって間に合わないので,バッチを組むような感じ)けど二項係数がどうしても計算できなかった.
二項係数 (nCr) の計算方法:こうやって計算すれば良いらしい.フェルマーの小定理と繰り返し2乗法.
上で書いた2^n
の方法は計算量がlogになってないから,やっぱり繰り返し2乗法でやりましょうって感じ.
しかしこれはちょっとライブラリを作りたくなる気持ちもわかるなあという感じ…
他
まとまってて良さげだと思った記事:「1000000007 で割ったあまり」の求め方を総特集! 〜 逆元から離散対数まで 〜
追記
ABC152
珍しく[B]までは詰まらず6分半で出せたんだけど,[C]を
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(void){ int N; cin >> N; vector<int> p(N); for(int i=0; i<N; i++){ cin >> p.at(i); } int ans = 1; int threshold = N+1; for(int i = 1; i < N; i++){ if(p.at(i) >= threshold){ continue; } sort(p.begin(), p.begin()+i); if(p.at(0) >= p.at(i)){ ans++; threshold = p.at(i)+1; } } cout << ans << endl; }
とかソートを使って書いてて,TLEが消えなくて発狂していた. 一個ずつ考える要素を増やしていくんだから,最小値は一回ずつ更新していけばわかる.
mespace std; int main(void){ int N; cin >> N; vector<int> p(N); for(int i=0; i<N; i++){ cin >> p.at(i); } int ans = 1; int threshold = N+1; for(int i = 1; i < N; i++){ if(p.at(i) > threshold){ continue; }else{ ans++; threshold = p.at(i); } } cout << ans << endl; }
で良いんだよな…(これは酷い)
結局[D]を書く時間がなくなってしまったけど,i=1,...,N
についてループを書いてi
をi=i_1...i_t
と表示したとして,i_t
とi_1
の間に数字を挟んでいくときに,N
と同じ桁まで来たら,どこまで大きくして良いかはループを書くしかない気がして,そうすると内側のループが最大O(10^4)
になってTLEになってしまうのでは…?とか思っていた.
学んだこと
- char型をint型に変換する方法と注意【数値化 キャスト 文字列変換】:charをintに型キャストするときは
'0'
を引かないと駄目. - 2016/6/21 【c++】vectorとsortの謎(一部の区間だけをソートしたい!):部分ソートの書き方と仕様
- string->intはatoi(...),int->stringはto_string(...)
追記
- 解説PDFの[B]言われてみれば確かにすぎる.[C]も賢いなあ…
- [D]は問題文を誤読していてA<=Bのときだけ考えようとしてたのでどのみち終わっていた.うーん駄目だなあ…
キーエンス2020
[A][C]の2完だった. 最近だとAGC41と第6回ドワンゴも出たけど,修論で忙しくてブログを書いていなかった.そのうち覚えてる範囲で書きたい(まあ全然解けなかったんだけど)
[B]
初めpair
としてソートすれば良いことに気づかなくてアレだった.
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(void){ int N; cin >> N; vector<pair<long long, long long>> vs(N); for(int i = 0; i < N; i++){ cin >> vs.at(i).first >> vs.at(i).second; } sort(vs.begin(), vs.end()); int ans = 1; long long edge = vs.at(0).first + vs.at(0).second; // -1してた for(int i = 1; i < N; i++){ long long right_edge = vs.at(i).first + vs.at(i).second; // -1してた long long left_edge = vs.at(i).first - vs.at(i).second; // +1してた if(edge > right_edge){ edge = right_edge; continue; }else if(edge <= left_edge){ ans++; edge = right_edge; } } cout << ans << endl; }
終わった後にこれでACになったけど,問題文が曖昧だと思った.時間中はコメントしたように提出して一生WA
になってた.問題文は
ただし、各 i (1≤i≤N) に対して、 ロボット i の腕が動く範囲とは 数直線上の座標が X_i−L_i より大きく X_i+L_i 未満の部分を指します。
と言ってるんだから,素直に読んだら腕の長さはL_i-1になると思うんだけど…