2023-01-03 twiq-light 0.2.0 をつくった / ABC137 の A, B, C, D を解いた
2023-01-01 に twiq-light 0.2.0 をつくった。 bouzuya/rust-sandbox の twiq-light/ にある。
twiq-light queue
関連のコマンドを追加した- ツイートの予約ができるようになった
- 認証情報などを毎回渡さなくて済むように設定ファイルを追加
${XDG_CONFIG_HOME}/net.bouzuya.rust-sandbox.twiq-light/config.json
- ツイートのデータファイルの位置を変更
${HOME}/twiq-light.json
→${XDG_STATE_HOME}/net.bouzuya.rust-sandbox.twiq-light/tweet.json
TWIQ_LIGHT_TWITTER_BEARER_TOKEN
環境変数を削除し、 Firestore 上に保存された OAuth2 の token に統合
思った以上にいろいろ変えている。もっと早くバージョンを区切っても良かったように思う。
設定ファイルなどの配置は crates:xdg を使って XDG Base Directory specification (https://wiki.archlinux.jp/index.php/XDG_Base_Directory) に寄せている。TWIQ_LIGHT_CONFIG_HOME
や TWIQ_LIGHT_STATE_HOME
環境変数で保存場所は別途指定できる。
他の人が使うことをまったく想定していない。そのうち直すかもしれない。
ABC137 : AtCoder Beginner Contest 137 の A, B, C, D を解いた。
- A - +-x
https://atcoder.jp/contests/abc137/tasks/abc137_a
- 提出: https://atcoder.jp/contests/abc137/submissions/37711645
(a + b).max(a - b).max(a * b)
- B - One Clue
https://atcoder.jp/contests/abc137/tasks/abc137_b
- 提出: https://atcoder.jp/contests/abc137/submissions/37711696
for i in (x - k + 1)..=(x + k - 1) { println!("{}", i); }
- C - Green Bin
https://atcoder.jp/contests/abc137/tasks/abc137_c
- 提出: https://atcoder.jp/contests/abc137/submissions/37711813
- アナグラムの判定はソートして比較すれば良い
- ソート済みの文字列のグループごとの個数を数えておき、グループごとに 2 個取り出したときの場合の数 (x choose 2 (=
x * (x - 1) / 2
)) を計算して、総和を取れば良い
- D - Summer Vacation
https://atcoder.jp/contests/abc137/tasks/abc137_d
- 提出: https://atcoder.jp/contests/abc137/submissions/37711899
- 一瞬、区間スケジューリング問題かと思ったけど、区間じゃなかった
A_i
から最遅の開始日が分かる- 最遅の開始日以前ならいつでも働ける
- 働けるアルバイトのうち最も報酬の高いものを選べば良さそう
- 各アルバイトは 1 回しか働けないので、働いたものは取り除くかマークすると良さそう
- マークだと高いものを取り出すときに邪魔そう
- BinaryHeap で取り除いていくのが良さそう
- まとめると M 日を後ろから順に走査して、各日で最遅の開始日より前になったアルバイト (働けるもの) をすべて BinaryHeap に追加した後、高いものを 1 件取り出していく、取り出したものの総和が答えになる
use std::collections::BinaryHeap;
use proconio::input;
fn main() {
input! {
n: usize,
m: usize,
mut ab: [(usize, usize); n],
};
ab.sort_by_key(|&(a, _)| a);
let mut sum = 0_usize;
let mut pq = BinaryHeap::new();
let mut index = 0_usize;
for d in 1..=m {
while index < n {
let (a, b) = ab[index];
if a <= d {
pq.push(b);
} else {
break;
}
index += 1;
}
if let Some(x) = pq.pop() {
sum += x;
}
}
let ans = sum;
println!("{}", ans);
}
今日のコミット。
- rust-atcoder 1 commit
- rust-sandbox 8 commits
- date-to-week-date: 0.1.1
- date-to-week-date: Add github workflow
- date-to-week-date: Fix create-service-account-and-key shell script
- date-to-week-date: Add create-repository shell script
- date-to-week-date: Fix create-service-account-and-key shell script
- date-to-week-date: Add enable-artifactregistry-api shell script
- date-to-week-date: Add create-service-account-and-key shell script
- date-to-week-date: Add enable-iam-api shell script