Problem:
会津地鶏

2008 年 4 月に、会津若松市は長さ20 m 85 cm のやきとり作りに挑戦して成功しました。このとき使われた鶏肉が、会津特産の会津地鶏です。会津地鶏はとてもおいしいのですが、飼育がむずかしいので生産量が少なく、値段が高いのが難点です。

今日は一郎君の家に、遠くから親戚が遊びに来ます。お母さんは鶏肉の水炊きを作って親戚をもてなすことにしました。近くのお肉屋さんでは会津地鶏とふつうの鶏肉の 2 種類の鶏肉を売っています。お母さんは、以下のような指示を一郎君に与えて、お肉屋さんに行って鶏肉を買ってくるように
頼みました。

鶏肉が足りなくなると困るので、決められた量以上の鶏肉を買う。

予算の許す範囲で会津地鶏をできるだけ多く買う(会津地鶏は必ず買うこと)。

会津地鶏を買った残りでふつうの鶏肉をできるだけ多く買う(予算が足りなければ買わない)。

一郎君がお肉屋さんに行くと、会津地鶏が品薄のため一人が買える量を制限していました。一郎君が、お母さんから与えられたすべての指示を守って買い物をするとき、一郎君が買う会津地鶏と普通の鶏肉の量はそれぞれ何グラムになるでしょう?

買うべき鶏肉の量の下限 q1、予算 b、このお肉屋さんでの会津地鶏 100 グラムの値段 c1、ふつうの鶏肉 100 グラムの値段 c2、会津地鶏を一人が買える量の上限 q2 を入力とし、一郎君が買う会津地鶏とふつうの鶏肉の量を 100 グラム単位で出力するプログラムを作成してください。ただし、このお肉屋さんではお母さんの指示通りに買えない場合には、「NA」と出力してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。 各データセットは以下の形式で与えられます。

q1 b c1 c2 q2

鶏肉の量を表すデータ q1 と q2 は100 グラム単位で指定されます。また、b、c1、c2、q1、q2 は 1 以上 1,000,000 以下の整数とします。

データセットの数は 50 を超えません。

Output

データセット毎に、一郎君が購入する会津地鶏の量とふつうの鶏肉の量(半角空白区切り) または「NA」を１行に出力します。

Sample Input

48 9297 240 126 32
20 3010 157 141 7
30 117002 5680 962 15
8 1673 1712 190 22
64 8478 87 54 307
23 5477 117 92 12
50 7558 1396 187 17
279 88677 4522 514 14
0

Output for the Sample Input

28 20
7 13
15 33
NA
97 0
12 44
NA
NA

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
static class Program
{
    static void Main()
    {
        var p = new Problem();
        p.A();
    }
}

public class Problem
{
    public void A()
    {
        while (true)
        {
            var input = IO.IARead();
            if (input.Length == 1)
                break;

            var p = input[0];
            var b = input[1];
            var c = input[2];
            var d = input[3];
            var q = input[4];

            var a = b / c;
            if (a >= q)
                a = q;
            var b2 = b - a*c;
            var a2 = b2 / d;
            var p2 = a + a2;
            
            var flag = true;
            if (a == 0)
                flag = false;
            while (p > p2)
            {
                a--;
                if (a == 0)
                {
                    flag = false;
                    break;
                }
                b2 += c;
                a2 = b2 / d;
                p2 = a + a2;

            }
            if (flag)
                Console.WriteLine("{0} {1}", a, a2);
            else Console.WriteLine("NA");
        }

    }

}


static public class IO
{
    static public void SetIn()
    {
        var sr = new System.IO.StreamReader("sample.txt");
        Console.SetIn(sr);
    }

    static public int IRead()
    {
        return int.Parse(Console.ReadLine());
    }
    static public int[] IARead(char c = ' ')
    {
        return Console.ReadLine().Split(c).Select(x => int.Parse(x)).ToArray();
    }
    static public long LRead()
    {
        return long.Parse(Console.ReadLine());
    }
    static public long[] LARead(char c = ' ')
    {
        return Console.ReadLine().Split(c).Select(x => long.Parse(x)).ToArray();
    }
    static public double DRead()
    {
        return double.Parse(Console.ReadLine());
    }
    static public double[] DARead(char c = ' ')
    {
        return Console.ReadLine().Split(c).Select(x => double.Parse(x)).ToArray();
    }
}
static public class Rep
{
    static public void For(this int range, Action<int> action, int start = 0)
    {
        for (int i = start; i < range + start; i++)
        {
            action(i);
        }
    }

    static public void For(this int range, Func<int, bool> func, int start = 0)
    {
        for (int i = start; i < range + start; i++)
        {
            var b = func(i);
            if (!b)
                break;
        }
    }
    static public void ForEach<T>(this IEnumerable<T> source, Action<T> action)
    {
        foreach (var x in source)
        {
            action(x);
        }
    }
    static public void ForEach<T>(this IEnumerable<T> source, Func<T, bool> func)
    {
        foreach (var x in source)
        {
            var b = func(x);
            if (!b)
                break;
        }
    }
}
//*/