complete 2083.rs 2530.rs 2721.rs 4128.rs 5584.rs 7512.rs 21519.rs 21964.rs 22862.rs 22973.rs 24123.rs 26993.rs 27514.rs 33849.rs
This commit is contained in:
39
storage/zeta/rs/completed/2083.rs
Normal file
39
storage/zeta/rs/completed/2083.rs
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
use std::io::stdin;
|
||||||
|
|
||||||
|
pub struct Person {
|
||||||
|
name: String,
|
||||||
|
age: u32,
|
||||||
|
weight: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Person {
|
||||||
|
fn is_adult(&self) -> bool {
|
||||||
|
self.age >= 18 || self.weight >= 80
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_null(&self) -> bool {
|
||||||
|
self.age == 0 && self.weight == 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut line = String::new();
|
||||||
|
|
||||||
|
loop {
|
||||||
|
line.clear();
|
||||||
|
stdin().read_line(&mut line).unwrap();
|
||||||
|
let mut iter = line.trim_ascii_end().split(' ');
|
||||||
|
let p = Person {
|
||||||
|
name: iter.next().unwrap().to_string(),
|
||||||
|
age: iter.next().unwrap().parse().unwrap(),
|
||||||
|
weight: iter.next().unwrap().parse().unwrap(),
|
||||||
|
};
|
||||||
|
if p.is_null() {
|
||||||
|
break;
|
||||||
|
} else if p.is_adult() {
|
||||||
|
println!("{} Senior", p.name);
|
||||||
|
} else {
|
||||||
|
println!("{} Junior", p.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
46
storage/zeta/rs/completed/21519.rs
Normal file
46
storage/zeta/rs/completed/21519.rs
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
use std::io::{read_to_string, stdin};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let temp = read_to_string(stdin()).unwrap();
|
||||||
|
let mut iter = temp
|
||||||
|
.split_ascii_whitespace()
|
||||||
|
.map(|x| x.parse::<i64>().unwrap());
|
||||||
|
|
||||||
|
let n = iter.next().unwrap() as usize;
|
||||||
|
|
||||||
|
let movies = (0..n)
|
||||||
|
.map(|i| {
|
||||||
|
(
|
||||||
|
i,
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let mut res: i64 = movies.iter().map(|x| x.1).sum();
|
||||||
|
let mut secondary_movies = movies.iter().map(|x| (x.0, x.2 - x.1)).collect::<Vec<_>>();
|
||||||
|
secondary_movies.sort_by_key(|x| x.1);
|
||||||
|
let mut third_movies = movies.iter().map(|x| (x.0, x.3 - x.1)).collect::<Vec<_>>();
|
||||||
|
third_movies.sort_by_key(|x| x.1);
|
||||||
|
let s1 = secondary_movies[secondary_movies.len() - 1];
|
||||||
|
let s2 = secondary_movies[secondary_movies.len() - 2];
|
||||||
|
let t1 = third_movies[third_movies.len() - 1];
|
||||||
|
let t2 = third_movies[third_movies.len() - 2];
|
||||||
|
|
||||||
|
let cand = if s1.0 == t1.0 {
|
||||||
|
if s1.1 + t2.1 > s2.1 + t1.1 {
|
||||||
|
res += s1.1 + t2.1;
|
||||||
|
(s1.0, t2.0)
|
||||||
|
} else {
|
||||||
|
res += s2.1 + t1.1;
|
||||||
|
(s2.0, t1.0)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
res += s1.1 + t1.1;
|
||||||
|
(s1.0, t1.0)
|
||||||
|
};
|
||||||
|
println!("{}", res);
|
||||||
|
println!("{} {}", cand.0 + 1, cand.1 + 1);
|
||||||
|
}
|
||||||
1
storage/zeta/rs/completed/21964.rs
Normal file
1
storage/zeta/rs/completed/21964.rs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
fn main(){let t=std::io::read_to_string(std::io::stdin()).unwrap();let s=t.split_whitespace().last().unwrap();print!("{}", &s[s.len()-5..])}
|
||||||
50
storage/zeta/rs/completed/22862.rs
Normal file
50
storage/zeta/rs/completed/22862.rs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
use std::{io::read_to_string, io::stdin};
|
||||||
|
|
||||||
|
// 1 2 3 4 5
|
||||||
|
// 0 1 3
|
||||||
|
//
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let temp = read_to_string(stdin()).unwrap();
|
||||||
|
let mut iter = temp
|
||||||
|
.split_ascii_whitespace()
|
||||||
|
.map(|x| x.parse::<usize>().unwrap());
|
||||||
|
let (n, k) = (iter.next().unwrap(), iter.next().unwrap());
|
||||||
|
let arr = {
|
||||||
|
let mut arr = vec![];
|
||||||
|
let org = (0..n).map(|_| iter.next().unwrap() % 2).collect::<Vec<_>>();
|
||||||
|
let mut cnt = 0;
|
||||||
|
for ele in org {
|
||||||
|
if ele == 0 {
|
||||||
|
arr.push(cnt);
|
||||||
|
cnt = 0;
|
||||||
|
} else {
|
||||||
|
cnt += ele;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arr
|
||||||
|
};
|
||||||
|
|
||||||
|
let cum_arr = {
|
||||||
|
let mut carr = vec![0];
|
||||||
|
for ele in arr.iter() {
|
||||||
|
carr.push(carr.last().unwrap() + ele);
|
||||||
|
}
|
||||||
|
carr
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut lo = 1;
|
||||||
|
let mut hi = 1;
|
||||||
|
let mut res = 0;
|
||||||
|
while hi < cum_arr.len() {
|
||||||
|
let key = cum_arr[hi] - cum_arr[lo];
|
||||||
|
let len = hi - lo + 1;
|
||||||
|
if key > k {
|
||||||
|
lo += 1;
|
||||||
|
} else {
|
||||||
|
res = res.max(len);
|
||||||
|
hi += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("{}", res);
|
||||||
|
}
|
||||||
26
storage/zeta/rs/completed/22973.rs
Normal file
26
storage/zeta/rs/completed/22973.rs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
use std::io::{read_to_string, stdin};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let k = read_to_string(stdin())
|
||||||
|
.unwrap()
|
||||||
|
.trim()
|
||||||
|
.parse::<i64>()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let k = k.abs() as u64;
|
||||||
|
if k == 0 {
|
||||||
|
println!("{}", 0);
|
||||||
|
}
|
||||||
|
else if k % 2 == 0 {
|
||||||
|
println!("{}", -1);
|
||||||
|
} else {
|
||||||
|
let mut max_i = 48;
|
||||||
|
for i in 0..=48 {
|
||||||
|
if k >> i == 0 {
|
||||||
|
max_i = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("{}", max_i);
|
||||||
|
}
|
||||||
|
}
|
||||||
71
storage/zeta/rs/completed/24123.rs
Normal file
71
storage/zeta/rs/completed/24123.rs
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
use std::{
|
||||||
|
cmp::max,
|
||||||
|
io::{read_to_string, stdin},
|
||||||
|
};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let temp = read_to_string(stdin()).unwrap();
|
||||||
|
let mut iter = temp.split_ascii_whitespace();
|
||||||
|
|
||||||
|
let (n, m, t, x, y) = (
|
||||||
|
iter.next().unwrap().parse::<usize>().unwrap(),
|
||||||
|
iter.next().unwrap().parse::<usize>().unwrap(),
|
||||||
|
iter.next().unwrap().parse::<i64>().unwrap(),
|
||||||
|
iter.next().unwrap().parse::<i64>().unwrap(),
|
||||||
|
iter.next().unwrap().parse::<i64>().unwrap(),
|
||||||
|
);
|
||||||
|
|
||||||
|
let points = (0..m)
|
||||||
|
.map(|_| iter.next().unwrap().parse::<i64>().unwrap())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
let mut logs = (0..y)
|
||||||
|
.map(|_| {
|
||||||
|
(
|
||||||
|
iter.next().unwrap().parse::<i64>().unwrap(), // time
|
||||||
|
iter.next().unwrap().parse::<usize>().unwrap() - 1, // participant
|
||||||
|
iter.next().unwrap().parse::<usize>().unwrap() - 1, // problem num
|
||||||
|
match iter.next().unwrap().chars().next().unwrap() {
|
||||||
|
'o' => 0, // open
|
||||||
|
'c' => 1, // corr
|
||||||
|
'i' => 2, // incr
|
||||||
|
_ => 0,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
logs.sort_by_key(|x| x.0); // sort by time
|
||||||
|
let mut open_times = vec![vec![0; m]; n];
|
||||||
|
let mut corr_times = vec![vec![-1; m]; n];
|
||||||
|
let mut wrong_trials = vec![vec![0; m]; n];
|
||||||
|
for log in logs {
|
||||||
|
let (time, part, prob, delta) = log;
|
||||||
|
match delta {
|
||||||
|
0 => {
|
||||||
|
open_times[part][prob] = time;
|
||||||
|
}
|
||||||
|
1 => {
|
||||||
|
corr_times[part][prob] = time;
|
||||||
|
}
|
||||||
|
2 => {
|
||||||
|
wrong_trials[part][prob] += 1;
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for part in 0..n {
|
||||||
|
let mut s = 0;
|
||||||
|
for prob in 0..m {
|
||||||
|
if corr_times[part][prob] == -1 {
|
||||||
|
continue; // 0
|
||||||
|
}
|
||||||
|
s += max(
|
||||||
|
points[prob]
|
||||||
|
- (corr_times[part][prob] - open_times[part][prob])
|
||||||
|
- 120 * wrong_trials[part][prob],
|
||||||
|
x,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
println!("{}", s);
|
||||||
|
}
|
||||||
|
}
|
||||||
32
storage/zeta/rs/completed/2530.rs
Normal file
32
storage/zeta/rs/completed/2530.rs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
use std::io::{read_to_string, stdin};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let temp = read_to_string(stdin()).unwrap();
|
||||||
|
let mut iter = temp
|
||||||
|
.split_ascii_whitespace()
|
||||||
|
.map(|s| s.parse::<usize>().unwrap());
|
||||||
|
|
||||||
|
let (mut h, mut m, mut s) = (
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
);
|
||||||
|
let cooking_time = iter.next().unwrap();
|
||||||
|
|
||||||
|
for _ in 0..cooking_time {
|
||||||
|
s += 1;
|
||||||
|
if s == 60 {
|
||||||
|
s = 0;
|
||||||
|
m += 1;
|
||||||
|
}
|
||||||
|
if m == 60 {
|
||||||
|
m = 0;
|
||||||
|
h += 1;
|
||||||
|
}
|
||||||
|
if h == 24 {
|
||||||
|
h = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("{} {} {}", h, m, s);
|
||||||
|
}
|
||||||
121
storage/zeta/rs/completed/26993.rs
Normal file
121
storage/zeta/rs/completed/26993.rs
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
use std::{
|
||||||
|
collections::VecDeque,
|
||||||
|
io::{read_to_string, stdin},
|
||||||
|
};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let temp = read_to_string(stdin()).unwrap();
|
||||||
|
let mut iter = temp
|
||||||
|
.split_ascii_whitespace()
|
||||||
|
.map(|x| x.parse::<usize>().unwrap());
|
||||||
|
|
||||||
|
let (w, h) = (iter.next().unwrap(), iter.next().unwrap());
|
||||||
|
|
||||||
|
let mut start = (0, 0);
|
||||||
|
let mut dest = (0, 0);
|
||||||
|
|
||||||
|
let field = (0..h)
|
||||||
|
.map(|i| {
|
||||||
|
(0..w)
|
||||||
|
.map(|j| {
|
||||||
|
let t = iter.next().unwrap();
|
||||||
|
if t == 2 {
|
||||||
|
start = (i, j);
|
||||||
|
} else if t == 3 {
|
||||||
|
dest = (i, j);
|
||||||
|
}
|
||||||
|
t
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
})
|
||||||
|
.collect::<Vec<Vec<_>>>();
|
||||||
|
|
||||||
|
let deltas = [(-1, 0), (1, 0), (0, -1), (0, 1)];
|
||||||
|
let mut weight_map = vec![vec![0; w]; h];
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut vis = vec![vec![false; w]; h];
|
||||||
|
|
||||||
|
let mut deq = VecDeque::new();
|
||||||
|
deq.push_back((start.clone(), 0));
|
||||||
|
|
||||||
|
while !deq.is_empty() {
|
||||||
|
let (curr, curr_weight) = deq.pop_front().unwrap();
|
||||||
|
if vis[curr.0][curr.1] {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
vis[curr.0][curr.1] = true;
|
||||||
|
}
|
||||||
|
let curr_state = field[curr.0][curr.1];
|
||||||
|
|
||||||
|
if curr_state == 4 {
|
||||||
|
weight_map[curr.0][curr.1] += curr_weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (dx, dy) in deltas {
|
||||||
|
let nxt = (curr.0 as isize + dx, curr.1 as isize + dy);
|
||||||
|
|
||||||
|
if nxt.0 < 0 || nxt.0 >= h as isize || nxt.1 < 0 || nxt.1 >= w as isize {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let nxt = (nxt.0 as usize, nxt.1 as usize);
|
||||||
|
|
||||||
|
if field[nxt.0][nxt.1] == 1 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
deq.push_back((nxt, curr_weight + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut vis = vec![vec![false; w]; h];
|
||||||
|
|
||||||
|
let mut deq = VecDeque::new();
|
||||||
|
deq.push_back((dest.clone(), 0));
|
||||||
|
|
||||||
|
while !deq.is_empty() {
|
||||||
|
let (curr, curr_weight) = deq.pop_front().unwrap();
|
||||||
|
if vis[curr.0][curr.1] {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
vis[curr.0][curr.1] = true;
|
||||||
|
}
|
||||||
|
let curr_state = field[curr.0][curr.1];
|
||||||
|
|
||||||
|
if curr_state == 4 {
|
||||||
|
weight_map[curr.0][curr.1] += curr_weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (dx, dy) in deltas {
|
||||||
|
let nxt = (curr.0 as isize + dx, curr.1 as isize + dy);
|
||||||
|
|
||||||
|
if nxt.0 < 0 || nxt.0 >= h as isize || nxt.1 < 0 || nxt.1 >= w as isize {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let nxt = (nxt.0 as usize, nxt.1 as usize);
|
||||||
|
|
||||||
|
if field[nxt.0][nxt.1] == 1 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
deq.push_back((nxt, curr_weight + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut res = usize::MAX;
|
||||||
|
for i in 0..h {
|
||||||
|
for j in 0..w {
|
||||||
|
let t = weight_map[i][j];
|
||||||
|
if t == 0 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
res = res.min(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("{}", res);
|
||||||
|
}
|
||||||
24
storage/zeta/rs/completed/2721.rs
Normal file
24
storage/zeta/rs/completed/2721.rs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
use std::io::{read_to_string, stdin};
|
||||||
|
|
||||||
|
fn W(n: usize) -> usize {
|
||||||
|
// W(1) = 1 * T(2) = 3
|
||||||
|
// W(2) = 1 * T(2) + 2 * T(3) = 12 + 3 = 15
|
||||||
|
// W(n + 1) - W(n) = n * T(n + 1) = n * (n + 1) * (n + 2) / 2
|
||||||
|
if n == 1 {
|
||||||
|
3
|
||||||
|
} else {
|
||||||
|
n * (n + 1) * (n + 2) / 2 + W(n - 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let temp = read_to_string(stdin()).unwrap();
|
||||||
|
let mut iter = temp
|
||||||
|
.split_ascii_whitespace()
|
||||||
|
.map(|x| x.parse::<usize>().unwrap());
|
||||||
|
|
||||||
|
(0..iter.next().unwrap()).for_each(|_| {
|
||||||
|
let n = iter.next().unwrap();
|
||||||
|
println!("{}", W(n));
|
||||||
|
});
|
||||||
|
}
|
||||||
32
storage/zeta/rs/completed/27514.rs
Normal file
32
storage/zeta/rs/completed/27514.rs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
use std::{
|
||||||
|
cmp::Reverse,
|
||||||
|
collections::BinaryHeap,
|
||||||
|
io::{read_to_string, stdin},
|
||||||
|
};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let temp = read_to_string(stdin()).unwrap();
|
||||||
|
let mut iter = temp
|
||||||
|
.split_ascii_whitespace()
|
||||||
|
.map(|x| x.parse::<usize>().unwrap());
|
||||||
|
|
||||||
|
let n = iter.next().unwrap();
|
||||||
|
let arr = (0..n)
|
||||||
|
.map(|_| Reverse(iter.next().unwrap()))
|
||||||
|
.filter(|x| x.0 != 0)
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let mut heap = BinaryHeap::from(arr);
|
||||||
|
|
||||||
|
while (heap.len() >= 2) {
|
||||||
|
let a = heap.pop().unwrap().0;
|
||||||
|
let b = heap.pop().unwrap().0;
|
||||||
|
if a != b {
|
||||||
|
heap.push(Reverse(a.max(b)));
|
||||||
|
} else {
|
||||||
|
heap.push(Reverse(a + b));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let res = heap.iter().max().unwrap().0;
|
||||||
|
println!("{}", res);
|
||||||
|
}
|
||||||
92
storage/zeta/rs/completed/33849.rs
Normal file
92
storage/zeta/rs/completed/33849.rs
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
use std::{
|
||||||
|
cmp::Ordering,
|
||||||
|
io::{read_to_string, stdin},
|
||||||
|
};
|
||||||
|
|
||||||
|
fn gcd(a: u64, b: u64) -> u64 {
|
||||||
|
let mut r = 0;
|
||||||
|
let mut a = a;
|
||||||
|
let mut b = b;
|
||||||
|
while b > 0 {
|
||||||
|
r = a % b;
|
||||||
|
a = b;
|
||||||
|
b = r;
|
||||||
|
}
|
||||||
|
a
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Rational {
|
||||||
|
p: u64,
|
||||||
|
q: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Rational {
|
||||||
|
fn new(p: u64, q: u64) -> Self {
|
||||||
|
Rational {
|
||||||
|
p: p / gcd(p, q),
|
||||||
|
q: q / gcd(p, q),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PartialEq for Rational {
|
||||||
|
fn eq(&self, other: &Self) -> bool {
|
||||||
|
self.p == other.p && self.q == other.q
|
||||||
|
}
|
||||||
|
|
||||||
|
fn ne(&self, other: &Self) -> bool {
|
||||||
|
self.p != other.p && self.q != other.q
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PartialOrd for Rational {
|
||||||
|
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
||||||
|
Some((self.p * other.q).cmp(&(other.p * self.q)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let temp = read_to_string(stdin()).unwrap();
|
||||||
|
let mut iter = temp
|
||||||
|
.split_ascii_whitespace()
|
||||||
|
.map(|x| x.parse::<u64>().unwrap());
|
||||||
|
|
||||||
|
let n = iter.next().unwrap() as usize;
|
||||||
|
|
||||||
|
let xs = (0..n).map(|_| iter.next().unwrap()).collect::<Vec<_>>();
|
||||||
|
let ys = (0..n).map(|_| iter.next().unwrap()).collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let rs = xs
|
||||||
|
.iter()
|
||||||
|
.zip(ys.iter())
|
||||||
|
.map(|(&x, &y)| Rational::new(y, x))
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let mut max_value = Rational { p: 0, q: 1 };
|
||||||
|
let mut max_cons = 0;
|
||||||
|
let mut curr_cons = 0;
|
||||||
|
for i in rs {
|
||||||
|
if i > max_value {
|
||||||
|
curr_cons = 1;
|
||||||
|
max_cons = 0;
|
||||||
|
max_value = i;
|
||||||
|
} else if i == max_value {
|
||||||
|
if curr_cons > 0 {
|
||||||
|
curr_cons += 1;
|
||||||
|
} else {
|
||||||
|
curr_cons += 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
max_cons = max_cons.max(curr_cons);
|
||||||
|
curr_cons = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if curr_cons > 0 {
|
||||||
|
max_cons = max_cons.max(curr_cons);
|
||||||
|
}
|
||||||
|
println!("{} {}", max_value.p, max_value.q);
|
||||||
|
println!("{}", max_cons);
|
||||||
|
}
|
||||||
170
storage/zeta/rs/completed/4128.rs
Normal file
170
storage/zeta/rs/completed/4128.rs
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
use std::{
|
||||||
|
cmp::min,
|
||||||
|
collections::HashMap,
|
||||||
|
io::{read_to_string, stdin},
|
||||||
|
};
|
||||||
|
|
||||||
|
fn remap(x: (i64, i64, i64, i64)) -> (i64, i64, i64, i64) {
|
||||||
|
let (x1, y1, x2, y2) = x;
|
||||||
|
let x = if x1 < x2 { (x1, x2) } else { (x2, x1) };
|
||||||
|
let y = if y1 < y2 { (y1, y2) } else { (y2, y1) };
|
||||||
|
|
||||||
|
(x.0, y.0, x.1, y.1)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_bound_out(xf0: i64, xf1: i64, x: i64) -> bool {
|
||||||
|
x < xf0 || x > xf1
|
||||||
|
}
|
||||||
|
|
||||||
|
fn compensate_bounded_out(xf0: i64, xf1: i64, x: i64) -> i64 {
|
||||||
|
if x < xf0 {
|
||||||
|
xf0
|
||||||
|
} else if x > xf1 {
|
||||||
|
xf1
|
||||||
|
} else {
|
||||||
|
x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let temp = read_to_string(stdin()).unwrap();
|
||||||
|
let mut iter = temp
|
||||||
|
.split_ascii_whitespace()
|
||||||
|
.map(|x| x.parse::<i64>().unwrap());
|
||||||
|
|
||||||
|
let plate = remap((
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
));
|
||||||
|
|
||||||
|
let n = iter.next().unwrap() as usize;
|
||||||
|
|
||||||
|
let chips = (0..n)
|
||||||
|
.map(|_| {
|
||||||
|
(
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.map(remap)
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
let (h_map, width) = {
|
||||||
|
let mut h_map: HashMap<i64, usize> = HashMap::new();
|
||||||
|
|
||||||
|
let h_base = vec![plate.0, plate.2].into_iter();
|
||||||
|
let h1 = chips
|
||||||
|
.iter()
|
||||||
|
.map(|&(x, _, _, _)| x)
|
||||||
|
.filter(|x| !is_bound_out(plate.0, plate.2, *x));
|
||||||
|
let h2 = chips
|
||||||
|
.iter()
|
||||||
|
.map(|&(_, _, x, _)| x)
|
||||||
|
.filter(|x| !is_bound_out(plate.0, plate.2, *x));
|
||||||
|
|
||||||
|
let mut h = h_base.chain(h1).chain(h2).collect::<Vec<_>>();
|
||||||
|
h.sort();
|
||||||
|
let mut cnt = 0;
|
||||||
|
for &v in h.iter() {
|
||||||
|
if !h_map.contains_key(&v) {
|
||||||
|
h_map.insert(v, cnt);
|
||||||
|
cnt += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(h_map, cnt)
|
||||||
|
};
|
||||||
|
|
||||||
|
let (v_map, height) = {
|
||||||
|
let mut v_map: HashMap<i64, usize> = HashMap::new();
|
||||||
|
|
||||||
|
let v_base = vec![plate.1, plate.3].into_iter();
|
||||||
|
let v1 = chips
|
||||||
|
.iter()
|
||||||
|
.map(|&(_, x, _, _)| x)
|
||||||
|
.filter(|x| !is_bound_out(plate.1, plate.3, *x));
|
||||||
|
let v2 = chips
|
||||||
|
.iter()
|
||||||
|
.map(|&(_, _, _, x)| x)
|
||||||
|
.filter(|x| !is_bound_out(plate.1, plate.3, *x));
|
||||||
|
|
||||||
|
let mut v = v_base.chain(v1).chain(v2).collect::<Vec<_>>();
|
||||||
|
v.sort();
|
||||||
|
|
||||||
|
let mut cnt = 0;
|
||||||
|
|
||||||
|
for &val in v.iter() {
|
||||||
|
if !v_map.contains_key(&val) {
|
||||||
|
v_map.insert(val, cnt);
|
||||||
|
cnt += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(v_map, cnt)
|
||||||
|
};
|
||||||
|
|
||||||
|
let chips = chips
|
||||||
|
.into_iter()
|
||||||
|
.map(|(x1, y1, x2, y2)| {
|
||||||
|
(
|
||||||
|
h_map[&compensate_bounded_out(plate.0, plate.2, x1)],
|
||||||
|
v_map[&compensate_bounded_out(plate.1, plate.3, y1)],
|
||||||
|
h_map[&compensate_bounded_out(plate.0, plate.2, x2)],
|
||||||
|
v_map[&compensate_bounded_out(plate.1, plate.3, y2)],
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let mut field = vec![vec![false; height - 1]; width - 1];
|
||||||
|
|
||||||
|
for chip in chips {
|
||||||
|
let (x1, y1, x2, y2) = chip;
|
||||||
|
|
||||||
|
for i in x1..x2 {
|
||||||
|
for j in y1..y2 {
|
||||||
|
field[i][j] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut vis = field.clone();
|
||||||
|
|
||||||
|
let delta = [(0, -1), (0, 1), (-1, 0), (1, 0)];
|
||||||
|
|
||||||
|
let mut res = 0;
|
||||||
|
for i in 0..width - 1 {
|
||||||
|
for j in 0..height - 1 {
|
||||||
|
if vis[i][j] {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
res += 1;
|
||||||
|
let mut deq = vec![(i, j)];
|
||||||
|
|
||||||
|
while !deq.is_empty() {
|
||||||
|
let curr = deq.pop().unwrap();
|
||||||
|
if vis[curr.0][curr.1] {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
vis[curr.0][curr.1] = true;
|
||||||
|
}
|
||||||
|
for dx in delta {
|
||||||
|
let nxt = (curr.0 as isize + dx.0, curr.1 as isize + dx.1);
|
||||||
|
if !(nxt.0 < 0
|
||||||
|
|| nxt.0 >= width as isize - 1
|
||||||
|
|| nxt.1 < 0
|
||||||
|
|| nxt.1 >= height as isize - 1)
|
||||||
|
{
|
||||||
|
let nxt = (nxt.0 as usize, nxt.1 as usize);
|
||||||
|
if !field[nxt.0][nxt.1] {
|
||||||
|
deq.push((nxt.0 as usize, nxt.1 as usize));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("{}", res);
|
||||||
|
}
|
||||||
117
storage/zeta/rs/completed/5584.rs
Normal file
117
storage/zeta/rs/completed/5584.rs
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
use std::{
|
||||||
|
collections::HashMap,
|
||||||
|
io::{read_to_string, stdin},
|
||||||
|
};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let temp = read_to_string(stdin()).unwrap();
|
||||||
|
|
||||||
|
let mut iter = temp
|
||||||
|
.split_ascii_whitespace()
|
||||||
|
.map(|x| x.parse::<usize>().unwrap());
|
||||||
|
|
||||||
|
let (w, h) = (iter.next().unwrap(), iter.next().unwrap());
|
||||||
|
|
||||||
|
let n = iter.next().unwrap();
|
||||||
|
|
||||||
|
let tapes = (0..n)
|
||||||
|
.map(|_| {
|
||||||
|
(
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
iter.next().unwrap(),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let mut horizontal_map = HashMap::new();
|
||||||
|
let mut vertical_map = HashMap::new();
|
||||||
|
let mut horionztal_pivots = vec![];
|
||||||
|
let mut vertical_pivots = vec![];
|
||||||
|
horionztal_pivots.push(0);
|
||||||
|
horionztal_pivots.push(w);
|
||||||
|
vertical_pivots.push(0);
|
||||||
|
vertical_pivots.push(h);
|
||||||
|
for &(x1, y1, x2, y2) in tapes.iter() {
|
||||||
|
horionztal_pivots.push(x1);
|
||||||
|
horionztal_pivots.push(x2);
|
||||||
|
vertical_pivots.push(y1);
|
||||||
|
vertical_pivots.push(y2);
|
||||||
|
}
|
||||||
|
|
||||||
|
horionztal_pivots.sort();
|
||||||
|
vertical_pivots.sort();
|
||||||
|
let mut cnt = 0;
|
||||||
|
for pivot in horionztal_pivots.iter() {
|
||||||
|
if !horizontal_map.contains_key(pivot) {
|
||||||
|
horizontal_map.insert(*pivot, cnt);
|
||||||
|
cnt += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let width = cnt - 1;
|
||||||
|
let mut cnt = 0;
|
||||||
|
for pivot in vertical_pivots.iter() {
|
||||||
|
if !vertical_map.contains_key(pivot) {
|
||||||
|
vertical_map.insert(*pivot, cnt);
|
||||||
|
cnt += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let height = cnt - 1;
|
||||||
|
|
||||||
|
let mut field = vec![vec![false; height]; width];
|
||||||
|
|
||||||
|
for (x1, y1, x2, y2) in tapes.iter() {
|
||||||
|
let (x1, y1, x2, y2) = (
|
||||||
|
horizontal_map[x1],
|
||||||
|
vertical_map[y1],
|
||||||
|
horizontal_map[x2],
|
||||||
|
vertical_map[y2],
|
||||||
|
);
|
||||||
|
|
||||||
|
for i in x1..x2 {
|
||||||
|
for j in y1..y2 {
|
||||||
|
field[i][j] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut res = 0;
|
||||||
|
let mut vis = field.clone();
|
||||||
|
let delta = vec![(0, -1), (0, 1), (-1, 0), (1, 0)];
|
||||||
|
for i in 0..width {
|
||||||
|
for j in 0..height {
|
||||||
|
if vis[i][j] {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut deq = vec![(i, j)];
|
||||||
|
|
||||||
|
while !deq.is_empty() {
|
||||||
|
let curr = deq.pop().unwrap();
|
||||||
|
if vis[curr.0][curr.1] {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
vis[curr.0][curr.1] = true;
|
||||||
|
}
|
||||||
|
for (dx, dy) in delta.iter() {
|
||||||
|
let nxt_x = curr.0 as isize + dx;
|
||||||
|
if nxt_x < 0 || nxt_x >= width as isize {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let nxt_y = curr.1 as isize + dy;
|
||||||
|
if nxt_y < 0 || nxt_y >= height as isize {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if vis[nxt_x as usize][nxt_y as usize] {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
deq.push((nxt_x as usize, nxt_y as usize));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("{}", res);
|
||||||
|
}
|
||||||
78
storage/zeta/rs/completed/7512.rs
Normal file
78
storage/zeta/rs/completed/7512.rs
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
use std::io::{read_to_string, stdin};
|
||||||
|
|
||||||
|
const P_MAX: usize = 10_000_000;
|
||||||
|
|
||||||
|
fn get_primes(n: usize) -> Vec<usize> {
|
||||||
|
let mut primes = vec![2];
|
||||||
|
|
||||||
|
for i in (3..=n).step_by(2) {
|
||||||
|
for &p in primes.iter() {
|
||||||
|
if i % p == 0 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if p * p >= i {
|
||||||
|
primes.push(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
primes
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let temp = read_to_string(stdin()).unwrap();
|
||||||
|
let mut iter = temp
|
||||||
|
.split_ascii_whitespace()
|
||||||
|
.map(|x| x.parse::<usize>().unwrap());
|
||||||
|
|
||||||
|
let tc = iter.next().unwrap();
|
||||||
|
|
||||||
|
let primes = get_primes(P_MAX);
|
||||||
|
let cum_primes = {
|
||||||
|
let mut cp = vec![0];
|
||||||
|
for p in primes.iter() {
|
||||||
|
cp.push(cp.last().unwrap() + p);
|
||||||
|
}
|
||||||
|
cp
|
||||||
|
};
|
||||||
|
|
||||||
|
(1..=tc).for_each(|case| {
|
||||||
|
let m = iter.next().unwrap();
|
||||||
|
let ns = (0..m).map(|_| iter.next().unwrap()).collect::<Vec<_>>();
|
||||||
|
let mut idxs = vec![0; m];
|
||||||
|
let mut values = vec![0; m];
|
||||||
|
let mut _cnt = 0;
|
||||||
|
loop {
|
||||||
|
let finish_flag = values[0] != 0 && values.iter().all(|&x| x == values[0]);
|
||||||
|
|
||||||
|
if finish_flag {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
let i = values
|
||||||
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.min_by_key(|&(_, &v)| v)
|
||||||
|
.unwrap()
|
||||||
|
.0;
|
||||||
|
let n = ns[i];
|
||||||
|
let mut idx = idxs[i];
|
||||||
|
loop {
|
||||||
|
let s = cum_primes[idx + n] - cum_primes[idx];
|
||||||
|
match primes.binary_search(&s) {
|
||||||
|
Ok(x) => {
|
||||||
|
values[i] = primes[x];
|
||||||
|
idxs[i] = idx + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Err(_) => {}
|
||||||
|
}
|
||||||
|
|
||||||
|
idx += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Scenario {}:\n{}\n", case, values[0]);
|
||||||
|
})
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user