Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【033024三崎】「みさきまぐろきっぷ」で春の三浦半島と城ヶ島に日帰り旅行してみた話

You は何しに三浦半島へ?

時は3年前の秋にさかのぼる。

当時はコロナ禍真っ盛りの時代で、「学校行事は極力中止、ましてや校外学習などもってのほか」の空気で包まれていた。私の高校では、1年次の秋に「城ヶ島巡検」と呼ばれる、城ヶ島の特殊な地質構造の調査を行うフィールドワークをする行事があったのだが、感染対策のためもちろん中止に。

この行事は1年次では主要なイベントの一つであり、個人的に楽しみにしていたので中止はとても残念であった (まあコロナの感染拡大が続いていたので大方予想はしていたのであるが) 。

もう一つ。これは唐突な話だが、私は海鮮系の食べ物が好きだ。いつから好物になったのかは分からないが、家族で回転寿司屋に行くときは朝食を抜くし、定期考査終わりで学校が午前で終わったときの昼食は息抜きに海鮮丼を食べるほどには好きである。

寿司・海鮮丼のネタと言うとまず思いつくのはマグロであろう。三崎漁港は昭和初期から遠洋漁業の基地、特にマグロ基地として栄え、マグロの水揚げ量は国内有数である。全国に13港存在する特定第3種漁港 (水産業の振興に特に重要な漁港) にも、銚子漁港や焼津漁港などと並んで指定されている。私はこれまで三浦半島方面は未開拓であり、三崎のマグロは以前から食べてみたいと思っていた。

コロナ禍も落ち着き高校も卒業したこの春、あのときの未練を果たし、且つ三崎のマグロを味わうには今しかないだろうと思い、三浦半島へ足を延ばすことを思い立ったのである。

...なんか無駄に壮大な話になってしまった。

「みさきまぐろきっぷ」とは?

旅行の計画を立てるにあたって色々調べていると、「みさきまぐろきっぷ」というものが目に入った。

www.keikyu.co.jp

どうやら、京急が大々的に販売している特別な切符らしく、

  • 品川~三崎口間の往復の乗車賃
  • 三浦半島のバス運賃
  • マグロ料理を味わえる食事処での食事代
  • レジャー施設などでのアクティビティ

込々で4000円程度で三浦半島での日帰り旅行を楽しむことができるようだ。品川~三崎口間の往復運賃は約1500円、三浦半島での海鮮料理の相場が1500~2500円程度であることを考えると、これだけで十分元が取れる計算だ。

これは使うしかない。今回の旅行はこの切符を軸に三浦半島城ヶ島を楽しむことにした。

デジタルきっぷの画面。特に乗車券を提示するときは、スクリーンショットではなく、アニメーションが動いている画面を見せる必要がある。

旅程

今回の旅程はこんな感じ。



なお、同じく城ヶ島巡検に未練を持つ高校の友人Aと二人で巡った。当記事中の写真の一部に、Aが撮影した写真を使わせてもらっている。ありがとう。

旅の記録

ここからは、旅行の記録を書いていく。文中に登場する丸囲みの数字は、上述の地図内の番号に対応している。

京急線に乗って都心から一気に三浦半島にGO

3/30 土曜日。時刻は 7:40 である。Aと待ち合わせ場所の①品川駅で落ち合う。

私はこれまで18年東京に住んできているが、京急に乗車するのは実はこれが初めて。

まず驚いたのは駅のホーム床面にずらりと並ぶ整列乗車のタイル。「横浜方面」「羽田空港方面」の行先だけではなく、「都営浅草線直通」「品川駅始発」といった直通の有無、「普通」「特急・快特」といった列車種別によって様々に分けられている。これは私のような初心者では混乱すること間違いなしだろう。日本に観光に来た外国人は果たして理解できるのだろうか。

7:47 特急 三崎口行に乗車。首都圏では珍しい全席クロスシートの車両であった。三浦海岸駅までは1時間10分ほどあるので、クロスシートの座席はとても快適だ。

京急の品川駅にて。クロスシート装備の2100形が来た。

Aとは卒業してから会っていなかったので、大学入学の話やら他のクラスメイトの進路などいろいろ雑談していたら、あっという間に三浦海岸駅到着。時刻は 8:58 である。

三浦海岸駅

駅のプラットホームにも海の香りが風に乗ってやってくる。

レンタサイクルを借りてとりあえず海へ

旅前半の移動についてだが、「みさきまぐろきっぷ」の「三浦・三崎おもひで券」の特典として電動レンタサイクルを3時間借りられるというものがあったので、それを利用することにした。三浦半島の東側をぐるっと回って三崎港方面まで自転車で向かう。

ちょうどいいことに三浦海岸駅の近くにレンタサイクルポート (③SEA-Board三浦海岸駅前ポート)があるので、そこから自転車を借りることにした。

借りた自転車はこんな感じ。

みうらレンタサイクル

普通の電動自転車なのだが、前のバスケットの形が特殊で、前後の幅が少し狭い (この写真だとわかりにくいが) 。リュックの中身がパンパンだと入らないかもしれない。

レンタサイクルポートから2, 3分ほどで④三浦海岸に到着。

三浦海岸

海岸沿いの道路から砂浜に入った瞬間、「ザザーッ」と波の音が耳に入ってくる。左右に広がる長い砂浜。海から吹いてくる風に乗って感じる独特の匂い。都心から1時間ちょっとで来られる海にしては贅沢すぎる気もする。まだ春なので訪れる人も少なく、旅の始めからゆったりとした時間を過ごすことができた。

また、幕張や稲毛海岸あたりの海は東京湾の奥の方に位置しているだけあって波はせいぜい50cmぐらいなのだが、ここ三浦海岸は湾の入り口付近にあるためなのか1mほどの波が打ち寄せており、なかなかに迫力があった。

三浦海岸~剱埼

一通り砂浜を歩いて久しぶりの海を体感したら、県道215号線に沿って自転車で南へ。

道中に多少アップダウンはあるが、電動なので少しの坂なら問題なく進める。

注意したいのは交通量だ。半島の東を通る主要な道路なだけあって、自動車やトラック、バイクなどが数多く走る。途中で観光バスにも抜かれたほどだ。また、三浦半島はサイクリングも人気で、ロードバイクの集団が通過することもしばしば。車道左端には自転車通行位置を示す青い矢印マークがあるものの、向こうもなかなかのスピードを出してくるため追い抜かれるときはまあまあ怖い。十分余裕をもって走行すべきだろう。

海から内陸に入りしばらく進むと、「剱埼」の文字が書かれた青看板が見えるので、その直後の信号の1つ先のT字路を左折 (下のストリートビューのところ) 。



一転して畑の間を走る幅の狭い道路になる。ただ、県道に比べると交通量は少ないので安心できるかもしれない。

奥に灯台が見えてくる

進むにつれ車での対面通行が難しくなるほど道路幅が狭くなってくる。少々不安になるがそのまま自転車を進めていくと、灯台分岐へ到着する。

車はここで行き止まりのようだ

ここから右に進むと剱埼灯台に、直進すると剱埼の磯の方まで出られる。一応右脇に駐車スペースらしきものがあった。

ひとまず灯台の方へ行ってみる。ポールがあるが自転車は通行できそうだったので、手で押しながら急坂を上っていく。

9:55⑥剱埼灯台に到着した。

剱埼灯台。手前はレーダー施設。

そこまで大きな設備を持つ灯台ではないが、海を挟んで反対側に当たる房総半島の館山市洲崎にある洲崎灯台とこの剱埼灯台を結ぶ線が東京湾と太平洋の境界となっており、「東京湾の入口を示す灯台」と言っても過言ではないくらい重要な位置に設置されている。1866年に石造で建造されたが関東大震災で被災。今あるのは震災後にコンクリート造の2代目である。

貞明皇太后陛下行啓記念碑
Illuminated | March 1871 | 明治四年 辛未(かのとひつじ) 正月 十一日 初照
灯台奥の展望台からの景色。向こうに見えるのは千葉県の岩井海岸あたりだろうか。

この灯台はとにかくアクセスが悪く人気もないひっそりとした場所なのだが、このようなマイナーな場所を敢えて巡ってみるのもまた一興。

...と思っていたら、なぜか外国人のツアー客が10人ほどやってきた。追い抜かれた観光バスの人たちだろうか。

では今度は、磯の方へ降りてみることにする。先ほどの分岐点を直進していくと、急な下り坂の後に大きい家が見えてくる。家を左手に見ながら進むと、舗装路が途切れてこんな感じの場所 (⑦剱埼入口) に出る。

車両切り返し用の少し広い空き地がある

この奥に進んでみると...

剱埼

⑧剱埼に来ることができた。

灯台との位置関係はこんな感じ。
複雑に入り組んだ岩礁

三浦海岸に比べてこちらは波が小さく、磯遊びができそうな場所だ。ただ岩礁の一部には海苔のような小さな海藻が張り付いており、大変滑りやすい。実際、Aも足を滑らせて潮だまりに突っこみかけるという事件が発生。今回は笑いごとで済んだので良かったが、水深が深めなところもあるので気を付けよう。

実は剱埼の北側には間口漁港という港があり、そこから歩いてくることもできる。しかも、このまま岩礁をつたって剱埼を回り込み、江奈湾方面まで出ることが可能なのだ。その証拠に、こんな看板が設置されている。

山にしかないと思っていた関東ふれあいの道

足場は決していいとは言えないので、通行時はそれなりの装備が必要だと思う。

磯遊びを楽しんだら、次は2基の風車が特徴的な宮川公園を目指すことにする。

剱埼~宮川公園

T字路までは先ほどと同じ道を戻り、再び r215 に沿って今度は西へ。途中江奈湾や毘沙門湾を横目に、心地よい海風を感じながらペダルをこぐ。なるほど、これはサイクリングが人気になるのも納得かもしれない。

20分ほどで⑨宮川公園に到着。時刻は 10:50

シンボルの風車。

2基の風車が入る画角が見つからなかった

一応展望台もある。下に見えるのは宮川港。

付近にはバイオマス発電施設や三浦市一般廃棄物最終処分場があり、ここ一体がエネルギー関係の施設の集積地のようだ。

また、三浦市はマグロだけでなく大根も有名らしく、公園内には謎のモニュメントが。

マイルストーン(記念撮影用モニュメント)

どうやら三浦半島のサイクリスト向けの写真撮影スポットらしい。ここ以外にも半島部に7か所あるらしい。

さらに、公園内にはソメイヨシノも植えられており、1輪だけ咲いていた。

こういうのも逆に映える。

宮川公園~三崎港

公園内を一回りしたら、もう一度自転車に。さらに西へ進んで三崎港を目指す。

城ヶ島大橋の下を通って三崎港の街並みが見えてくると県道216号線は終点を迎え、県道26号線に引き継がれる。三崎口駅から伸びる三浦半島の幹線道路だ。この辺りになってくると急に人が増えてくる。三崎口駅からはバス一本で来ることができるからだろう。

宮川公園からは10分ほどで三崎漁港に到着。

三崎公園交差点から三崎港を望む。

右側に見える建物はうらりマルシェ。すぐ隣の港から運ばれたマグロや三浦半島の野菜などが販売されている産直センターだ。その建物内にレンタサイクルのポート (⑩みうらレンタサイクル うらりポート) があるので、そこにレンタサイクルを返却。結局2時間ほど乗ったが、時間に縛られず自由に移動できるので、満足度はとても高かった。

昼食はもちろんマグロ

11:25 、ちょっと早いが昼食の時間だ。「みさきまぐろきっぷ」付属の「まぐろまんぷく券」では、みさきまぐろきっぷ加盟店舗が提供するメニューの中から1つを追加料金なしで楽しむことができる。

www.keikyu.co.jp

グルメ : 「丼」, エリア : 「三崎港」を選んで上のリストを見ていると、「まぐろ食堂 七兵衛丸」という店舗が目に留まった。「天然みさきまぐろ!海鮮丼」のボリューム感がたまらない。マグロ目的だったのだが他の魚も食べてみたいと思い、これに決定した。

⑪まぐろ食堂 七兵衛丸はうらりマルシェと道路挟んで向かい側にある。

11時台ですでに大混雑。

もうすでに行列ができていたのでビビったのだが、回転率は意外と悪くなく、20分ほどで入店することができた。

メニューを撮り忘れてしまったのだが、「まぐろまんぷく券」が適用されるメニューは「天然みさきまぐろ!海鮮丼」の他に2つほどあり、どれも美味しそうであった。が、ここは初志貫徹で海鮮丼を注文。

また、せっかくだから海鮮丼の他にも何か食べようということで、壁に掲示してあるメニューを見てみると、数量限定で「びんちょうまぐろ」の刺身があるようだ。店員さんに聞いてみるとまだ残っているということで、それも注文。

日によってこのメニューは変わるらしい。

15分ほどで着丼。

天然みさきまぐろ!海鮮丼 / びんちょうまぐろの刺身

海鮮丼のマグロは新鮮で身が締まっており、普通に美味しい。比べるのは失礼な気もするが、回転寿司チェーンのマグロの独特のシャリシャリ感といったものは全くなく、さすが港町のマグロといった感じ。また、写真では卵焼きの下にある黄色い卵のようなもの (一瞬ウニに見えた) は、マグロの卵とのこと。これは私にとって初体験で、たらことはまた違った硬めの食感。新感覚の味だったので、これは頼んでよかったと思う。実際の価格は1900円ということで、観光地価格な面もあるかもしれない。ただ、「まぐろまんぷく券」を使えばこのあたりは気にせずに済むだろう。

びんちょうまぐろの刺身も食べてみたのだが、これは衝撃の美味しさだった。口の中でとろけるという表現がピッタリ当てはまる感じで、正直海鮮丼より満足度が高かった。「三崎のマグロ」、味わえてよかった。

うらりマルシェ~城ヶ島公園

マグロを食べ終わったら、向かい側の⑫うらりマルシェにちょっと寄ってみる (外観の写真は撮り忘れた) 。

よくある産直センターという感じ。マグロの切り身やカニといった海産物はもちろん、地元の野菜の漬物などが売られていた。一部の商品は試食コーナーも設けられていて、結構人だかりができていた。


さて、時刻は 12:35 。ここからは城ヶ島公園を目指して徒歩で移動していく。レンタサイクルに引き続き乗っていく手もあったのだが、休日は3時間を過ぎると1時間ごとに300円の延長料金がかかるということで、さすがにお財布的に厳しいと判断。

自転車で通った道を少し引き返して城ヶ島大橋へ。

三浦半島
奥にうっすら見えるのは房総半島。

全長は575m。自転車と徒歩での通行は以前から無料で、2020年4月から自動車の通行も無料になったらしい。

城ヶ島

うらりマルシェから50分ほどで城ヶ島公園に到着。時刻は 13:30 である。アップダウンが多くて結構疲れた。

園内の地図

神奈川県が運営していることもあって、トイレなどの設備は割ときれい。

城ヶ島公園内をまわる

とりあえず城ヶ島東端の安房灯台を目指して歩いてみる。途中、2か所に展望台があったのでその写真を載せておく。

⑯第2展望台より。
午前中に訪れた宮川公園の風車 (中央) と、剱埼灯台 (右) が小さく確認できる。

自分たちが通ってきた場所が別な場所から振り返って見れるのってなんかいいよね (語彙力) 。

⑰第1展望台より。すぐ近くに安房灯台が見える。

また、展望台にいて思ったのだが、上空をトビがぐるぐる偵察していた。

こんな間近まで来る。

なんか食べ物とか持ってたら普通に取られそうなので注意した方がいいかも。

そんなこんなで10分ほど歩くと安房灯台に到着。

安房灯台

2020年3月に移転・新規改装し、三浦大根をモチーフにした装飾が施されているそう。なるほど、たしかに根元が緑っぽくなっている。

さて、ここで引き返してもいいのだが、せっかくなら突端まで行ってみようということに。実は、灯台横の階段から下の磯場に降りることができるのだ。

突端までは謎のコンクリートの道がある。

写真中央奥の、道が円を描いているところに三角点がありそこが突端になっている。ただ、このコンクリートの道は、途中で潮だまりに突っ込んで水没したり登るのが難しい急坂になったりしているので、あまり頼りすぎるのもよくない。

城ヶ島東海岸突端からの景色。

打ちつける波はなかなか迫力がある。

下が断崖絶壁なので、高い波が打ち付けるとダイナミックな演出になる。

こんな感じ。

三浦海岸でもそうだったが、なんか波が高いように感じたので調べてみると、どうやら波浪注意報が出ていたようだ。前日は警報も出ていたらしい。普通に危なかった()

さらに気になったのが、潮だまりの水の透明度だ。

底が見える透明度。

水がエメラルドグリーンのようになっている。関東の海でもこんな光景が見れるのかと、ちょっと感動してしまった。

城ヶ島西部を巡る

県立城ヶ島公園はここまで。ここからはザ・城ヶ島とも言うべき名所を巡っていく。

少し時系列が前後するが、ルートはこんな感じ。

城ヶ島ハイキングコース」に沿っていく。

一度城ヶ島公園の駐車場まで戻り、まずは⑳ウミウ展望台へ。

パンフレットとかでよく見る画角。

冬から春にかけて越冬をしにここ城ヶ島へやってくるウミウが日光浴をする姿をここから見られるそうだが、今回は残念ながら見られず。時期的にもう終わってしまったっぽい...?

気を取り直して今度は有名な㉑馬の背洞門へ。そこへ至る道は背の高い草が生い茂り、こんな感じにトンネルのようになっているところも。

木漏れ日が良い感じの雰囲気。

また、ところどころ何者かが足を踏み入れたような跡があり、どうやら下の磯の方につながっているようである。整備されていない上にかなり急坂なので軽い気持ちで侵入するのはお勧めしないが、わたしはこれらを「開拓者の道」と命名することにした。

そうこうするうちに洞門の上に到着。

ちゃんと看板で通れないようになっている。

以前は上を通ることができたらしいが、幅が狭い上に既に亀裂が入っているらしい。仮に渡れたとしてもこれはちょっと怖い。

下に降りて洞門を正面から見てみる。

こうしてみると「かろうじて繋がっている」感がすごい。

馬の背洞門は、波の侵食によって岩がアーチ状に繰り抜かれて形成された海食洞だが、もともとは満潮時に洞門の下を小舟で通航できたのである。しかし、1923年の関東大震災により隆起し、陸上の洞門となった。2024年の元旦に令和6年能登半島地震が発生し、半島の日本海側の海岸線が前進したり港が3mほど隆起して使用不能になったりする現象が確認されたが、それと同じような地震による地殻変動が起きたのである。自然の力は恐ろしい。

洞門横の磯場。これも隆起によっての向きが斜めに傾いている。

洞門の反対側を眺めてみる。

中央左寄りに城ケ崎灯台が見える。

写真には写っていないが、ある場所に人だかりができていたので気になっていってみたら、なんとフォトウェディングが行われていた。風が強かったので大変そうだったが、とても素敵な光景であった。お幸せに。

さて、ここからは島西端にある城ケ崎灯台を目指すのだが、実は灯台まではここから磯伝いに徒歩で到達が可能である。しかし、足場があまり良くない上、3月だというのに気温が25度もあって直射日光もキツかったので、ある程度日陰がある上からのルートを選択。

上から洞門を望む。

こうしてみると、黒い岩が砂浜と海の間にできており、この岩が隆起によって現れたことがよくわかる。

途中にはこんなモニュメントが。

「みはらし広場」より。

洞門から20分ほど歩くと、島西部の長津呂崎に到着。ここでは、城ヶ島の地質構造として有名な㉒火炎構造が見られる。場所は、「相模亭」というレストランのすぐ近く。

レストランが建っている土地の下、白っぽくなっているところに注目。

白っぽい線が見られるところを近くで見るとこんな感じ。

白っぽい模様がまるで炎が揺らいでいるようである。

これが「火炎構造」である。

この構造は地学の資料集にも載っていて、ちょうどAが高校で使っていた資料集を持ってきていたので、並べて撮ってみた。

資料集の撮影地とほとんど同じ。これはアツい。

資料集に載っているような地形は特殊なものが多く、家から日帰りで到達できるようなエリアに存在するのは滅多にないのではないだろうか。今回ここに来て実際の地形を見ることができたのは、本当に貴重な経験だったように思う。

さらに興味深いのは、この近くに断層ができていることである。

左右同じ色の地層がそれぞれ対応していると思われる。

上の写真のように、左側の上盤層がずり下がっている。つまり、これは正断層だ (と思う) 。

断層が露出していること自体はそんなに珍しくない。が、ここまで間近に見られる、かつその上にレストランが建っているというのは驚きである。

長津呂崎には他にもこんな地質構造が見られる。

なんか名前付いてそうだが、高校では地学基礎しかやっていないので分からない。

少し移動して、島西端の㉓シシッパナに行ってみる。

本当ならここから富士山が見えるらしい...

シシッパナからは相模湾を挟んで富士山が見えるとのことだったが、この日は残念ながら黄砂が飛来していたために視界が悪くなっており、見ることはできなかった。

ロックバランシング的な何かをやってみた。

少し北に移動して、観光橋へ。

赤い橋が特徴的。

橋が支えられているのは、写真左下から右上方向にせりあがる岩だ。角度はとても急で、70度以上はあるのではないだろうか。

橋の横には、「鬼の洗濯板」と呼ばれる構造がある。

地学用語で「波食棚」と言うらしい。

岩の種類によって波による浸食の速さも変わる (例えば砂岩よりも泥岩の方が浸食されやすい) 。岩質の異なる地層が交互に重なり合った「互層」が、波で層ごとに異なる速度の浸食を受けてギザギザの地形、まるで洗濯板のようになったのである。

このあたりは釣り場としても適しているようで、多くの釣り人が訪れていた。

続いて、階段を少し登り城ヶ島灯台に到着。

城ヶ島燈臺(とうだい) | 初㸃(しょてん) 明治三年八月三十日 | 震災改築 大正十五年 八月一日

先ほど訪れた安房灯台と対をなす、城ヶ島を代表する灯台だ。西洋式灯台としては日本で5番目に点灯したもので、洋風のシンプルなデザインがその歴史を思わせる。稀にだが、イベント開催時などに内部公開されることがあるらしい。

灯台付近は公園のように整備されており、海の安全を祈願してのものと思われる像があった。

海への祈り

灯台直下は土産物店や食事処が並ぶ商店街になっている。ここまで歩きまくっていてちょっと小腹が空いたので、㉖魚のかねあという店でソフトクリームを購入。

牛乳ソフト。400円。

素朴な味が疲れている体にちょうど良い。こういうのが欲しくなるときもあるよね。

城ヶ島三崎口駅

時刻は 16:00 。4時間ほどいた城ヶ島ともそろそろお別れの時間だ。商店街を通って城ヶ島バス停へ。

城ヶ島バス停からは京急バス三崎口駅へ向かうことになる。所要時間はだいたい30分ほどだろうか。バスの運賃には「みさきまぐろきっぷ」の「京急バス1日乗車券」を適用することができる。

バスに乗って思ったのは、乗車率が大変なことになっているということであった。ちょうど外国人の観光ツアー客が乗っていたこともあって、出発時にバスはパンパン。途中の停留所である三崎港バス停では、20人ほどの積み残しが起こった。一応休日で増便体制にはなっていたものの、城ヶ島三崎口駅間でバスを利用する場合は混雑を覚悟した方が良いかもしれない。

ちなみに、今回は時間の都合上行けなかったのだが、計画では城ヶ島三崎口駅の中間あたりにある「小網代の森」というところに行くはずであった。が、中を回るには最低でも1時間はかかり、この日は17:00で閉場ということで断念。4月以降は18:00まで時間が延びるそうだ。

ということで三崎口駅に到着。

フォント上は"口"だが、文脈上は"ロ"になっている。

帰りも速い京急

17:00 になり、だんだん暗くなってきた。京急線で一気に品川駅へ帰ろう。

せっかくなので駅構内をちょっと回ってみる。

ここも「マグロ化」している。
車止めの後ろに伸びる線路。油壷方面への延伸計画があったらしい。

ちょうど電車がやってきた。最速種別の「快特」で、なんと再び全席クロスシート車両。運がいい。

やっぱりちょっと豪華に感じる。

品川駅までは1時間20分ほど。

鶴見あたりで115km/hに。
done

ということで、 18:25 、品川駅に到着。Aとはここで分かれ、家路についた。

長かった旅もこれにておしまい。

旅を振り返って

今回の旅の目的は

の2つであったわけだが、これは大いに達成できたといえる。教科書に載っている地形を実際に至近距離で観察できたという経験は私の中では初めてで新鮮だった。これが高1の時にリアルタイムで経験できていればより深い学びにつながったのかもしれないが、プライベートで何のしがらみもない状態で行くのもこれはこれで良かったと思う。どうしても課題のことを考えながら観察をすることになって集中できない身なので。また、想定外だったのはその場で衝動的に注文したビンチョウマグロが意外にも美味しかったこと。行く前は想像だにしていなかったところで未知の魅力を発見する、こういうのが旅の醍醐味だと感じる。


今回は冒頭で述べた通り、京急が販売している「みさきまぐろきっぷ」を活用したが、これがマジで便利。京急線内の途中下車もできるし、バスも三浦半島南部のほぼ全区間が乗り放題。平日限定の特典を用意しているところもあるので、余裕があれば平日に利用するのが良いかもしれない。観光客も少ないだろうし。

そろそろゴールデンウイークも始まるので、「サクッと日帰り旅行をしたい」という人には是非この「みさきまぐろきっぷ」を使った三浦半島への旅をおすすめする。ただし、混雑については十分覚悟しておくこと

おわりに

20000字を超える長文記事をここまで読んでいただいた方、本当にありがとうございました。このブログでは初の旅行記を書いてみましたが、いかがでしたでしょうか。これからも1シーズンに1度はどこか旅行に行ってその記録をここにまとめていくつもりですので、どうぞお楽しみに。それではまた。

スマホでもっときれいに写真撮れるようになりたいなぁ...

【AtCoder】ABC 338 A - Capitalized? | 茶コーダーが解くAtCoder

atcoder.jp

実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 21

問題概要

英字からなる文字列  S が与えられる。「 S の先頭が大文字であり、それ以外の文字は全て小文字である」かを判定せよ。

制約

  •  S の長さは1以上100以下。

考察

AtCoderでたまに問われる、英字が大文字または小文字であるかを判定する問題。

C++ においては、英字が大文字かを判定するためにはisupper()関数が、小文字かを判定するにはislower()関数を使えばよい。

あとはループを回して各文字ごとに判定していけばOK。

コード

#include <bits/stdc++.h>
using namespace std;

using ll = long long;

#define rep(i, start, end) for (ll i = (start); i < (ll)(end); i++)

// ======================================== //

int main()
{
    string S;
    cin >> S;

    rep(i, 0, S.size())
    {
        if (!isupper(S[0]))
        {
            cout << "No" << endl;
            return 0;
        }
        else if (i >= 1 && !islower(S[i]))
        {
            cout << "No" << endl;
            return 0;
        }
    }

    cout << "Yes" << endl;
}

atcoder.jp

実装時間: 5分以内

【C++】数値と文字列の相互変換まとめ

AtCoder でしばしば問われる「数値と文字列の変換」。出題のたびにググるのがそろそろ面倒くさくなってきたので、頻出の変換をメモ程度にここにまとめておく。なお、 C++ のバージョンは C++20 である。

数値から文字列に変換する

std::to_string()ですべて対応可能。ただし、小数の変換に関しては、精度を指定することはできない。

リファレンス :

cpprefjp.github.io

例 :

#include <iostream>
#include <string>

int main() {
  int a = 12345;
  double b = 1.23;
  double c = 1.23456789;
  
  std::string s = std::to_string(a);
  std::string t = std::to_string(b);
  std::string u = std::to_string(c);
  
  std::cout << s << std::endl;
  std::cout << t << std::endl;
  std::cout << u << std::endl;
}

出力 :

12345
1.230000
1.234568

数値 (int型) から 文字 (char型) に変換する

特別な関数を用いる必要はない。 C++ では内部的にchar型が連番の整数値で扱われていることを利用して、文字コードでの加算を行って明示的にchar型にキャストするのが良いだろう。1桁の数値に対してのみ有効なことに注意。

例 :

#include <iostream>

int main() {
  int x = 7;
  char c = char(x + '0');
  std::cout << c << std::endl;
}

出力 :

7

文字列から数値に変換する

文字列からint型への変換はstd::stoi()を使用する。同様に、long long型への変換はstd::stoll()が、double型への変換はstd::stod()を使用する。このとき、0埋めは無視される (例参照) 。

また、変換元の数値を表す文字列が変換先の数値型の形式に対応していない場合、例外std::out_of_rangeを返す。

リファレンス (他数値型への変換に対応する関数も掲載) :

cpprefjp.github.io

例 :

#include <iostream>
#include <string>

int main() {
  std::string a = "123";
  std::string b = "0012";
  std::string c = "-12";
  std::string d = "123.456";
  std::string e = "-1234.56000";
  
  int u = std::stoi(a);
  int v = std::stoi(b);
  int x = std::stoi(c);
  double y = std::stod(d);
  double z = std::stod(e);
  
  std::cout << u << std::endl;
  std::cout << v << std::endl;
  std::cout << x << std::endl;
  std::cout << y << std::endl;
  std::cout << z << std::endl;
}

出力 :

123
12
-12
123.456
-1234.56

文字 (char型) から数値 (int型) に変換する

inttocharのときと同じ要領で、文字コードでの減算を行ってから明示的にint型にキャストするのが良いだろう。

例 :

#include <iostream>
#include <string>

int main() {
  char c = '7';
  int x = int(c - '0');
  std::cout << x << std::endl;
  
  std::string s = "12345";
  for(int i = 0; i < s.size(); i++) {
    std::cout << int(s[i] - '0') << " ";
  }
  std::cout << std::endl;
}

出力 :

7
1 2 3 4 5 

【AtCoder】ABC 350 C - Sort | 茶コーダーが解くAtCoder

atcoder.jp

実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 394

問題概要

数列  {1, 2, ..., N} を並び替えてできる数列  A が与えられる。次の操作を0回以上  N - 1 回以下行うことで、  A を昇順にソートしたい。操作回数を  K として、1行目には  K を、続く  K 行には各操作で選ぶ整数  i, j を空白区切りで出力せよ。

  • 操作 :  1 \leq i < \leq j \leq N を満たす整数の組  (i, j) を選び、  A_i A_j を入れ替える。

制約

  • 入力はすべて整数。
  •  2 \leq N \leq 2 \times 10^5

考察

一見するとバブルソートもしくは選択ソートの手順に見えるが、それらの計算量は  O(N^2) であり今回の制約では TLE する。典型のソートアルゴリズムはいったん忘れて、純粋に考えてみよう。

最大操作回数が  N - 1 回であることに注目すると、もっとも思いつきやすいのは次のアルゴリズムだろう。

  1.  A の先頭から  A_i が正しい位置にあるか (先頭から  A_i 番目にあるか、つまり  A_i = i であるか) どうかを判定していく。
  2. もし正しい位置にない場合、  A_j = i となるような  j (i < j \leq N) を求める。
  3.  A_i A_j の位置を入れ替える。

しかし、2の過程で最悪  N - 1 回の探索が必要となり、 TLE となってしまう (例えば、  A_N = 1 のとき) 。


これを改善するために、あらかじめ  A_k = k (1 \leq k \leq N) となるような  k を格納する配列 (ここではposとした) を作成しておき、2, 3の過程をそれぞれ次のように書き換えてみよう。

2'. もし正しい位置にない場合、  j = pos_i とする。
3'.  A_i A_j の位置、  pos_{A_i} pos_{A_j} の位置をそれぞれ入れ替える。

こうすることでこの部分の処理は定数時間で行うことができるようになり、全体として計算量を  O(N) に落とすことができる。


あとはこれを実装していく。各操作で選んだ  i, j の組を出力する必要があるので、処理のしやすさからpair型のvector配列にその組を格納している。

コード

#include <bits/stdc++.h>
using namespace std;

#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)

using Pair_int = pair<int, int>;

// ======================================== //

int main()
{
    int N;
    cin >> N;
    vector<int> A(N + 1), pos(N + 1);
    rep(i, 1, N + 1)
    {
        int a;
        cin >> a;
        A[i] = a;
        pos[a] = i;
    }

    vector<Pair_int> ans;
    rep(i, 1, N + 1)
    {
       if (A[i] != i)
        {
            int j = pos[i];
            swap(A[i], A[j]);
            swap(pos[A[i]], pos[A[j]]);
            ans.push_back(make_pair(i, j));
        }
    }

    cout << ans.size() << endl;
    for (auto p : ans)
    {
        cout << p.first << " " << p.second << endl;
    }
}

atcoder.jp

実装時間: 25分

これが灰Diffの時代になってしまったのか...

【AtCoder】ABC 350 B - Dentist Aoki | 茶コーダーが解くAtCoder

atcoder.jp

実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 45

問題概要

 1, 2, ..., N に歯が1本ずつ生えている。これらの歯に対して、以下の操作を  Q 回行った後に生えている歯の本数を求めよ。

  • 操作 : 穴  T_i に歯が生えている場合、穴  T_i から歯を抜く。そうでなければ、穴  T_i に歯を生やす。

制約

  • 入力はすべて整数。
  •  1 \leq N, Q \leq 1000
  •  1 \leq T_i \leq N

考察

穴に歯が生えているか否かをbool配列で管理しよう。初期状態は全ての穴に歯が生えているのでtrueで初期化しておく。あとは  Q 回の操作をシュミレーションして、最終的なtrueの個数を数えていくだけ。

コード

#include <bits/stdc++.h>
using namespace std;

using ll = long long;

// ======================================== //

int main()
{
    int N, Q;
    cin >> N >> Q;
    vector<bool> teeth(N + 1, true);

    rep(i, 0, Q)
    {
        int T;
        cin >> T;
        teeth[T] = !teeth[T];
    }

    int ans = 0;
    rep(i, 1, N + 1) if (teeth[i]) ans++;

    cout << ans << endl;
}

atcoder.jp

実装時間: 5分以内