2024-01-15 reqwest の gzip feature / PAST #3 F
crates:reqwest v0.11.23 の gzip サポートについて調べた。
reqwest は gzip feature を持っている。
https://github.com/seanmonstar/reqwest/blob/v0.11.23/Cargo.toml#L50
これは response body が gzip で圧縮されていた場合に自動で展開するもの。 request body に対してではなさそう。
https://github.com/seanmonstar/reqwest/blob/v0.11.23/src/lib.rs#L190
async_compression::tokio::bufread::GzipDecoder
などを使って展開する。
https://github.com/seanmonstar/reqwest/blob/v0.11.23/src/async_impl/decoder.rs#L6-L7
PAST #3 第三回 アルゴリズム実技検定 過去問
- F - 回文行列
https://atcoder.jp/contests/past202005-open/tasks/past202005_f
- 提出: https://atcoder.jp/contests/past202005-open/submissions/49340023
- 長さを間違えて 1 WA
- 各行の set をつくっておき、一番上の行と一番下の行で共通の要素を調べる
- 各行の各要素ごとの調査に行の長さに比例した計算量にならなければ (set を使えば) 間に合うはず (
N <= 500
なので愚直にやっても間に合うかもしれない)
use std::collections::HashSet;
use proconio::{input, marker::Chars};
fn main() {
input! {
n: usize,
a: [Chars; n],
};
if n == 1 {
println!("{}", a[0][0]);
return;
}
let b = a
.into_iter()
.map(|a_i| a_i.into_iter().collect::<HashSet<char>>())
.collect::<Vec<HashSet<char>>>();
let mut c = vec![];
for i in 0..n / 2 + if n % 2 == 0 { 0 } else { 1 } {
let j = n - i - 1;
if let Some(x) = b[i].intersection(&b[j]).next() {
c.push(*x);
} else {
println!("-1");
return;
}
}
let mut ans = c.clone();
if n % 2 == 0 {
c.reverse();
ans.extend(c);
} else {
let l = c.len().saturating_sub(1);
ans.extend(c.into_iter().take(l).rev());
}
println!("{}", ans.iter().collect::<String>());
}
今日のコミット。