僕が考えたこととライフハック

自分がやったこととか、経験したことを書いていく。プログラミング、サークル運営、学校生活etc..

#1競プロ ABC061 B-Counting RoadsをMapを使って解いた。

最近、競技プログラミング始めた隆です。

競プロに慣れるため、ABCのAB問題を50~最新まで解いている途中、チーター本に書いてあったことを使えたので書き残しておきます。

 

今回解く問題

https://atcoder.jp/contests/abc061/tasks/abc061_b

2窓で見てくださるとうれしいです。(著作権的なあれでコピペとかダメかなと思ったので・・・)

 

書いたコード

javaです↓

f:id:rynsk02:20190408234307p:plain

強い人が書けばもっとかっこいいコードになるんだろうなと思います・・・

今の僕にはこれが限界・・・・

 

Mapをおさらい

Mapは2つの要素(キーと値)からなる構造。

 

初期化

Map<キーの型名, 値の型名> オブジェクト名 = new HashMap<>();

自分のコードでは

HashMap<Integer, Integer> cnt = new HashMap<Integer, Integer>();

と書いています。

 

要素追加

オブジェクト名.put(キー, 値);

16行目~22行目辺りで使ってます。

 

要素取得

オブジェクト名.get(キー);

Mapに全要素を追加する際と最後の辺りで使ってますね。

キーと対応する値が返ってきます。

 

他にも操作がありますがとりあえずこれだけ・・・・

 

Mapの特性を活かした

Mapは配列のように添え字で管理するのではなく、キーで値を管理するので

16行目の処理でMapを↓のようにして、

{ Key:都市1 / Value:0 ,  Key:都市2 / Value:0 ,   ・・・・,  Key:都市N / Value:0}

20行目からの処理で同じ都市名がputされたらそのキーの値を+1足してあげる、という処理で数え上げます。

 

つまり、Mapをこのように使うと複数あるものの数をfor文1つで数え上げてしまうことができるということです。

便利ですねーーーー!!!!

 

こんな感じです。

最後に

間違ったことを言っていたら教えてください!!よろしくお願いします。

4/6に2回目ABC参加したのですが、実力不足でC問題解けないし、ABもそこまで速く解けていないのでレートがあがる気がしません・・・・が、チーター本とAB問題埋めで力をつけていきたいなと思いますーーーーそして、有益な解法記事を書きたい・・・