jj1gujのブログ

アイコン画像は音速の奇行子 様よりいただきました

ABC154参加(公式バチャ)

ABC154にバーチャル参加しました~
結果はA~Dの4完でした
今回は全部Fortranで出しました(や っ た ぜ)

A問題

$S$ と $T$ のうち $U$ と同じ方を1だけ減らして終わりでした.

B問題

$S$の長さを取得してその分だけ'x'を出力して終わりでした.

C問題

数列$A$をソートして隣り合うもので等しいものがあれば'NO', なければ'YES'を出力して終わりでした.

D問題

各$p _ {i}$について期待値を求め, 累積和をとったあとに$K$の間隔で引き算して終わりでした.

E問題

場合の数でやろうとしましたが$N$の桁数のときの扱い方がわからずに詰みました.
恐らく$i (K \le i \le (Nの桁数-1))$のときは愚直に  9 ^ {K} \times 10 ^ {i-K} \times { } _ i  C _ {K-1} を計算して足していけばいいと思います(間に合うかわかんないけど最大で100桁だから間に合うはず)

F問題

 \sum _ {i=r _ {1} } ^ {r _ {2} } \sum _ {j=c _ {1} } ^ {c _ {2} } {} _ {i+j} C _ {i}
をうまいこと2項定理を使って式変形させてあげれば行けると考えたのですが式変形がうまくいかず(数弱の極み)だめでした.


解説を見たらE問題はDPを使って解く問題だったんですね…
EDPCをもうちょっとまじめにやってたら解けたかもしれない…
F問題はなんか似たようなことを考えてる気もしますが…(正直良くわからん)
とりあえず昨日同じペースでできてれば緑色直前まで行けたっぽいです.
また次がんばります

ABC153参加

ABC153に参加しました.
久しぶりに5完しました!
やったね!
コンテスト成績はこちら
今回はFortranで3完, Pythonで1完, C++で1完でした.

A問題

FortranでACしました.
 H/Aして, 小数点以下を切り上げて終わりでした.

B問題

FortranでACしました.
 A_{i}の総和が Hより大きいかどうか見て終わりでした.

C問題

FortranでACしました.
モンスター全員の体力の総和から, 大きい順に K匹分のHPを引いて終わりでした.

D問題

Python3でACしました.
モンスター全員の体力を Xから \lfloor X/2 \rfloorにする操作を1回としてカウントすることにします.
条件から, 1回の操作でモンスターの数が2倍に増えること, そして最初のモンスターは1匹だけであることから i回目の操作におけるモンスターの数は 2^{i-1}となります.
よってモンスター全員を倒すためには Hを2で割ることのできる回数(商が0より大きくなる回数)を Nとして \sum ^{N} _{i=1} 2^ {i}となることがわかります.
以上から Hを2で何回割れるか数えて \sum ^{N} _ {i=1} 2^ {i}を求めれば終わりになります.

E問題

C++でACしました.
サンプルケースから規則性が見られず, あとはなんか A _ {i}が報酬で B _ {i}がコストっぽく見えたので直感的にDPかな?って思ってみてました.
その後, 制約を見ると HN 10 ^ {7}だったのでここでDPだと確信して紙DPをして遷移式を考えました.
 N H列のdpテーブルを考えたときの遷移式は以下の通りです.

$$ dp[i][j]= \begin{cases} \lceil B[i]/j \rceil \hspace{10pt} (i=1)\\ \min (dp[i-1][j],B[i]) \hspace{10pt} (j \leq A[i])\\ \min (dp[i-1][j],dp[i][j-A[i]]+B[i]) \hspace{10pt} (others) \end{cases} $$


久しぶりの水パフォでHighest更新です!!
やったね!!! 3月末までに緑色がだいぶ射程圏内に入りましたね.
今回のセットは全体を通して統一感と言うかストーリーというかがあってとても楽しかったです.
多分次回は冷えると思いますが極力冷えないようにがんばります.

ABC152参加

ABC152に参加しました.
激冷えしました…
コンテスト成績はこちら
今回遂にFortranで3完しました.

A問題

 N=Mの時にYes、それ以外の時にNoを出力して終わりですね. はい()
提出コードはこちら↓

atcoder.jp

B問題

 min(a,b) max(a,b)回だけ出力して終わりですね. はい()
提出コードはこちら↓

atcoder.jp

C問題

無限に時間を使いました…
最初は隣同士で降順になっているものの数を数えればいいかと思っていたらWAになりました(それはそう).
結局先頭から降順になっているものの数を数えることでACしました.
WAしたコードはこちら↓

atcoder.jp

ACしたコードはこちら↓

atcoder.jp

E問題

問題文から全ての Aについて A _ {i} B_ {i} = A _ {j} B _ {j}となれば良いことから A _ {i} B _ {i} Aの最小公倍数になれば良いことがわかります.
そのため、最小公倍数を求めてから全ての A _ {i}について商を取って足して最後に 10 ^ {9}+7との余りを取れば終わりのはずでした.
計算結果が非常に大きくなることが予想されたためさすがにこの問題はPythonで書きました.
が、

f:id:jj1guj:20200119232811p:plain
はい??
は?
f:id:jj1guj:20200119232903p:plain
制約ギリギリの自作データで試した結果
はああ???
結局これに詰まって時間内にACできませんでした.
悔しい…
f:id:jj1guj:20200119233303p:plain
発狂しまくった後に残った結果
追記
結局最小公倍数を出した後に 10 ^ {9}+7との余りをとり、各 A _ {i}の逆元をかけることでTLEされずにできるようです.
逆元の生成についてはこちらを参考にしました↓

qiita.com

後日ACしたコードはこちらです↓

atcoder.jp


解説読む限りE問題はどうやら最小公倍数を素因数分解した状態で持っておくべきだったようですね.
この前冷えないように頑張ると言ってたのに冷えましたね…
知ってました()
とりあえず3月末までに緑色になれるよう頑張ります.
はああああああああああああ

追記
なんだかんだでFortranで1st ACしてた.
やったね

f:id:jj1guj:20200120104446p:plain
やったぜ!

ABC151参加

ABC151に参加しました.
ratedになってしまいましたね*1
コンテスト成績はこちら
今回はC++で1完、Fortranで2完でした.

A問題

C++で出しました.
C++だと

cout<<(char)(c+1)<<endl;

でできるので便利ですよね*2

B問題

Fortranで出しました.
いちいち平均を求めると面倒だし下手すると数値がずれていってしまうため、必要な合計点から得られた得点を引いていくのが最善ですね.
それで最後に出てきた値がマイナスならゼロにして、満点より値が大きかったら-1を出力すればできました.

C問題

Fortranで出しました.
ほぼほぼ実装ゲーでしたね.
ACしなければペナルティは生えないことを知っていますか?僕は知りませんでした()
ちなみにこれで2ペナ生やしました.

D問題

たぶんDFSすればACできると踏んでいましたがここら辺でお腹が空いたのでご飯を食べにいきました.


できたらFortranで3完したかったですね.
どう考えてもコンテストの途中でご飯食べにいくのどうかしてますよね.
以後気をつけます()
どうやらF問題は恒例の数学問題*3だったようなのでご飯食べに行かずにやるべきでしたね.
まぁとりあえずHighestは更新できたのでよしとしましょう()
いつもHighest更新した後のコンテストではだいたい冷えてるので次はとりあえずレートを冷やさないように頑張ります.

*1:chokudaiさんの坊主頭が見れなくて残念です()

*2:Fortranもひょっとしたらできるのかもしれない(知らん)

*3:こるとんさんがwriterに入るといつも数学問題が出題されてる気がするのは僕だけ??

ABC150参加

ABC150に参加しました.
unratedになってしまいましたね.
コンテスト成績はこちら
今回はPythonで3完でした.

A問題

 500K \geq Xかどうか判定して終わりですね. はい.

B問題

文字列中に"ABC"がいくつあるか数えて終わりでした.

C問題

制約から全列挙で行けることがわかったためPythonのitertoolsを使ってとりあえず全ての順列を列挙しました.
その後、線形探索で与えられた数列がどこにあるか探し、その差の絶対値を取って終わりでした.

D問題

問題文から式変形をし、 X=\frac{a _ {k}}{2} (2p+1)となればいいことが分かり、そこからどうするか考えてたところでunratedが発表されたため、考えるのをやめました. はい()


今回久しぶりに全てPythonでのACでした.
できればどこかでFortranを使えばよかったかもしれません.
なんだかんだ17分で3完できたためratedだったら700超えてたかもですね…
とりあえず今年はレート1000超え目指してがんばります.

アマチュア無線について思うこと

あけましておめでとうございます.
すっかり寝正月ですね*1.
今年もよろしくお願いします.
さて、今日はアマチュア無線関連でTLが少しざわついたのでそのことについてつらつら書いていこうかと思います.

目次

わたしはだれ?

  ぼくはアマチュア無線とプログラミングが好きな大学生です.
最近は卒研配属関連で鬱になってるよ.
アマチュア無線は大学に入ってから始めました.
もともと高校生の時にBCL*2をやってて、そこからアマチュア無線の存在を知りました.
現在は個人局(JJ1GUJ)や社団局(JR1ZTT)コールサインで通常交信からコンテストまで幅広く出ています.
好きな周波数帯は遠くの局と通信できるHF帯で、好きなモードはCW*3です.
詳細はこちらを見てください.

jj1guj.github.io

元ネタというか事の発端と言うか…

  元ネタはここら辺ですかね.

まぁ今回はここら辺を受けて自分自身がアマチュア無線のことをどう思っているかつらつら書いていこうと思います.

アマチュア無線の利点

  アマチュア無線をやる上での利点とするとここら辺があげられるかと思います.
・kHz帯からGHz帯まで幅広い周波数帯で免許を下ろし、運用することができる
・FT8やCWをはじめとするデジタルモードや電話など様々な変調方式で電波を出し通信を行うことができる
  個人的にはAMラジオで使われている周波数帯からスマホで使われている周波数帯まで幅広く使えるのは素晴らしいことだと思っています.

アマチュア無線の欠点

  欠点としてはここら辺が挙げられると思います.
・初期コストが高い
・(いろいろな意味で)ビギナーに優しくない
・やりたいことがあっても情報が見つからない
  やはり初期コストの高さは学生ハムの参入を妨げている大きな要因かと思われます.
多くのビギナーがまず受けるであろう第3級アマチュア無線技士の試験手数料と免許申請料だけで7,000円近くになってしまいます.
そこからさらに開局しようとなると少なくともさらに2万円かかります.
よっぽどやる気がない限りなかなかやる気になれませんね.
一応弊社団では合格した場合や開局する場合には試験手数料や開局申請手数料をはじめとする各手数料は全て部費から支払ってくれる制度があります.
おそらく他社団でもこのような制度があるかと思われます*4.
  (いろいろな意味で)ビギナーに優しくないというのは実際に自身で免許を取得し、交信するようになった時に最も実感したことです.
「この周波数帯はラグチュー*5するための周波数帯だからラグチューする気ないなら電波出すな(意訳)」と言われておじいちゃんのつまらない話に付き合わされたり「30年前のQSLカード*6が来てない、はよ送れ*7」と言われたりして正直やる気無くしました*8.
このような経験を回避するためにはCW等のデジタルモードに逃げるのが手っ取り早いのですが、別途申請が必要だったり訓練をしなくてはならなかったりとなかなか辛いものがあります.
  最後にやりたいことがあっても情報が見つからないというのはぼく自身のサーチ能力がアレというのもあるかと思われます.
ただ仮に情報が見つかったとしても情報量がほぼゼロだったり内輪ネタが多かったり文体が読みづらかったり*9してとりあえずMPが削られます.

むすび的な何か

い か が で し た か 笑 ?
正直なところを述べると先に述べた欠点のうち初期コストの高さは仕方ないにしても残りの2点においてはなんとかしたいよねって感じです(そんな権限はないですが)
特に情報量の少なさについてはいろいろアマチュア無線使って遊んで(そんな余裕あるのか?)その記事を書いていって微力ながら貢献しようと思っています.
まぁこんな感じにいいとこも悪いとこもあるよねって感じです()
(ToDo: 言葉がまとまったら整備する)

参考文献

第三級及び第四級アマチュア無線技士国家試験案内

各級アマチュア無線技士 免許申請のご案内

総務省|関東総合通信局|【申請手数料】申請手数料及び申請用紙の購入先について

*1:ぼくはお雑煮を食べた後爆睡したけど、君は?

*2:ラジオとかテレビの放送を受信して放送局に受信できたよ〜っていうお手紙を送ってベリカードといわれる絵はがきのようなものを集める趣味

*3:いわゆるモールス通信のこと

*4:意外とないっぽい??(よくわからん)

*5:長話のこと

*6:交信した時に交換するカードのこと

*7:そんな前のデータなんてないに決まってる、きっと

*8:まぁその点から見るとよしなにぶった切って電源オフにしてもいい気がする

*9:諸説あるが文末にhiとかつけられると読む気なくす

Github Pagesでテーブルを表示させる方法

Github PagesでMarkdown記法でテーブルを書くとうまく表示されないという問題があったため、これを解決する方法をメモっておきます.

あらまし

僕は自分のwebページをGithub Pagesを使って公開しています.
Github PagesとはGithubMarkdownで書いたファイルをあげるとwebページで公開してくれるなんか、そう、すごいやつです(詳細はググってください).
そこで、自分が出場したアマチュア無線のコンテスト成績を公開しているのですが、その際に以下のように表示されてしまう問題がありました.
f:id:jj1guj:20191220011358p:plain
ちなみにリポジトリ上で見ると下のようにうまく表示されていました.
f:id:jj1guj:20191220011420p:plain

解決方法

どうやら上の事象からMarkdown記法では効かないっぽいのでHTMLで書いたところ、うまく表示されるようになりました.(なんでかは知らん)
f:id:jj1guj:20191220011428p:plain HTMLでの表の書き方はこちらを参考にしてください.

HTMLのtableでテーブルを作る方法と応用テクニックを解説 | webliker

また、CSSで表のスタイルを指定することもできます.
MarkdownCSSを適用させる方法はこちらを参考にしてください.

qiita.com

なんか原因を知っている方がいましたら教えてくださいm(_ _)m