CODE FESTIVAL 2016 Grand Final

Submission #1202639

Source codeソースコード

#[allow(unused_imports)]
use std::cmp::*;
#[allow(unused_imports)]
use std::collections::*;
use std::io::Read;
#[allow(dead_code)]
fn getline() -> String {
    let mut ret = String::new();
    std::io::stdin().read_line(&mut ret).ok().unwrap();
    ret
}
fn get_word() -> String {
    let mut stdin = std::io::stdin();
    let mut u8b: [u8; 1] = [0];
    loop {
        let mut buf: Vec<u8> = Vec::with_capacity(16);
        loop {
            let res = stdin.read(&mut u8b);
            if res.unwrap_or(0) == 0 || u8b[0] <= b' ' {
                break;
            } else {
                buf.push(u8b[0]);
            }
        }
        if buf.len() >= 1 {
            let ret = String::from_utf8(buf).unwrap();
            return ret;
        }
    }
}

#[allow(dead_code)]
fn get<T: std::str::FromStr>() -> T { get_word().parse().ok().unwrap() }

fn get_point() -> (f64, f64) {
    let x = get();
    let y = get();
    (x, y)
}

type Pt = (f64, f64);
fn dist(a: Pt, b: Pt) -> f64 {
    ((a.0 - b.0).powi(2) + (a.1 - b.1).powi(2)).sqrt()
}

fn maxf(a: f64, b: f64) -> f64 {
    if a > b { a } else { b }
}

// I wrote this solution after I read the editorial.
fn solve() {
    let p1 = get_point();
    let p2 = get_point();
    let p3 = get_point();
    let two_s = (p2.0 - p1.0) * (p3.1 - p1.1) - (p3.0 - p1.0) * (p2.1 - p1.1);
    let two_s = two_s.abs();
    let a = dist(p1, p2);
    let b = dist(p3, p2);
    let c = dist(p1, p3);
    let r = two_s / (a + b + c);
    // Find x s.t. max(a, b, c) * (1 - x / r) >= 2 * x
    let abc = maxf(a, maxf(b, c));
    println!("{}", abc / (2.0 + abc / r));
}

fn main() {
    // In order to avoid potential stack overflow, spawn a new thread.
    let stack_size = 104_857_600; // 100 MB
    let thd = std::thread::Builder::new().stack_size(stack_size);
    thd.spawn(|| solve()).unwrap().join().unwrap();
}

Submission

Task問題 B - Inscribed Bicycle
User nameユーザ名 koba@チーム戦の時は別垢を作れ!
Created time投稿日時
Language言語 Rust (1.15.1)
Status状態 AC
Score得点 500
Source lengthソースコード長 1861 Byte
File nameファイル名
Exec time実行時間 3 ms
Memory usageメモリ使用量 8572 KB

Test case

Set

Set name Score得点 / Max score Cases
Sample - example0.txt,example1.txt
All 500 / 500 000.txt,001.txt,002.txt,003.txt,004.txt,005.txt,006.txt,007.txt,008.txt,009.txt,010.txt,011.txt,012.txt,013.txt,014.txt,015.txt,example0.txt,example1.txt

Test case

Case name Status状態 Exec time実行時間 Memory usageメモリ使用量
000.txt AC 3 ms 8572 KB
001.txt AC 3 ms 8572 KB
002.txt AC 3 ms 8572 KB
003.txt AC 3 ms 8572 KB
004.txt AC 3 ms 8572 KB
005.txt AC 3 ms 8572 KB
006.txt AC 3 ms 8572 KB
007.txt AC 3 ms 8572 KB
008.txt AC 3 ms 8572 KB
009.txt AC 3 ms 8572 KB
010.txt AC 3 ms 8572 KB
011.txt AC 3 ms 8572 KB
012.txt AC 3 ms 8572 KB
013.txt AC 3 ms 8572 KB
014.txt AC 3 ms 8572 KB
015.txt AC 3 ms 8572 KB
example0.txt AC 3 ms 8572 KB
example1.txt AC 3 ms 8572 KB