SRM 679 Div2 Easy: ListeningSongs

問題

TopCoder Statistics - Problem Statement

2 つの音楽アルバム A, B について、曲の長さ(d1, d2)が与えられる(秒)。 曲の長さの合計が上限 minutes を超えないように各アルバムから曲を選ぶとき、選べる曲数の最大値を返す。 ただし、各アルバムからそれぞれ最低 T 曲選ばなければならない(A から T 曲, B から T 曲)。このような選び方がない場合は -1 を返す。

解法

結果が -1 の時の条件に注意してそのまま書く。d1, d2 をソートして先頭から T 個足したあと、新しい配列に足してない要素を突っ込んでソート、先頭から上限時間を超えないように選んでいくような処理を書いた。

続きを読む

Windowsで使ってるフリーソフト

最近ノートを Windows 10 にアップグレードしたので、7 までに使っていた便利なフリーソフトをまとめておきます。でもこれらが 10 で動く保証はないです。

【ブラウザ】

Google Chrome(portable ver.)

2ch ブラウザ】

V2C-R

2ch API に対応した V2C。慣れると Jane 系より便利な気がする。

設定が多いけど画像を自動 DL 設定すると使いやすくなると思う。

続きを読む

SRM 677 Div2 Easy: PalindromePrime

SRM は何回かやってたけど初めてコンテスト中に提出できました…(easy のみ)。

250: PalindromePrime

区間 [L, R] のうちで、素数かつ後ろから読んでも同じ(回分みたいになってる)整数をカウントする。 本番ではエラトステネスのふるいを書いたけど素数判定と回文判定だけすればいいらしい。

class PalindromePrime {
    public:
        // 回文かどうか
        bool is_r(int s) {
            stringstream ss;
            ss << s;
            string a = ss.str();
            int n = a.size();
            for(int i=0; i<n; i++) {
                if(a[i] != a[n - 1 - i]) return false;
            }
            return true;
        }

        bool is_prime(int n) {
            for(int i=2; i*i <= n; i++)
                if(n % i == 0) return false;
            return n != 1;
        }

        int count(int L, int R) {
            int ans = 0;
            for(int i = max(2, L); i <= R; i++) {
                if(is_prime(i) and is_r(i)) ans++;
            }
            return ans;
        }
};

来年は本気を出して緑以上になりたい。

アイカツ画像をツイートするTwitter botを作った

https://twitter.com/aikatsu_image

アイカツの画像をツイートする bot です。所持してるアイカツ画像を PC に溜めておくのも宝の持ち腐れ感があったので作りました。

bot のプログラムは python で書いて、Windows のタスクスケジューラで実行させています。tweepy というモジュールを使うと数行で書けて凄い。Twitter API を使うのは面白そうなのでもう少し遊んでみたいと思った一瞬でした。

ところでデスクトップ PC 上で動かすと常時起動が必要なので Raspberry PI とかが欲しいですね。サーバーを借りるようなものでもないと思うので…。

追記(2015/12/19)

RasPI 上で動かすことにしました。cron が使えて便利です。あと省電力。