AOJ 0041 Expression
問題
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0041
計算量的にも余裕があるし割り算も無いので総当りする。
なんとなく関数オブジェクトを使ってみたかったので、関数オブジェクトplus<int>()
,minus<int>()
,multiplies<int>()
への参照の配列fs
を作る。
数字の順列のループの中で、
インデックスの組(i,j,k) in {0,1,2}^3 (全部で27要素)のループを回してfs
へアクセスすることで、ありうる演算子の組を全て試す。
実装
SRM591 div2 hard(1000) YetAnotherTwoTeamsProblem
問題
あるサッカークラブに属するn人のメンバー全員の能力 s[0], s[1],...,s[n-1] が与えられる.メンバーをA,Bの2チームに分けて練習したい.次の条件を満たす分け方は何通りあるか.
- 全てのチームメイトは必ずいずれか一方のチームに属する.
- チームAの強さ > チームBの強さ
ただしチームの強さは,そのチームに属するメンバーの能力の総和である. - チームAに属する任意のメンバーを1人チームBに移すと
チームAの強さ < チームBの強さ となる - 2 <= n <= 50
- 1 <= s[i] <= 60000
解法
全てのメンバーの能力の総和をS,チームAの強さをta,チームBの強さをtb,チームAでもっとも能力が低いメンバーをmとおくと次の式を満たします.
ta + tb = S
ta > tb
ta - s[m] < tb + s[m]
ここから次の不等式を導けます.
S/2 < ta < s[m] + S/2
これを満たす全てのtaとmの組み合わせについて,場合の数を数え上げます.
実装
コンテスト中は何を思ったかメモ化再帰でのためにdp[51][60001*51]
という配列を確保しようとしていました.その後,ループに修正しているうちに時間切れに.
int n; int sum; // {s(i), s(i+1),..} から和がTになるような部分集合の数 ll dp[2][60001*51]; ll & dparr(int i, int j){ return dp[i%2][j]; } ll solve(const vector<int> & skill){ ll ans = 0; for(int t=0; t<60001*50; t++){ if(t == skill[n-1] || t == 0) dparr(n-1, t) = 1; else dparr(n-1, t) = 0; } if(skill[n-1] > sum - skill[n-1]) ans++; for(int i=n-2; i>=0; i--){ for(int t=0; t<60001*50; t++){ // 漸化式 if(t - skill[i] >= 0){ dparr(i, t) = dparr(i+1, t) + dparr(i+1, t-skill[i]); } else { dparr(i, t) = dparr(i+1, t); } } for (int t1 = sum/2+1; t1 < skill[i] + sum/2.0; ++t1){ //ans += g(i+1, t1-skill[i], skill); ans += dparr(i+1, t1-skill[i]); } } pr(ans); return ans; } class YetAnotherTwoTeamsProblem { public: long long count(vector<int> skill) { // memset(dpg,-1,sizeof(dpg)); memset(dp,0,sizeof(dp)); sort(skill.begin(), skill.end()); n = skill.size(); sum = accumulate(skill.begin(), skill.end(), 0); ll ans = solve(skill); return ans; } };
AOJ 1244 Molecular Formula
問題
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1244
元素記号と原子量の対応表と化学式が与えられる.化学式が何molか求める.
未知の元素が含まれていたら "UNKNOWN" と出力する.
RubyのCairoで円周率の壁紙を作った
どしたの
こういうのを作りました.
https://raw.github.com/tubo028/pi_wallpaper/origin/pi_bl.png
ただ円周率を10進数で一の位のから41364桁列挙した壁紙です.
githubに上げてあります.
https://github.com/tubo028/pi_wallpaper
僕はWindowsで実行しましたが,フォント以外はMacでもLinuxでもあまり変わらないと思います.
別にπじゃなくてもネイピア数や般若心経でもほぼ一緒です.
Apacheの起動に失敗する
最近さくらのVPSを借りた。
で、ここを参考にVirtualHostの設定をした。
#14 VirtualHostの設定をしよう (2)
<VirtualHost *:80> ServerName xxx.yyy.zzz DocumentRoot "/var/www/xxx.yyy.zzz/" DirectoryIndex index.html index.php ErrorLog /var/log/httpd/xxx.yyy.zzz_error_log CustomLog /var/log/httpd/xxx.yyy.zzz_access_log combined AddDefaultCharset UTF-8 <Directory "/var/www/xxx.yyy.zzz/public_html"> AllowOverride All </Directory> </VirtualHost>
ただし xxx.yyy.zzz はダミー。
何度やってもエラーが出て失敗する。
# service httpd start httpd を起動中: [失敗]
特にメッセージもなく、ただ[失敗]したと言われる。
しばらく調べて、こういうのは普通ログを取っているものだと知り、見てみる。
# cat /var/log/httpd/error_log
(略) [Tue May 14 05:26:23 2013] [notice] caught SIGTERM, shutting down (2)No such file or directory: httpd: could not open error log file /var/log/httpd/var/www/xxx.yyy.zzz_error_log.
ErrorLog で設定した /var/log/httpd/xxx.yyy.zzz_error_log が開けないと言っている。
設定したときは恐らく自動で作ってくれるだろうと思い無視していた。いやパーミッションの問題か?
よく分からないがとりあえず空のファイルを作ってみる。xxx.yyy.zzz_access_log も無いはずなので一応一緒に。
# mkdir -p /var/log/httpd/var/www/ # touch /var/log/httpd/var/www/xxx.yyy.zzz_error_log # touch /var/log/httpd/var/www/xxx.yyy.zzz_access_log
解決した。
# service httpd start httpd を起動中: [ OK ]