スキップしてメイン コンテンツに移動

投稿

ARC092/ABC091 D - Two Sequences

 ARC092/ABC091 D - Two Sequencesを解いていきます。 問題 https://beta.atcoder.jp/contests/arc092/tasks/arc092_b 感想  本番でC問題も解けず、焦ってこの問題見たら絶望しました。  何か規則性はないものかと必死で探して見たものの見つからず、解ける気がしませんでした。今後のために解法を書いておく事にしました。  結果はもちろん0完。。。 解法  aとbを足した全ての値を全て計算すると、計算量はO(n^2)となり最大で400億になってしまうので間に合わない。  そこで二進数の各位ごとに計算する。    10進数 2進数 0 0 1 1 2 10 3 11 4 100 5 101 6 110 7 111 8 1000 9 1001 10 1010 11 1011 12 1100 13 1101 14 1110 15 1111 16 10000    この表を見ると2^kの位は0と1が2^k個づつ交互に並んでいることがわかる。  よって、  ai + bj の 2^kの位 の値は、ai + bj の値が...  0 ≤ ai+bj < 2^k の時 0    2^k ≤ ai+bj < 2*2^k の時 1    2*2^k ≤ ai+bj < 3*2^k の時 0    3*2^k ≤ ai+bj < 4*2^k の時 1  4*2^k ≤ ai+bj < 5*2^k の時 0    5*2^k ≤ ai+bj < 6*2^k の時 1   ...... となる。  これは、mod(2*2^k)としてしまっても構わないので、     ai ≡ n (mod 2*2^k)     bj ≡ m (mod 2*2^k)  とすると、 0 ≤ n+m < 2^k の時 0 2^k ≤ n+m < 2*2^k の時 1 2*2^k ≤ n+m < 3*2^k の時 0 3*2^k ≤ n+m < 4*2^k の時 1   n+m < 4*2^k より、場合分けはこれだ
最近の投稿

barba.jsとanime.jsでクールに画面遷移

 webサービスでのページ遷移をスムーズにできるbarba.jsを使って画面遷移をするときに手間取ったのでやり方を書いていきます。  私が作ったページは こちら  「はじめる」ボタンを押せばページ遷移が始まります。 barba.js  barba.jsはwebページ間の遷移をネイティブのアプリケーションのように遷移するためのライブラリです。  Github :  https://github.com/luruke/barba.js  導入にはnpmやcdnを使います。ここにはcdn用のコードを貼っておきます。 <script src="https://cdnjs.cloudflare.com/ajax/libs/barba.js/1.0.0/barba.min.js" type="text/javascript"></script> 使い方 ページ遷移の際に読み込みたい部分を、 <div id="barba-wrapper"> <div class="barba-container"> </div> </div>  で囲みます。その後、 Barba.Pjax.start();  とJavaScriptにかけばbarba.jsは最小限これで動きます。 設定  まずは公式のデモのコードを見てみます。このコードを使うと上のbarba-wrapperで囲んだ範囲がフェードアウトして遷移先のbarba-wrapperで囲まれた部分がフェードインします。 var FadeTransition = Barba.BaseTransition.extend({ start: function() { /** * This function is automatically called as soon the Transition starts * this.newContainerLoading is a Promise for the loading of the new container * (Barba

MONIT でmacの通知センターにCPU、メモリなどの情報を表示する

 mac上で、 LinuxでいうConkyのようなシステム状況が一目でわかるようなソフトを購入したので紹介します。 MONIT  MONITは、macの通知センター上にCPU、メモリ、ディスク、バッテリー、ネットワークの情報を表示してくれるソフトです。  Mac App Storeからインストールすることができます。(有料:¥360,(2017年12月現在)) MONIT を Mac App Store で             起動すると最初にこんな画面が出てきて、 通知センターの一番下のある編集ボタンからMONITを追加しろと言われます。  追加したところはこんな感じ。   ここで、右上の i マークをクリックすると設定画面が開く。  ここでは表示するシステム情報の種類、温度表示、背景の色を変えることができる。  背景色は白と黒の二種類で、白を選ぶとこんな感じ。 自分は黒の方が好みなので、黒に設定した。   また、それぞれのシステム情報についての詳細が見たいときは、それぞれの項目付近をクリックする。  CPUの情報の表示はこんな感じ。  次はメモリ。  円グラフがわかりやすい。メモリ情報は意外と重宝します。  次はディスク情報。 BootCampがやばい...  また、最後に">"がついている項目はクリックするとさらに詳細な情報が出てくる。  次はバッテリー情報。   Cycle Countが地味に嬉しい。。。  最後にネットワーク。  全体的に、いろんな情報がシンプルにまとまっていてかなり見やすい。 感想  必要な情報がシンプルに、スタイリッシュにまとまっていて感動した。  システムの情報が一目で、詳細な数値でみることができるのは非常に大きいと思う。  macの標準アプリ、アクティビティでは表示される情報が多すぎてわかりづらい。  また、通知センターに常に表示されているので、見たいと思った時に1秒もかからずにみる事が出来るのも嬉しい点。  しばらく使って見ての感想は、  MONITのないmacにも 何かの意味はきっとあって  で

ksnctf #7 Programming 解けなかった。

 ksnctfの7問目、Programmingを解こうとしたけど解けなかった話。 問題   http://ksnctf.sweetduet.info/q/7/program.cpp  問題ページにはc++のコードっぽいものが書いてありました。  空白やタブばかりでぐちゃぐちゃだったので綺麗にしてみた。(これが落とし穴...) #include <stdio.h> #include <string.h> int main(){ const char *s =" " "0123456789" " "" "" " "ABCDEFGHIJ" ; printf("%c",strlen(s)); int i = 020000000 + 001000000 + 000600000 + 000040000 + 000007000 + 000000500 + 000000020 + 000000002; printf("%s",&i); long long l = 2LL * 11LL * 229LL * 614741LL * 9576751LL + 5LL; printf("%s",&l); float f = 1.0962664770776731080774868826855754386638240000e-38f; printf("%s", &f); double d = 6.7386412564254706622868098890859398199406890000e-308; printf("%s",&d); }  これを実行してみると... FROG_This_is_wrong_

ksnctf #6 Login を解く。

 ksnctfの6問目、"Login"を解いていきます。 問題   http://ksnctf.sweetduet.info/problem/6  問題ページには次のurlのみありました。   http://ctfq.sweetduet.info:10080/~q6/  このページにアクセスすると、  上のようなログイン画面が出てきます。  どうやら"admin"としてログインしろとのこと。  これはSQLインジェクションで解けそう。 解法  とりあえず定番の" ' OR 1=1 --"をID欄に入力して送信ボタンを押してみた。  ちなみに" ' OR 1=1 --"は1=1が常に真となり、'--'でそれ以降の文をコメント扱いにしてしまうので、SQL文全体が真となって必ずログインできるという優れもの。 Congratulations! It's too easy? Don't worry. The flag is admin's password. Hint: <?php function h($s){return htmlspecialchars($s,ENT_QUOTES,'UTF-8');} $id = isset($_POST['id']) ? $_POST['id'] : ''; $pass = isset($_POST['pass']) ? $_POST['pass'] : ''; $login = false; $err = ''; if ($id!=='') { $db = new PDO('sqlite:database.db'); $r = $db->query("SELECT * FROM user WHERE id='$id

ksnctf #5 Onion

 ksnctfの5問目、"Onion"を解いていきます。 問題   http://ksnctf.sweetduet.info/problem/5  問題文は意味不明な文字列が並べられているだけ。  とりあえず暗号か何かを疑ってみたりしましたが、文字列には空白文字もなければ意味不明な場所で改行していたりと全く手がかりを見つけることができなかった。   一時間ほど粘ってみたが、自分の知識ではどうにかなるものではないと悟った。  ここで先人の知恵を拝借。 解法   ヒントが書かれたページ を見ると hint1:base64 hint2:fileコマンド便利だよね と書いてあった とりあえず問題文をファイルにしてfileコマンドに投げてみると $ file onion onion: ASCII text   ここで問題文はASCIIコードで表すことのできる文字のみで構成されていることが判明。  次にbase64について調べると、 7ビットで表されるASCII文字しかやり取りできない環境で、他のデータも送受信可能にする為に元データを6ビットずつに分割し、分割された値に対応するASCII文字を割り当てている。 '000000'~'111111'に対応するASCII文字(= 'A'~'Z' , 'a'~'z' , '0'~'9' , '+' , '/')と'='のみで構成される。 76文字ごとに改行が入る。  また、デコードはweb上でもコマンドでもできる模様。  base64には改行が含まれているようなので、web上で実行しました。  一回デコードするとまたbase64らしき文字列が出てくるので、デコードできなくなるまでデコードを繰り返すと、 begin 666 <data> 51DQ!1U]&94QG4#-3:4%797I74$AU end  こんなのが出てきた。  これも暗号っぽいのでgoogle先生に聞いてみると、"

ksnctf #4 Villager A 初めての書式文字列攻撃。

 ksnctfの4問目、Villager A を解きました。 問題 https://ksnctf.sweetduet.info/problem/4  問題ページにはアドレス、ID、パスワードが書かれているのでSSHでログイン。  ログインしたら、とりあえずls。 $ ls flag.txt q4 readme.txt  readmeには大したこと書いてなかった。  flag.txtはもちろん開けない。  とりあえずq4を実行してみる。 $ ./q4 What's your name? Sugita Genpaku Hi, Sugita Genpaku Do you want the flag? はい Do you want the flag? yes Do you want the flag? نعم فعلا Do you want the flag? いいえ Do you want the flag? no I see. Good bye.  "no"と答えるまで煽られ続ける模様。  ユーザーが入力した値を出力しているあたり、この前本で読んだばかりの書式文字列攻撃を使うっぽい。  いきなりアセンブリ読むのもアレなのでstringsかけてみる。  stringsコマンドは、ファイルに含まれる文字列を出力してくれる。 strings q4 /lib/ld-linux.so.2 libstdc++.so.6 __gmon_start__ _Jv_RegisterClasses __gxx_personality_v0 libm.so.6 libgcc_s.so.1 libc.so.6 _IO_stdin_used fopen puts putchar stdin printf fgets strcmp __libc_start_main CXXABI_1.3 GLIBC_2.1 GLIBC_2.0 PTRh [^_] What's your name? Hi, Do you want the flag? I see. Good bye. flag.txt  どうにかすればfopenでflag.txtの中身を出力してくれると予想。  ここでもう一度

ページビューの合計

ラベル一覧を表示