記事一覧

彼氏から旦那になる方法をWord2Vecに聞いてみた

■背景 研究で自然言語処理で有名なAttentionの技術を使おうと思い,名著であるゼロから作るDeep Learning 2を勉強していました.そこで,Word2Vecという言葉をベクトルと…

Teppe
2年前
3

ABC225 D問題[双方向連結リスト][リストのアンパック]

■要約  実際に参戦中,なんとなく貪欲に探索すればできそうな気がしたが,実装に至らず. 上のサイトを参考にさせていただくと,どうやら,双方向連結リストというデー…

Teppe
2年前
4

Python データ構造整理[heapq][deque]

■本記事について  今回の記事ではいつもAtcoder中にpythonの普通のリストだと計算量的に間に合わないけどなんかデータ型使えば上手く行けたはず,,,ってのを記事にし…

Teppe
2年前
1

ABC217 D問題

■要約  切っていく場所を順番付きのリストに保存して,c=1のときも2のときも何番目にxがあるか知ればよいから二分探索でその場所を見つければO(NlogN)でイケルと思った…

Teppe
2年前
1

Atcoder 典型90問 076★3[二分探索][累積和]

■要約  問題の流れは理解していたが,実装が難しかったことと,二分探索で条件を満たすRを見つけるという考え方が浮かばなかった.確かに二分探索ならO(logN)で見つける…

Teppe
2年前
2

Atcoder典型90問 069★3[繰り返し2乗法]

■要約 N=1以外の時は,総数がK*(K-1)*(K-2)^(N-2)になることはすぐに分かったが,累乗の計算量はO(N)なのでどうしようかと考えていた.調べたら,繰り返し2乗法というも…

Teppe
2年前

Atcoder 典型90問032 - AtCoder Ekiden(★3)[順列全探索][配列で隣接を評価]

■要約  正直★3の中では今まで解いてきた問題で一番複雑だった.解き方はすぐに思いついた.Nがとても小さいので,①各区間の走り方の全パターンを考えて,②それぞれに…

Teppe
3年前

Atcoder典型90問027(★2)[in][listとset]

■要約  解き方はすぐに思いついた.でてきた単語をリストに入れていって毎回の入力で得た単語がそのリストの中に入っているか確かめていけば良いと考えた.しかし,pyth…

Teppe
3年前
2

ABC 典型90問 010(★2)[累積和]

■要約  生徒は2クラスあって,各クラスのある区間のテストの点数の和を求める問題.まず,①各生徒のテストの点数の保持の仕方に工夫がいる.最初は辞書とかがいいのか…

Teppe
3年前
1

Atcoder典型90問 007(★3)[二分探索]

■要約  問題文通り考えるとQ人の生徒について,N個のクラスを考えないといけないのでO(NQ) = 10^10でだめなことが分かる.そこで今自分が使えるアルゴリズムを考えると…

Teppe
3年前

ABC212 C問題[二分探索]

Difficultty : 246 ■要約  久々に参加したABCで解くことが出来なかった悔しい問題.二重ループでは余裕でTLEなので愚直でないことは分かる.過去に解いた問題で,配列…

Teppe
3年前

Atcoder 典型90問004-★2[前処理][配列処理]

■誤解答 方針自体はすぐに思いついた.求めたい場所に対して縦と横の総和からその場所の値を引けば良いと考え実装.この際,行列の縦と横の総和の取り方が分からず迷う.…

Teppe
3年前

典型90問002[bit全探索][カッコ列]

 大変お久しぶりです.死ぬほど忙しかった修士1年の前期が終わり余裕が出来たので久々に競プロを再開して行きたいと思います.M1前期は就活や授業,研究,学会とてんこも…

Teppe
3年前

ABC 178 C問題 [数学的に解く]

difficulty:653 要約 最初イマイチ問題の意味が掴めなかったが,5分ほど考えて,ようは0~9しか含まないN個の文字列の中で,必ず0,9を含むような文字列のパターンはどのよ…

Teppe
3年前
1

ABC202 参戦記

パフォーマンス:565(A, B, Cの3完) レーティング:344 → 367 3完したけどどうやらC問題が大分簡単だったみたいでパフォーマンスとしてはそんなに.しかしだいぶ本番でC…

Teppe
3年前
3

ABC168 C問題[bit全探索]

要約 C_n円の本がN冊あって,各本について読めばM個の能力がA_nm上がっていき,一番安い値段で,すべての能力がXを超す時の値段を求める問題. 直近のABCの問題でこのよ…

Teppe
3年前
2
彼氏から旦那になる方法をWord2Vecに聞いてみた

彼氏から旦那になる方法をWord2Vecに聞いてみた

■背景 研究で自然言語処理で有名なAttentionの技術を使おうと思い,名著であるゼロから作るDeep Learning 2を勉強していました.そこで,Word2Vecという言葉をベクトルとして扱い,それをニューラルネット(以下NN)を使って推論する技術に出会いました.なんか活用方法が面白そうだったのでggっていたら,"どうしたら「彼女」から「奥さん」になれるかを『Word2Vec』に聞いてみた

もっとみる

ABC225 D問題[双方向連結リスト][リストのアンパック]

■要約

 実際に参戦中,なんとなく貪欲に探索すればできそうな気がしたが,実装に至らず.

上のサイトを参考にさせていただくと,どうやら,双方向連結リストというデータ構造を使えば上手く行ったみたいだ.これは特に難しいことではなく,各番号の前と後ろに何の番号が繋がっているかを保存しておけば良いというものだ.これを使えば,簡単に電車の前後ろに連結しているものだけを保存しておけるので,いちいち今電車がど

もっとみる
Python データ構造整理[heapq][deque]

Python データ構造整理[heapq][deque]

■本記事について

 今回の記事ではいつもAtcoder中にpythonの普通のリストだと計算量的に間に合わないけどなんかデータ型使えば上手く行けたはず,,,ってのを記事にしてまとめておきます.

■リスト型の計算量について

リスト型については上の記事を大変参考にさせて頂きました.下の図は上の記事より引用させて頂いております.要素の挿入や,削除,要素の探索,特定範囲のリストの取り出しはO(n)

もっとみる
ABC217 D問題

ABC217 D問題

■要約

 切っていく場所を順番付きのリストに保存して,c=1のときも2のときも何番目にxがあるか知ればよいから二分探索でその場所を見つければO(NlogN)でイケルと思った.しかし,pythonには順番付きリストというものが存在しないらしい(C++などはあるみたい).平衡二分探索木というものを使えば良いらしいが本番中にはACできなかった.平衡二分探索木の中のAVL木というものを使うと,

上図の

もっとみる
Atcoder 典型90問 076★3[二分探索][累積和]

Atcoder 典型90問 076★3[二分探索][累積和]

■要約

 問題の流れは理解していたが,実装が難しかったことと,二分探索で条件を満たすRを見つけるという考え方が浮かばなかった.確かに二分探索ならO(logN)で見つけることができるので,こういう使い方もできるかのと勉強になった.

 簡単に問題を解く流れを書くと以下のよう.

①連続するピースを表せるように,ケーキ2周分に配列を拡張する.▶ N番目から数える連続するケーキの組み合わせを表現できる

もっとみる

Atcoder典型90問 069★3[繰り返し2乗法]

■要約

N=1以外の時は,総数がK*(K-1)*(K-2)^(N-2)になることはすぐに分かったが,累乗の計算量はO(N)なのでどうしようかと考えていた.調べたら,繰り返し2乗法というものがあり,計算量をO(logN)に減らせる.

説明は他の方々がとてもわかり易いものを記載しているので割愛する.

pythonだとわざわざ実装しなくても

pow(x,y,n)でx^yをnで割ったあまりをO(l

もっとみる
Atcoder 典型90問032 - AtCoder Ekiden(★3)[順列全探索][配列で隣接を評価]

Atcoder 典型90問032 - AtCoder Ekiden(★3)[順列全探索][配列で隣接を評価]

■要約

 正直★3の中では今まで解いてきた問題で一番複雑だった.解き方はすぐに思いついた.Nがとても小さいので,①各区間の走り方の全パターンを考えて,②それぞれに対して噂話を評価して,区間にかかる時間を更新していけばよいと考えた.①については,pythonでは

num = list(range(N))ptn = list(itertools.permutations(num))

のようにす

もっとみる
Atcoder典型90問027(★2)[in][listとset]

Atcoder典型90問027(★2)[in][listとset]

■要約

 解き方はすぐに思いついた.でてきた単語をリストに入れていって毎回の入力で得た単語がそのリストの中に入っているか確かめていけば良いと考えた.しかし,pythonではlist型におけるinの平均計算量はO(N)のため,毎回のループでこれを行うとO(N^2)の計算量が必要になりTLEとなってしまう.これを防ぐ方法は案外簡単で,set型を用いればよい.setは同じ値の重複を許さないような型なの

もっとみる
ABC 典型90問 010(★2)[累積和]

ABC 典型90問 010(★2)[累積和]

■要約

 生徒は2クラスあって,各クラスのある区間のテストの点数の和を求める問題.まず,①各生徒のテストの点数の保持の仕方に工夫がいる.最初は辞書とかがいいのかと思ったがいつか解いた問題で使った,N個の長さの配列を2つ用意してi番目に得点を代入すればよいことが思いついた.次にQ個のクエリについて,毎回指定範囲の和を求めると計算量がO(NQ)でTLEしてしまうことに気がついた.今回はある区間の総和

もっとみる
Atcoder典型90問 007(★3)[二分探索]

Atcoder典型90問 007(★3)[二分探索]

■要約

 問題文通り考えるとQ人の生徒について,N個のクラスを考えないといけないのでO(NQ) = 10^10でだめなことが分かる.そこで今自分が使えるアルゴリズムを考えると,bit全探索/二分探索/累積和ぐらいであり,これらが使えないか考えた.すると,今回の問題は,全部の差を考えるんじゃなくて,生徒Bのレーティングが,クラスのレーティング配列Aのどの値に近ければわかればいいので,配列Aをソート

もっとみる

ABC212 C問題[二分探索]

Difficultty : 246

■要約

 久々に参加したABCで解くことが出来なかった悔しい問題.二重ループでは余裕でTLEなので愚直でないことは分かる.過去に解いた問題で,配列関係の最小の〇〇や,最大の〇〇系はほぼ二分探索というツイートを見て二分探索を使うことは分かったが実装や考え方がさっぱりだった.今回真剣にとき直して,なんとなく苦手意識を持っていた二分探索を理解できた.(気がする..

もっとみる
Atcoder 典型90問004-★2[前処理][配列処理]

Atcoder 典型90問004-★2[前処理][配列処理]

■誤解答

方針自体はすぐに思いついた.求めたい場所に対して縦と横の総和からその場所の値を引けば良いと考え実装.この際,行列の縦と横の総和の取り方が分からず迷う.縦の総和はlistで行けるが,横の総和はnpにしないとsum関数を使って上手くできない.

import numpy as npH, W = map(int, input().split())ans = 0a = [list(map(in

もっとみる
典型90問002[bit全探索][カッコ列]

典型90問002[bit全探索][カッコ列]

 大変お久しぶりです.死ぬほど忙しかった修士1年の前期が終わり余裕が出来たので久々に競プロを再開して行きたいと思います.M1前期は就活や授業,研究,学会とてんこもりでしたのでまた機会があったら振り替えっていきたいと思います.

 友人(tukasくん)に過去問もいいけど典型90問も良いよと進められたのでしばらくは★3以下を解いて入茶を目指していきます.

■方針

"("と")"の2パターンの並び

もっとみる
ABC 178 C問題 [数学的に解く]

ABC 178 C問題 [数学的に解く]

difficulty:653

要約

最初イマイチ問題の意味が掴めなかったが,5分ほど考えて,ようは0~9しか含まないN個の文字列の中で,必ず0,9を含むような文字列のパターンはどのようなものがあるか?という数Aの組み合わせのような問題に帰着した.

ここまで思考できれば,どっかに0か9がこればいいんだけど,それをいちいち全部考えていくことより,逆に0,9を必ず含まない場合を考えて,それを全通り

もっとみる
ABC202 参戦記

ABC202 参戦記

パフォーマンス:565(A, B, Cの3完)

レーティング:344 → 367

3完したけどどうやらC問題が大分簡単だったみたいでパフォーマンスとしてはそんなに.しかしだいぶ本番でC問題までは解けるようになってきたので少し自信になった.

A問題

すべての面は足したら7になるのでもう片方は7-a, 7-b, 7-cになる.

a,b,c = map(int, input().split()

もっとみる
ABC168 C問題[bit全探索]

ABC168 C問題[bit全探索]

要約

C_n円の本がN冊あって,各本について読めばM個の能力がA_nm上がっていき,一番安い値段で,すべての能力がXを超す時の値段を求める問題.

直近のABCの問題でこのような条件から3個選んで..って問題は二分探索を使って解いていたのでそのように解くかと考えていたら,N,Mは共に最大12なので,各本の買い方は最大で2^12 = 4096 = O(10^3)なので全パターン考えても余裕な事に気

もっとみる