結果
| 問題 |
No.5017 Tool-assisted Shooting
|
| コンテスト | |
| ユーザー |
tamura-up
|
| 提出日時 | 2023-07-21 04:27:40 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 3,300 bytes |
| コンパイル時間 | 2,599 ms |
| コンパイル使用メモリ | 152,384 KB |
| 実行使用メモリ | 24,468 KB |
| スコア | 74,830 |
| 平均クエリ数 | 400.56 |
| 最終ジャッジ日時 | 2023-07-21 04:27:53 |
| 合計ジャッジ時間 | 12,377 ms |
|
ジャッジサーバーID (参考情報) |
judge11 / judge14 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 18 RE * 82 |
コンパイルメッセージ
warning: irrefutable `while let` pattern
--> Main.rs:78:11
|
78 | while let enemies=read_input(){
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this pattern will always match, so the loop will never exit
= help: consider instead using a `loop { ... }` with a `let` inside it
= note: `#[warn(irrefutable_let_patterns)]` on by default
warning: unused variable: `enemies`
--> Main.rs:78:15
|
78 | while let enemies=read_input(){
| ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_enemies`
|
= note: `#[warn(unused_variables)]` on by default
warning: 2 warnings emitted
ソースコード
#![allow(unused_imports)]
#![allow(unused_macros)]
#![allow(dead_code)]
#![allow(non_snake_case)]
use std::fs::read;
use std::io::Write;
use std::time::Instant;
const Y: usize = 60;
// src: https://yukicoder.me/submissions/892593
//
// let x = get!(i32); // 1行の i32 の入力を受け取る
// let x = get!(i32;2); // 2行の i32 の入力を受け取る
//
// tuple
// let x = get!(i32,i32,i32); // (i32, i32, i32 )のタプルを受け取る
// let x = get!(i32,i32,i32;2); // 2行 (i32, i32, i32 )のタプルを受け取る
macro_rules! get {
($t:ty) => {
{
let mut line: String = String::new();
std::io::stdin().read_line(&mut line).unwrap();
line.trim().parse::<$t>().unwrap()
}
};
($($t:ty),*) => {
{
let mut line: String = String::new();
std::io::stdin().read_line(&mut line).unwrap();
let mut iter = line.split_whitespace();
(
$(iter.next().unwrap().parse::<$t>().unwrap(),)*
)
}
};
($t:ty; $n:expr) => {
(0..$n).map(|_|
get!($t)
).collect::<Vec<_>>()
};
($($t:ty),*; $n:expr) => {
(0..$n).map(|_|
get!($($t),*)
).collect::<Vec<_>>()
};
($t:ty ;;) => {
{
let mut line: String = String::new();
std::io::stdin().read_line(&mut line).unwrap();
line.split_whitespace()
.map(|t| t.parse::<$t>().unwrap())
.collect::<Vec<_>>()
}
};
($t:ty ;; $n:expr) => {
(0..$n).map(|_| get!($t ;;)).collect::<Vec<_>>()
};
}
fn read_input() -> Option<Vec<(u32, u32, usize)>> {
let n=get!(i32);
if n < 0{
return None;
}
let mut enemies=vec![];
for _ in 0..n{
enemies.push(get!(u32,u32,usize));
}
Some(enemies)
}
fn main() {
let mut iter=0;
while let enemies=read_input(){
iter+=1;
println!("S");
std::io::stdout().flush().unwrap();
if iter>=1000{break;}
}
}
// {{{
const INF: i64 = 1000_100_100;
const INFL: i64 = INF * INF;
struct Timer {
since: Instant,
duration: f64,
}
impl Timer {
fn new(duration: f64) -> Timer {
Timer {
since: Instant::now(),
duration,
}
}
/*
* duration 中の経過割合を返す
* 例) duration:2.0 で経過時間:1.0 のとき, 0.5 が返される
*/
fn t(&self) -> f64 {
(Instant::now() - self.since).as_secs_f64() * (1.0 / self.duration)
}
fn left_sec(&self) -> f64 {
self.duration - ((Instant::now() - self.since).as_secs_f64())
}
/* 経過時間 */
fn sec(&self) -> f64 {
(Instant::now() - self.since).as_secs_f64()
}
}
/// 座標を表す構造体
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
struct P(pub usize, pub usize);
pub trait SetMinMax { fn setmin(&mut self, v: Self) -> bool; fn setmax(&mut self, v: Self) -> bool; }
impl<T> SetMinMax for T where T: PartialOrd {
fn setmin(&mut self, v: T) -> bool { *self > v && { *self = v; true } }
fn setmax(&mut self, v: T) -> bool { *self < v && { *self = v; true } }
}
tamura-up