use std::io; fn main() { let mut input = String::new(); io::stdin().read_line(&mut input).expect("Failed to read line"); let parts:Vec<u32> = input.trim().split_whitespace().map(|x| x.parse::<u32>().expect("Failed to parse")).collect(); let n = parts[0]; let i = parts[1]; let j = parts[2]; // 计算i,j在第几层 let layer = clac_layer(&n,&i,&j); // 计算第layer层的元素 let layer_ele = layer_element(&n,&layer); // 计算第layer层的第i,j个元素的索引 let element = calc_index(&n,&layer,&i,&j); // 计算第layer层的第i,j个元素的值 let result = layer_ele[element as usize-1]; // 输出结果 println!("{}",result); } // 算出i,j在第几层 fn clac_layer(n:&u32,i:&u32,j:&u32)->u32{ let layer:f64 = (*n) as f64 * 0.5; let layer:u32 = layer.ceil() as u32; let mut il = *i; let mut jl= *j; if *n%2 == 0{ if *i > layer { il = layer - (*i -layer)+1; }; if *j > layer { jl = layer - (*j -layer)+1; }; }else{ if *i > layer { il = layer - (*i -layer); }; if *j > layer { jl = layer - (*j -layer); }; } il.min(jl) } // 计算第layer层的元素 fn layer_element(n:&u32,layer:&u32) -> Vec<u32>{ let mut sum = 0; fn layer_element(layer:&u32,n:&u32) -> u32{ let rect_len = *n-(*layer-1)*2; if rect_len == 1{ return 1 }else{ return rect_len*4-4 } } for i in 0..(*n as f64 * 0.5).ceil() as u32 { if i+1 == *layer{ break } sum += layer_element(&(i+1),&n); } ((sum+1)..(sum+1+layer_element(&layer,&n))).collect() } // 计算第layer层的第i,j个元素的索引 fn calc_index(n:&u32,layer:&u32,i:&u32,j:&u32) -> u32{ let rect_len = *n-(*layer-1)*2; let il = *i-*layer+1; let jl = *j-*layer+1; if il == 1{ return jl; }else if jl == rect_len{ return rect_len+il-1; }else if il ==rect_len{ return rect_len*2-1+(rect_len-jl); }else if jl == 1{ return rect_len*3-2+(rect_len-il); }else{ return 1 } }