結果

問題 No.375 立方体のN等分 (1)
ユーザー EmKjp
提出日時 2016-06-04 23:49:01
言語 C#
(csc 2.7.0.62620)
結果
AC  
実行時間 225 ms
コード長 3,539 Byte
コンパイル時間 2,296 ms
使用メモリ 19,648 KB
最終ジャッジ日時 2018-07-14 21:31:51

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
sample1.txt AC 27 ms
9,316 KB
sample2.txt AC 27 ms
9,304 KB
system_test1.txt AC 52 ms
9,484 KB
t01.txt AC 27 ms
9,300 KB
t02.txt AC 27 ms
9,304 KB
t03.txt AC 28 ms
9,320 KB
t04.txt AC 27 ms
9,300 KB
t05.txt AC 30 ms
9,332 KB
t06.txt AC 47 ms
9,992 KB
t07.txt AC 30 ms
9,304 KB
t08.txt AC 34 ms
9,304 KB
t09.txt AC 34 ms
9,312 KB
t10.txt AC 36 ms
9,324 KB
t11.txt AC 36 ms
9,316 KB
t12.txt AC 102 ms
12,508 KB
t13.txt AC 40 ms
9,320 KB
t14.txt AC 36 ms
9,308 KB
t15.txt AC 158 ms
14,892 KB
t16.txt AC 109 ms
12,444 KB
t17.txt AC 39 ms
9,312 KB
t18.txt AC 34 ms
9,308 KB
t19.txt AC 34 ms
9,312 KB
t20.txt AC 225 ms
19,648 KB
t21.txt AC 38 ms
9,308 KB
t22.txt AC 34 ms
9,300 KB
t23.txt AC 51 ms
9,468 KB
t24.txt AC 37 ms
9,312 KB
t25.txt AC 40 ms
9,312 KB
t26.txt AC 34 ms
9,296 KB
t27.txt AC 34 ms
9,296 KB
t28.txt AC 36 ms
9,296 KB
t29.txt AC 38 ms
9,316 KB
t30.txt AC 34 ms
9,304 KB
t31.txt AC 38 ms
9,320 KB
テストケース一括ダウンロード
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 2.6.0.62309 (d3f6b8e7)
Copyright (C) Microsoft Corporation. All rights reserved.

ソースコード

diff #
using System;
using System.IO;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;


partial class Solver {
    static public List<long> Divisors(long x) {
        List<long> ret = new List<long>();
        for (long i = 1; i * i <= x; i++) {
            if (x % i == 0) {
                ret.Add(i);
                if (i != x / i) ret.Add(x / i);
            }
        }
        ret.Sort();
        return ret;
    }

    public void Run() {
        var N = nl();
        var divisors = Divisors(N);
        long tmin = long.MaxValue, tmax = 0;

        foreach (var a in divisors) {
            if (tmin <= a) continue;
            var rem = N / a;
            foreach (var b in Divisors(rem)) {
                if (tmin <= a + b) break;
                var c = rem / b;
                tmin = Math.Min(tmin, a + b + c - 3);
            }
        }

        tmax = N - 1;

        cout.WriteLine(string.Format("{0} {1}", tmin, tmax));
    }
}

// PREWRITEN CODE BEGINS FROM HERE
partial class Solver : Scanner {
    public static void Main(string[] args) {
        new Solver(Console.In, Console.Out).Run();
    }

    TextReader cin;
    TextWriter cout;

    public Solver(TextReader reader, TextWriter writer)
        : base(reader) {
        this.cin = reader;
        this.cout = writer;
    }
    public Solver(string input, TextWriter writer)
        : this(new StringReader(input), writer) {
    }

    public int ni() { return NextInt(); }
    public int[] ni(int n) { return NextIntArray(n); }
    public long nl() { return NextLong(); }
    public long[] nl(int n) { return NextLongArray(n); }
    public double nd() { return NextDouble(); }
    public string ns() { return Next(); }
    public string[] ns(int n) { return NextArray(n); }
}

public class Scanner {
    private TextReader Reader;
    private Queue<String> TokenQueue = new Queue<string>();
    private CultureInfo ci = CultureInfo.InvariantCulture;

    public Scanner()
        : this(Console.In) {
    }

    public Scanner(TextReader reader) {
        this.Reader = reader;
    }

    public int NextInt() { return Int32.Parse(Next(), ci); }
    public long NextLong() { return Int64.Parse(Next(), ci); }
    public double NextDouble() { return double.Parse(Next(), ci); }
    public string[] NextArray(int size) {
        var array = new string[size];
        for (int i = 0; i < size; i++) array[i] = Next();
        return array;
    }
    public int[] NextIntArray(int size) {
        var array = new int[size];
        for (int i = 0; i < size; i++) array[i] = NextInt();
        return array;
    }

    public long[] NextLongArray(int size) {
        var array = new long[size];
        for (int i = 0; i < size; i++) array[i] = NextLong();
        return array;
    }

    public String Next() {
        if (TokenQueue.Count == 0) {
            if (!StockTokens()) throw new InvalidOperationException();
        }
        return TokenQueue.Dequeue();
    }

    public bool HasNext() {
        if (TokenQueue.Count > 0)
            return true;
        return StockTokens();
    }

    private bool StockTokens() {
        while (true) {
            var line = Reader.ReadLine();
            if (line == null) return false;
            var tokens = line.Trim().Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            if (tokens.Length == 0) continue;
            foreach (var token in tokens)
                TokenQueue.Enqueue(token);
            return true;
        }
    }
}
0