かっつのメモ帳

主に競プロ 時々日記

初めてのRime作業(困った事)

純粋培養な僕がWUPC4th開催にあたって、色々パソコンカタカタ分からん!ってなった所のメモを残しておきます。

当方gitを触るのも初経験でございました…(この機会に触れられてかなり良かった、周りの環境が競プロerだと気兼ねなく質問しやすい(当社比))

rimeの基本的な使い方についてはbeetさんの記事が詳しいです。期間中幾度となくお世話になりました。

beet-aizu.hatenablog.com

Rimeのinstall方法

beetさんの記事で分かりやすく書いてあります。

ただ僕ここでもpipってなんだ、みたいになってやや時間を食った記憶があります、がまあ僕ですら色々調べてたら出来たので多分何とかなります。

gitのセットアップ

ここからやりました。

$ git config --global user.name "username"
$ git config --global user.email "email address"
$ git config --global user.name 
$ git config --global user.email

で正しく設定できてるか確認。

gitのコマンド叩いたらエラーを吐かれた

warning: unable to access '/.config/git/attributes': Permission denied

qiita.com

この記事を読んで解決しました。

一応軽く書いておくと、

$ cd ~/
$ ls -al

でファイルの所有者を見ると、 .configの所有者がrootになってるのが原因でした。

Unable to access 'git/attributes' - Stack Overflow

ここに載ってるコマンドを適当に叩いてたら直った!!という記憶だけ残っています。ちゃんとメモしておけば良かった。

上のコマンドを再び実行して、rootがstaffになっていればOK。

g++: fatal error: cannot execute 'cc1plus'

困りました。

具体的には手元で

$ rime test

を実行した時にコンパイルエラーを吐かれていました。

調べるとg++とgccのバージョンが違う、みたいな話が出ていて調べたのですがパッと見まあそこは大丈夫そうで(普段競プロは出来ていたので)困り果てていました。

WUPC開催3週間前にこれじゃマズイ!とヘドバンしてTwitter検索してたら、同じような要件を見かけてそこに付いてたリプ通りに、

$ rm -f /usr/local/bin/g++
$ ln -s /usr/local/bin/g++-10 /usr/local/bin/g++

をしたら解決・・・

下のはシンボリックリンクを貼ってる(合ってる?)という理解を得られているのですが、元々入ってるg++を消している気がするけど大丈夫なのかな(何も分からず) ただ現状これで何も問題なく動いてるように見えるのでOKです。

gitの使い方が分からない

これと同じ英才教育を先輩から受けました。

まあ何とかなった。

stack overflow回避について

よく分かっておりません(完)

flags=['-std=c++11','-O2','-fsplit-stack']

をジャッジに追加すると動くみたいな話になって、でもmacだとCEになるよ〜みたいな話になり、パソコン分からん人向けに

$ rime test

する前に、ソースコードの '-fsplit-stack'を一時的に消して手元で

$ ulimit -s unlimited

を叩いてから実行すると良いよと教えて貰ったのですが、

$ ulimit -s unlimited
-bash: ulimit: stack size: cannot modify limit: Operation not permitted

困りました。

色々彷徨った結果このページに辿り着き、

How to change the stack size using ulimit or per process on Mac OS X for a C or Ruby program? - Stack Overflow

取り敢えず見よう見まねで

$ ulimit -s 65532

を叩いてから実行したら無事テストが動いて get a 事なき。ちゃんとした対策法をよく分かってないですが次困ったらまたその時に考えます。

木の入力に対するvalidator

困ったことというか、これは単なるミスです。

そもそもvalidatorとは、与えられた入力の形式が正しいか、をチェックする為に用いられます。

  • そもそも入力のフォーマットは正しいか(変数の与えられる順番/行の末尾のスペースの有無/改行位置 等)

  • 入力の条件は正しいか(値の大きさ、その他の条件)

例えばN頂点の木が与えられます、という入力でチェックすべき点は、

  •  minN \leqq N \leqq maxN

  • 辺の数はN-1 本与えられる

  • 辺の情報 x,y について、 1 \leqq x,y \leqq N

  • 与えられた入力は N 頂点の木になっている

なんですが、1番目の条件に気を取られ  minN \leqq x,y \leqq maxN と書いてしまったのを指摘されました。

この作業をしていた時、yukicoderでinputに関するミスが目立っていたこともあり、かなり念入りに作業したつもりでもこういう抜けが生じてしまいました(なので本当に複数人でチェックするべき)。

4番目の条件はUnionfind等を使って実装しました、他の問題のvalidatorでこの条件を調べて忘れている人もいたのでやはり複数人によるチェックは大切。