結果
| 問題 | No.3632 IQR |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-04 00:47:02 |
| 言語 | Rust (1.97.1 + proconio + num + itertools) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 16,565 bytes |
| 記録 | |
| コンパイル時間 | 9,361 ms |
| コンパイル使用メモリ | 193,584 KB |
| 実行使用メモリ | 30,200 KB |
| 最終ジャッジ日時 | 2026-09-04 00:47:22 |
| 合計ジャッジ時間 | 14,157 ms |
|
ジャッジサーバーID (参考情報) |
judge3_1 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | WA * 63 |
コンパイルメッセージ
warning: value assigned to `q1` is never read
--> src/main.rs:509:22
|
509 | let mut q1:f64 = 0.0;
| ^^^ this value is reassigned later and never used
...
515 | q1 = a[d/2];
| ----------- `q1` is overwritten here before the previous value is read
|
= note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
warning: value assigned to `q2` is never read
--> src/main.rs:510:22
|
510 | let mut q2:f64 = 0.0;
| ^^^ this value is reassigned later and never used
...
520 | q2 = a[n/2];
| ----------- `q2` is overwritten here before the previous value is read
warning: value assigned to `q3` is never read
--> src/main.rs:511:22
|
511 | let mut q3:f64 = 0.0;
| ^^^ this value is reassigned later and never used
...
525 | q3 = a[n-1-(d/2)];
| ----------------- `q3` is overwritten here before the previous value is read
ソースコード
#![allow(dead_code, unused_imports)]
// bundled from rust_template (edition 2024) by tools/bundle.py
mod io {
#![allow(dead_code)]
use std::io::{self, Read};
pub struct Usize1;
pub struct Chars;
pub struct Scanner{ tokens: Vec<String>, idx: usize}
impl Scanner{
pub fn new() -> Self{
let mut input:String = String::new();
io::stdin().read_to_string(&mut input).unwrap();
let tokens = input.split_whitespace().map(|s| s.to_string()).collect();
Scanner{ tokens, idx: 0 }
}
pub fn new_from_string(s: &str) -> Self {
let tokens = s.split_whitespace().map(|s| s.to_string()).collect();
Scanner{ tokens, idx: 0 }
}
}
pub struct IScanner { buf: Vec<String> }
impl IScanner{ pub fn new() -> Self { IScanner{ buf: Vec::new() } } }
pub trait ScannerTrait { fn next_token(&mut self) -> String; }
impl ScannerTrait for Scanner {
fn next_token(&mut self) -> String {
self.idx += 1;
self.tokens[self.idx - 1].clone()
}
}
impl ScannerTrait for IScanner {
fn next_token(&mut self) -> String {
while self.buf.is_empty() {
let mut line : String = String::new();
io::stdin().read_line(&mut line).unwrap();
self.buf = line.split_whitespace().rev().map(|s| s.to_string()).collect();
}
self.buf.pop().unwrap()
}
}
pub trait Scan: Sized {
type Output; fn scan<S: ScannerTrait>(sc: &mut S) -> Self::Output;
}
impl<A:Scan, B:Scan> Scan for (A, B) {
type Output = (A::Output, B::Output);
fn scan<S: ScannerTrait>(sc: &mut S)-> Self::Output {
(A::scan::<S>(sc), B::scan::<S>(sc))
}
}
impl<A:Scan, B:Scan, C:Scan> Scan for (A, B, C) {
type Output = (A::Output, B::Output, C::Output);
fn scan<S: ScannerTrait>(sc: &mut S)-> Self::Output {
(A::scan::<S>(sc), B::scan::<S>(sc), C::scan::<S>(sc))
}
}
impl<A:Scan, B:Scan, C:Scan, D:Scan> Scan for (A, B, C, D) {
type Output = (A::Output, B::Output, C::Output, D::Output);
fn scan<S: ScannerTrait>(sc: &mut S)-> Self::Output {
(A::scan::<S>(sc), B::scan::<S>(sc), C::scan::<S>(sc), D::scan::<S>(sc))
}
}
impl Scan for i32 {
type Output = i32;
fn scan<S: ScannerTrait>(sc:&mut S) -> Self::Output {
sc.next_token().parse::<i32>().ok().unwrap()
}
}
impl Scan for i64 {
type Output = i64;
fn scan<S: ScannerTrait>(sc:&mut S) -> Self::Output {
sc.next_token().parse::<i64>().ok().unwrap()
}
}
impl Scan for u32 {
type Output = u32;
fn scan<S: ScannerTrait>(sc:&mut S) -> Self::Output {
sc.next_token().parse::<u32>().ok().unwrap()
}
}
impl Scan for u64 {
type Output = u64;
fn scan<S: ScannerTrait>(sc:&mut S) -> Self::Output {
sc.next_token().parse::<u64>().ok().unwrap()
}
}
impl Scan for usize {
type Output = usize;
fn scan<S: ScannerTrait>(sc:&mut S) -> Self::Output {
sc.next_token().parse::<usize>().ok().unwrap()
}
}
impl Scan for Usize1 {
type Output = usize;
fn scan<S: ScannerTrait>(sc:&mut S) -> Self::Output {
sc.next_token().parse::<usize>().ok().unwrap()-1
}
}
impl Scan for f32 {
type Output = f32;
fn scan<S: ScannerTrait>(sc:&mut S) -> Self::Output {
sc.next_token().parse::<f32>().ok().unwrap()
}
}
impl Scan for f64 {
type Output = f64;
fn scan<S: ScannerTrait>(sc:&mut S) -> Self::Output {
sc.next_token().parse::<f64>().ok().unwrap()
}
}
impl Scan for String {
type Output = String;
fn scan<S: ScannerTrait>(sc:&mut S) -> Self::Output {
sc.next_token().parse::<String>().ok().unwrap()
}
}
impl Scan for Chars {
type Output = Vec<char>;
fn scan<S: ScannerTrait>(sc:&mut S) -> Self::Output {
sc.next_token().parse::<String>().ok().unwrap().chars().collect()
}
}
impl Scan for char {
type Output = char;
fn scan<S: ScannerTrait>(sc:&mut S) -> Self::Output {
sc.next_token().parse::<char>().ok().unwrap()
}
}
#[macro_export]
macro_rules! input {
($sc:expr, $name:ident : [[$t:ty ; $m:expr] ; $n:expr]) => {
let $name: Vec<Vec<<$t as $crate::io::Scan>::Output>> = {
let rows = $n;
let cols = $m;
let mut v : Vec<Vec<<$t as $crate::io::Scan>::Output>> = Vec::new();
for _ in 0..rows {
let mut row : Vec<<$t as $crate::io::Scan>::Output> = Vec::new();
for _ in 0..cols {
row.push(<$t as $crate::io::Scan>::scan(&mut $sc));
}
v.push(row);
}
v
};
};
($sc:expr, $name:ident : [$t:ty ; $n:expr]) => {
let $name: Vec<<$t as $crate::io::Scan>::Output> = (0..$n).map(|_| <$t as $crate::io::Scan>::scan(&mut $sc)).collect();
};
($sc:expr, $name:ident : $t:ty) => {
let $name: <$t as $crate::io::Scan>::Output = <$t as $crate::io::Scan>::scan(&mut $sc);
};
($sc:expr, mut $name:ident : [[$t:ty ; $m:expr] ; $n:expr]) => {
let mut $name: Vec<Vec<<$t as $crate::io::Scan>::Output>> = {
let rows = $n;
let cols = $m;
let mut v = Vec<Vec<<$t as $crate::io::Scan>::Output>> = Vec::new();
for _ in 0..rows {
let mut row : Vec<<$t as $crate::io::Scan>::Output> = Vec::new();
for _ in 0..cols {
row.push(<$t as $crate::io::Scan>::scan(&mut $sc));
}
v.push(row);
}
v
};
};
($sc:expr, mut $name:ident : [$t:ty ; $n:expr]) => {
let mut $name: Vec<<$t as $crate::io::Scan>::Output> = (0..$n).map(|_| <$t as $crate::io::Scan>::scan(&mut $sc)).collect();
};
($sc:expr, mut $name:ident : $t:ty) => {
let mut $name: <$t as $crate::io::Scan>::Output = <$t as $crate::io::Scan>::scan(&mut $sc);
};
($sc: expr,) => {};
($sc: expr) => {};
}
#[macro_export]
macro_rules! inputs {
($sc:expr, mut $name:ident : $t:tt, $($rest:tt)*) => {
$crate::input!($sc, mut $name:$t);
inputs!($sc, $($rest)*);
};
($sc:expr, $name:ident : $t:tt, $($rest:tt)*) => {
$crate::input!($sc, $name:$t);
inputs!($sc, $($rest)*);
};
($sc:expr, mut $name:ident : $t:tt) => {
$crate::input!($sc, mut $name:$t);
};
($sc:expr, $name:ident : $t:tt) => {
$crate::input!($sc, $name:$t);
};
($sc:expr,) => {};
($sc:expr) => {};
}
pub trait DumpperTrait{
type Output;
fn new() -> Self;
fn dump(&mut self) -> Self::Output;
fn ln(&mut self) -> ();
fn push(&mut self, s: impl Into<String>) -> ();
}
pub struct StrDumpper{
buf: Vec<Vec<String>>
}
impl DumpperTrait for StrDumpper{
type Output = String;
fn new() -> Self {
StrDumpper{buf: Vec::new()}
}
fn dump(&mut self) -> Self::Output {
let mut s = String::new();
for row in &self.buf {
s.push_str(&row.join(" "));
s.push('\n');
}
self.buf.clear();
s
}
fn ln(&mut self) -> (){
if !self.buf.is_empty() {
self.buf.push(Vec::new());
}
}
fn push(&mut self, s: impl Into<String>) -> (){
if self.buf.is_empty() {
self.buf.push(Vec::new());
}
self.buf.last_mut().unwrap().push(s.into());
}
}
pub struct StdDumpper{
buf: Vec<Vec<String>>
}
impl DumpperTrait for StdDumpper{
type Output = ();
fn new() -> Self {
StdDumpper{buf: Vec::new()}
}
fn dump(&mut self) -> Self::Output {
let mut s = String::new();
for row in &self.buf {
s.push_str(&row.join(" "));
s.push('\n');
}
self.buf.clear();
print!("{}",s);
}
fn ln(&mut self) -> (){
if !self.buf.is_empty() {
self.buf.push(Vec::new());
}
}
fn push(&mut self, s: impl Into<String>) -> (){
if self.buf.is_empty() {
self.buf.push(Vec::new());
}
self.buf.last_mut().unwrap().push(s.into());
}
}
pub trait Dump: Sized {
fn reg<D: DumpperTrait>(&self, du:&mut D) -> ();
}
pub struct DumpLine<'a, T>(pub &'a T);
pub struct DumpNLine<'a, T>(pub &'a T);
impl<A:Dump, B:Dump> Dump for (A, B) {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
A::reg::<D>( &self.0, du);
B::reg::<D>( &self.1, du);
}
}
impl<A:Dump, B:Dump, C:Dump> Dump for (A, B, C) {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
A::reg::<D>( &self.0, du);
B::reg::<D>( &self.1, du);
C::reg::<D>( &self.2, du);
}
}
impl<A:Dump, B:Dump, C:Dump, D:Dump> Dump for (A, B, C, D) {
fn reg<Dm: DumpperTrait>(&self, du:&mut Dm)-> () {
A::reg::<Dm>( &self.0, du);
B::reg::<Dm>( &self.1, du);
C::reg::<Dm>( &self.2, du);
D::reg::<Dm>( &self.3, du);
}
}
impl Dump for i32 {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.to_string());
}
}
impl Dump for i64 {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.to_string());
}
}
impl Dump for usize {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.to_string());
}
}
impl Dump for u32 {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.to_string());
}
}
impl Dump for u64 {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.to_string());
}
}
impl Dump for f32 {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.to_string());
}
}
impl Dump for f64 {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.to_string());
}
}
impl Dump for String {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(self);
}
}
impl Dump for &str {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(*self);
}
}
impl Dump for char {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.to_string());
}
}
impl <T: Dump> Dump for Vec<T>
where
for<'a> DumpLine<'a, T>: Dump,
{
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
let n:usize = self.len();
let mut i:usize = 0;
for v in self {
DumpLine(v).reg::<D>(du);
if (i+1)<n {
du.ln();
}
i+=1;
}
}
}
impl<A:Dump, B:Dump> Dump for DumpLine<'_, (A, B)> {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
A::reg::<D>( &self.0.0, du);
B::reg::<D>( &self.0.1, du);
}
}
impl<A:Dump, B:Dump, C:Dump> Dump for DumpLine<'_, (A, B, C)> {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
A::reg::<D>( &self.0.0, du);
B::reg::<D>( &self.0.1, du);
C::reg::<D>( &self.0.2, du);
}
}
impl Dump for DumpLine<'_, i32> {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.0.to_string());
}
}
impl Dump for DumpLine<'_, i64> {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.0.to_string());
}
}
impl Dump for DumpLine<'_, usize> {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.0.to_string());
}
}
impl Dump for DumpLine<'_, f32> {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.0.to_string());
}
}
impl Dump for DumpLine<'_, f64> {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.0.to_string());
}
}
impl Dump for DumpLine<'_, String> {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&*self.0.as_str());
}
}
impl Dump for DumpLine<'_, &str> {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(*self.0);
}
}
impl Dump for DumpLine<'_, char> {
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
du.push(&self.0.to_string());
}
}
impl <T: Dump> Dump for DumpLine<'_, Vec<T>>
where
for<'a> DumpLine<'a, T>: Dump,
{
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
for v in self.0 {
DumpLine(v).reg::<D>(du);
}
}
}
impl <T: Dump> Dump for DumpNLine<'_, Vec<T>>
where
for<'a> DumpLine<'a, T>: Dump,
{
fn reg<D: DumpperTrait>(&self, du:&mut D)-> () {
let n:usize = self.0.len();
n.reg::<D>(du);
du.ln();
for v in self.0 {
DumpLine(v).reg::<D>(du);
}
}
}
#[macro_export]
macro_rules! output {
($du:expr, $val:expr) => {
$du.ln();
$crate::io::Dump::reg(&$val, &mut $du);
};
($du: expr,) => {};
($du: expr) => {};
}
#[macro_export]
macro_rules! outputs {
($du: expr, $val:expr $(, $rest:expr)*) => {
$crate::output!($du, $val);
outputs!($du $(, $rest)*);
};
($du: expr,) => {};
($du: expr) => {};
}
#[macro_export]
macro_rules! yn {
($e:expr) => {
if $e {
"Yes"
} else {
"No"
}
};
($e:expr, $a:expr, $b:expr) => {
if $e {
$a
} else {
$b
}
}
}
pub fn to_judge_string(s:impl Into<String>) -> String {
s.into().split_whitespace().collect::<Vec<_>>().join(" ")
}
}
use io::{Scanner,IScanner,Chars,Usize1,to_judge_string};
use io::{StdDumpper,StrDumpper,DumpperTrait,DumpLine,DumpNLine};
// use zz_module::string::{zalg,palindrome,suffix_array};
// use zz_module::numeric::{ExEuclid};
// use zz_module::numeric::{ex_euclid, inverse};
// use zz_module::modulo::{ModInt,Mod998};
// use zz_module::unionfind::{UnionFind, PotentialUnionFind};
// use zz_module::segtree::{SegTreeS_SumNode, SegTree_Sum, SegTree_Min, SegTreeS_MinNode, SegTree_Max, SegTreeS_MaxNode, SegTree_Fx, SegTreeS_FxNode, SegTree_Trait};
// use zz_module::segtree::*;
fn main() {
let mut sc = Scanner::new();
let mut du = StdDumpper::new();
inputs!(sc, n:usize, mut a:[f64; n]);
a.sort_by(|a, b| a.partial_cmp(b).unwrap());
let d:usize = n/2;
let mut q1:f64 = 0.0;
let mut q2:f64 = 0.0;
let mut q3:f64 = 0.0;
if d%2 == 0 {
q1 = (a[d/2 - 1]+a[d/2])/2.0;
} else {
q1 = a[d/2];
}
if n%2 == 0 {
q2 = (a[n/2 - 1]+a[n/2])/2.0;
} else {
q2 = a[n/2];
}
if d%2 == 0 {
q3 = (a[n-1-(d/2 - 1)]+a[n-1-(d/2)])/2.0;
} else {
q3 = a[n-1-(d/2)];
}
let iqr:f64 = q3-q1;
let mut ans = n;
for x in a.iter() {
if q1 - 1.5 * iqr <= *x && *x <= q3 + 1.5 * iqr {
ans -= 1;
}
}
print!("a={:?}\n",a);
print!("n={n} d={d} q1={q1} q2={q2} q3={q3} oqr={iqr} ans={ans} {} {}\n",q1 - 1.5 * iqr ,q2 + 1.5 * iqr);
outputs!(du, (q1, q2,q3,ans));
du.dump();
}