Submission #3229427


Source Code Expand

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
//using System.Text;
//using System.Text.RegularExpressions;
//using System.Globalization;
//using System.Diagnostics;
using static System.Console;
//using System.Numerics;
//using static System.Math;
using pair = Pair<double, long>;

class Program
{
    static void Main()
    {
        //SetOut(new StreamWriter(OpenStandardOutput()) { AutoFlush = false });
        new Program().solve();
        Out.Flush();
    }
    Scanner cin = new Scanner();
    readonly int[] dd = { 0, 1, 0, -1, 0 }; //→↓←↑
    readonly int mod = 1000000007;
    void chmax<T>(ref T a, T b) where T : IComparable<T> { a = a.CompareTo(b) < 0 ? b : a; }
    void chmin<T>(ref T a, T b) where T : IComparable<T> { a = a.CompareTo(b) < 0 ? a : b; }

    void solve()
    {
        //int N = cin.nextint;

        //double max = int.MaxValue;
        //for (int i = N; i > 0; i--)
        //{
        //    int j = i;
        //    int t = 0;
        //    while (j > 0)
        //    {
        //        t += j % 10;
        //        j /= 10;
        //    }
        //    var d = (double)i / t;
        //    if(d < max)
        //    {
        //        WriteLine(i);
        //        max = d;
        //    }
        //}

        var Q = new PriorityQueue<pair>();
        var K = cin.nextlong;

        //9の個数
        long mol = 1;
        for (int i = 0; i <= 15; i++)
        {
            for (int j = 2; j <= 100; j++)
            {
                long X = j * mol - 1;
                long Y = X;
                long S = 0;
                while (Y > 0)
                {
                    S += Y % 10;
                    Y /= 10;
                }
                Q.Enqueue(new pair(-(double)X / S, -X));
            }
            mol *= 10;
        }

        long id = 0;
        long cnt = 0;
        while(cnt < K)
        {
            var p = Q.Dequeue();
            if (id < -p.s)
            {
                WriteLine(-p.s);
                id = -p.s;
                cnt++;
            }
        }
    }

}


class Pair<T, U> : IComparable<Pair<T, U>> where T : IComparable<T> where U : IComparable<U>
{
    public T f;
    public U s;
    public Pair(T f, U s)
    {
        this.f = f;
        this.s = s;
    }
    public int CompareTo(Pair<T, U> a)
    {
        return f.CompareTo(a.f) != 0 ? f.CompareTo(a.f) : s.CompareTo(a.s);
    }
    public override string ToString()
    {
        return f + " " + s;
    }
}

class PriorityQueue<T> where T : IComparable<T>
{
    List<T> heap; int size;
    int Compare(T x, T y) { return y.CompareTo(x); }
    public PriorityQueue() { heap = new List<T>(); }
    public void Enqueue(T x)
    {
        heap.Add(x);
        int i = size++;
        while (i > 0)
        {
            int p = (i - 1) >> 1;
            if (Compare(heap[p], x) <= 0) break;
            heap[i] = heap[p]; i = p;
        }
        heap[i] = x;
    }
    public T Dequeue()
    {
        T ret = heap[0]; T x = heap[--size];
        int i = 0;
        while ((i << 1) + 1 < size)
        {
            int a = (i << 1) + 1; int b = (i << 1) + 2;
            if (b < size && Compare(heap[b], heap[a]) < 0) a = b;
            if (Compare(heap[a], x) >= 0) break;
            heap[i] = heap[a]; i = a;
        }
        heap[i] = x; heap.RemoveAt(size);
        return ret;
    }
    public int Count { get { return size; } }
    public bool Any() { return size > 0; }
    public T Peek() { return heap[0]; }
}
class Scanner
{
    string[] s; int i;
    char[] cs = new char[] { ' ' };
    public Scanner() { s = new string[0]; i = 0; }
    public string[] scan { get { return ReadLine().Split(); } }
    public int[] scanint { get { return Array.ConvertAll(scan, int.Parse); } }
    public long[] scanlong { get { return Array.ConvertAll(scan, long.Parse); } }
    public double[] scandouble { get { return Array.ConvertAll(scan, double.Parse); } }
    public string next
    {
        get
        {
            if (i < s.Length) return s[i++];
            string st = ReadLine();
            while (st == "") st = ReadLine();
            s = st.Split(cs, StringSplitOptions.RemoveEmptyEntries);
            i = 0;
            return next;
        }
    }
    public int nextint { get { return int.Parse(next); } }
    public long nextlong { get { return long.Parse(next); } }
    public double nextdouble { get { return double.Parse(next); } }
}

Submission Info

Submission Time
Task C - Minimization
User claw88
Language C# (Mono 4.6.2.0)
Score 0
Code Size 4636 Byte
Status RE
Exec Time 30 ms
Memory 12896 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 300
Status
WA × 3
WA × 6
RE × 10
Set Name Test Cases
Sample sample1.txt, sample2.txt, sample3.txt
All sample1.txt, sample2.txt, sample3.txt, 1.txt, 10.txt, 2.txt, 3.txt, 4.txt, 5.txt, 6.txt, 7.txt, 8.txt, 9.txt, sample1.txt, sample2.txt, sample3.txt
Case Name Status Exec Time Memory
1.txt RE 29 ms 8800 KB
10.txt RE 30 ms 10848 KB
2.txt RE 30 ms 12896 KB
3.txt RE 30 ms 12896 KB
4.txt RE 29 ms 10848 KB
5.txt RE 30 ms 12896 KB
6.txt RE 29 ms 8800 KB
7.txt RE 30 ms 12896 KB
8.txt RE 30 ms 12896 KB
9.txt RE 30 ms 10848 KB
sample1.txt WA 23 ms 9132 KB
sample2.txt WA 23 ms 11180 KB
sample3.txt WA 23 ms 9132 KB