結果

問題 No.5017 Tool-assisted Shooting
ユーザー tipstar0125
提出日時 2023-07-16 14:53:42
言語 Rust
(1.83.0 + proconio)
結果
AC  
実行時間 34 ms / 2,000 ms
コード長 5,029 bytes
コンパイル時間 1,227 ms
コンパイル使用メモリ 156,072 KB
実行使用メモリ 24,504 KB
スコア 8
平均クエリ数 82.69
最終ジャッジ日時 2023-07-16 14:53:52
合計ジャッジ時間 8,411 ms
ジャッジサーバーID
(参考情報)
judge13 / judge15
純コード判定しない問題か言語
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 100
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#![allow(non_snake_case)]
#![allow(unused_imports)]
#![allow(unused_macros)]
#![allow(clippy::comparison_chain)]
#![allow(clippy::nonminimal_bool)]
#![allow(clippy::neg_multiply)]
#![allow(clippy::type_complexity)]
#![allow(clippy::needless_range_loop)]
#![allow(dead_code)]
use std::{
cmp::Reverse,
collections::{BTreeMap, BTreeSet, BinaryHeap, VecDeque},
};
mod rnd {
static mut S: usize = 0;
static MAX: usize = 1e9 as usize;
#[inline]
pub fn init(seed: usize) {
unsafe {
if seed == 0 {
let t = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_secs() as usize;
S = t
} else {
S = seed;
}
}
}
#[inline]
pub fn gen() -> usize {
unsafe {
if S == 0 {
init(0);
}
S ^= S << 7;
S ^= S >> 9;
S
}
}
#[inline]
pub fn gen_range(a: usize, b: usize) -> usize {
gen() % (b - a) + a
}
#[inline]
pub fn gen_bool() -> bool {
gen() & 1 == 1
}
#[inline]
pub fn gen_range_isize(a: usize) -> isize {
let mut x = (gen() % a) as isize;
if gen_bool() {
x *= -1;
}
x
}
#[inline]
pub fn gen_range_neg_wrapping(a: usize) -> usize {
let mut x = gen() % a;
if gen_bool() {
x = x.wrapping_neg();
}
x
}
#[inline]
pub fn gen_float() -> f64 {
((gen() % MAX) as f64) / MAX as f64
}
}
#[derive(Debug, Clone)]
struct TimeKeeper {
start_time: std::time::Instant,
time_threshold: f64,
}
impl TimeKeeper {
fn new(time_threshold: f64) -> Self {
TimeKeeper {
start_time: std::time::Instant::now(),
time_threshold,
}
}
#[inline]
fn isTimeOver(&self) -> bool {
let elapsed_time = self.start_time.elapsed().as_nanos() as f64 * 1e-9;
#[cfg(feature = "local")]
{
elapsed_time * 1.5 >= self.time_threshold
}
#[cfg(not(feature = "local"))]
{
elapsed_time >= self.time_threshold
}
}
#[inline]
fn get_time(&self) -> f64 {
let elapsed_time = self.start_time.elapsed().as_nanos() as f64 * 1e-9;
#[cfg(feature = "local")]
{
elapsed_time * 1.5
}
#[cfg(not(feature = "local"))]
{
elapsed_time
}
}
}
const H: usize = 60;
const W: usize = 25;
const TURN: usize = 1000;
#[derive(Debug, Clone)]
struct State {
pos: usize,
level: usize,
enemy: [[(usize, usize); W]; H],
turn: usize,
}
impl State {
fn new() -> Self {
State {
pos: 12,
level: 1,
enemy: [[(0, 0); W]; H],
turn: 0,
}
}
fn update_enemy(&mut self, HPX: Vec<(usize, usize, usize)>) {
for i in 1..H {
self.enemy[i - 1] = self.enemy[i];
}
let mut new_enemy = [(0, 0); W];
for (h, p, x) in HPX {
new_enemy[x] = (h, p);
}
self.enemy[H - 1] = new_enemy;
}
fn move_me(&mut self) -> usize {
let r_enemy = self.enemy[0][(self.pos + 1) % W];
let l_enemy = self.enemy[0][(W + self.pos - 1) % W];
if r_enemy == (0, 0) {
self.pos = (self.pos + 1) % W;
return 2;
}
if l_enemy == (0, 0) {
self.pos = (W + self.pos - 1) % W;
return 1;
}
return 0;
}
fn is_done(&self) -> bool {
self.turn == TURN
}
}
#[derive(Default)]
struct Solver {}
impl Solver {
fn solve(&mut self) {
let mut state = State::new();
while !state.is_done() {
let N: isize = read();
if N == -1 {
return;
}
state.turn += 1;
let mut HPX = vec![];
for _ in 0..N {
let v: Vec<usize> = read_vec();
let h = v[0];
let p = v[1];
let x = v[2];
HPX.push((h, p, x));
}
state.update_enemy(HPX);
let c = state.move_me();
if c == 0 {
println!("S");
} else if c == 1 {
println!("L");
} else {
println!("R");
}
}
}
}
fn main() {
std::thread::Builder::new()
.stack_size(128 * 1024 * 1024)
.spawn(|| Solver::default().solve())
.unwrap()
.join()
.unwrap();
}
fn read<T: std::str::FromStr>() -> T {
let mut s = String::new();
std::io::stdin().read_line(&mut s).ok();
s.trim().parse().ok().unwrap()
}
fn read_vec<T: std::str::FromStr>() -> Vec<T> {
read::<String>()
.split_whitespace()
.map(|e| e.parse().ok().unwrap())
.collect()
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0