2023-10-25 ABC223 A, B, C, D
予防接種をした。腕が痛い。
AtCoder Beginner Contest 223
- A - Exact Price
https://atcoder.jp/contests/abc223/tasks/abc223_a
- 提出: https://atcoder.jp/contests/abc223/submissions/46926096
x >= 100 && x % 100 == 0
- B - String Shifting
https://atcoder.jp/contests/abc223/tasks/abc223_b
- 提出: https://atcoder.jp/contests/abc223/submissions/46926685
rotate_left
しながら最小と最大を更新していけば良い
- C - Doukasen
https://atcoder.jp/contests/abc223/tasks/abc223_c
- 提出: https://atcoder.jp/contests/abc223/submissions/46927703
- 二分探索で値を探しつつシミュレートした
- この方針はあまり良くなかった。単に半分の時間まで進めばよかったように思う
- D - Restricted Permutation
https://atcoder.jp/contests/abc223/tasks/abc223_d
- 提出: https://atcoder.jp/contests/abc223/submissions/46928132
- トポロジカルソート。同じ優先度の場合に最小の頂点番号のものを選ぶところだけ買えている
- E - Placing Rectangles
https://atcoder.jp/contests/abc223/tasks/abc223_e
- 未着手
- F - Parenthesis Checking
https://atcoder.jp/contests/abc223/tasks/abc223_f
- 未着手
- G - Vertex Deletion
https://atcoder.jp/contests/abc223/tasks/abc223_g
- 未着手
- H - Xor Query
https://atcoder.jp/contests/abc223/tasks/abc223_h
- 未着手
use std::{cmp::Reverse, collections::BinaryHeap};
use proconio::{input, marker::Usize1};
fn topological_sort(e: &[Vec<usize>]) -> Option<Vec<usize>> {
let n = e.len();
let mut c_in = vec![0; n];
for e_u in e.iter() {
for &v in e_u.iter() {
c_in[v] += 1;
}
}
// u の小さいものを取り出す
let mut pq = BinaryHeap::new();
for u in 0..n {
if c_in[u] == 0 {
pq.push(Reverse(u));
}
}
let mut res = vec![];
while let Some(Reverse(u)) = pq.pop() {
res.push(u);
for &v in e[u].iter() {
c_in[v] -= 1;
if c_in[v] == 0 {
pq.push(Reverse(v));
}
}
}
if res.len() == n {
Some(res)
} else {
None
}
}
fn main() {
input! {
n: usize,
m: usize,
ab: [(Usize1, Usize1); m],
};
let mut edges = vec![vec![]; n];
for (a, b) in ab {
edges[a].push(b);
}
if let Some(sorted) = topological_sort(&edges) {
for u in sorted {
println!("{}", u + 1);
}
} else {
println!("-1");
}
}
今日のコミット。
- kireta 1 commit
- rust-atcoder 1 commit