add cf round-1087-{A,B,C}.rs

This commit is contained in:
2026-03-22 16:28:44 +09:00
parent a42056c8d1
commit 681170f289
3 changed files with 133 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
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::<usize>().unwrap());
let t = iter.next().unwrap();
(0..t).for_each(|_| {
let (n, mut c, mut k) = (
// number, combat power, k of flip flop
iter.next().unwrap(),
iter.next().unwrap(),
iter.next().unwrap(),
);
let mut arr = (0..n).map(|_| iter.next().unwrap()).collect::<Vec<_>>();
arr.sort();
loop {
let key = arr.binary_search(&c);
match key {
Ok(idx) => {
c += arr[idx];
arr.remove(idx);
}
Err(idx) => {
if idx == 0 {
break;
} else {
let delta = c - arr[idx - 1];
let consume = if k >= delta { delta } else { k };
k -= consume;
c += consume + arr[idx - 1];
arr.remove(idx - 1);
}
}
}
}
println!("{}", c);
});
}

View File

@@ -0,0 +1,37 @@
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 t = iter.next().unwrap();
(0..t).for_each(|_| {
let n = iter.next().unwrap() as usize;
let arr = (0..n).map(|_| iter.next().unwrap()).collect::<Vec<_>>();
// if n == 1 return 0
for i in 0..n {
if i == n - 1 {
print!("{} ", 0);
continue;
}
let key = arr[i];
let mut cnt_lo = 0;
let mut cnt_hi = 0;
for &e in arr[(i + 1)..n].iter() {
if e > key {
cnt_hi += 1;
} else if e < key {
cnt_lo += 1;
}
}
print!("{} ", std::cmp::max(cnt_lo, cnt_hi));
}
println!();
});
}

View File

@@ -0,0 +1,54 @@
use std::io::{Write, stdin, stdout};
fn client(n: usize) {
let mut line = String::new();
for i in 0..n - 1 {
let left = 2 * i + 1;
let right = 2 * i + 2;
println!("? {} {}", left, right);
stdout().flush().unwrap();
line.clear();
stdin().read_line(&mut line).unwrap();
let q = line.trim().parse::<usize>().unwrap();
if q == 1 {
println!("! {}", left);
stdout().flush().unwrap();
return;
}
}
println!("? {} {}", 2 * n - 1, 2 * n - 2);
stdout().flush().unwrap();
line.clear();
stdin().read_line(&mut line).unwrap();
let q = line.trim().parse::<usize>().unwrap();
if q == 1 {
println!("! {}", 2 * n - 1);
stdout().flush().unwrap();
return;
}
println!("? {} {}", 2 * n - 1, 2 * n - 3);
stdout().flush().unwrap();
line.clear();
stdin().read_line(&mut line).unwrap();
let q = line.trim().parse::<usize>().unwrap();
if q == 1 {
println!("! {}", 2 * n - 1);
stdout().flush().unwrap();
return;
}
println!("! {}", 2 * n);
}
fn main() {
let mut line = String::new();
stdin().read_line(&mut line).unwrap();
let t = line.trim().parse::<usize>().unwrap();
(0..t).for_each(|_| {
line.clear();
stdin().read_line(&mut line).unwrap();
let n = line.trim().parse::<usize>().unwrap();
client(n);
});
}