コード例 #1
0
ファイル: KeysInBoxes.cs プロジェクト: chokudai/TopCoder
 public string getAllKeys(int N, int M)
 {
     fraction[,] dp = new fraction[N + 2, M + 2];
     int i, j;
     for (i = 0; i <= N + 1; i++)
     {
         for (j = 0; j <= M + 1; j++)
         {
             dp[i, j] = new fraction(1, 0);
         }
     }
     dp[0, 0] = new fraction(1, 1);
     for (i = 0; i < N; i++)
     {
         for (j = 0; j <= M; j++)
         {
             fraction ng = new fraction(N - i, 1);
             fraction ok = new fraction(N - i, N - i - 1);
             dp[i + 1, j] = dp[i + 1, j].add(dp[i, j].mul(ok));
             dp[i + 1, j + 1] = dp[i + 1, j + 1].add(dp[i, j].mul(ng));
             //Console.WriteLine(i + " " + j + " " + dp[i, j].bunsi + "/" + dp[i, j].bunbo);
         }
     }
     fraction ret = new fraction(1, 0);
     for (j = 0; j <= M; j++) ret = ret.add(dp[N, j]);
     string res = ret.bunsi + "/" + ret.bunbo;
     return res;
 }
コード例 #2
0
        private static void Fill_key_ALGEBRA_HARD_FRAC()
        {
            List <int> numerators = new List <int>()
            {
                1, 2, 3, 4, 5, 6, 7, 8, 9
            };
            List <int> denominators = new List <int>()
            {
                2, 3, 4, 5, 6, 7, 8, 9
            };
            List <fraction> fractions = new List <fraction>();


            switch (workspace.op.active_fractions_mode)
            {
            case Workspace.options.fractions.EQUAL_NUM:
            {
                int keys        = workspace.keys.Count;
                int denominator = 1;
                int numerator   = rand.Next(1, 6);
                int counter     = 0;
                while (denominator < 9)
                {
                    denominator = numerator + counter;
                    fraction fr = new fraction()
                    {
                        numerator = numerator, denominator = denominator
                    };
                    fractions.Add(fr);
                    counter++;
                    keys--;
                }

                for (int i = 0; i < workspace.keys.Count; i++)
                {
                    fraction current_fraction = Get_AND_Remove_Random_Element <fraction>(fractions);
                    workspace.keys[i].str  = "Equal to ";
                    workspace.keys[i].str += current_fraction.numerator.ToString();
                    workspace.keys[i].str += "/";
                    workspace.keys[i].str += current_fraction.denominator.ToString();

                    if (numerators.Count == 0 || fractions.Count == 0)
                    {
                        break;
                    }
                }
                break;
            }

            case Workspace.options.fractions.EQUAL_DEN:
            {
                int keys        = workspace.keys.Count;
                int denominator = rand.Next(workspace.keys.Count, workspace.keys.Count + 5);
                int numerator   = 1;
                int counter     = denominator - 1;
                while (numerator < denominator)
                {
                    numerator = denominator - counter;
                    fraction fr = new fraction()
                    {
                        numerator = numerator, denominator = denominator
                    };
                    fractions.Add(fr);
                    counter--;
                    keys--;
                }

                for (int i = 0; i < workspace.keys.Count; i++)
                {
                    fraction current_fraction = Get_AND_Remove_Random_Element <fraction>(fractions);
                    workspace.keys[i].str  = "Equal to ";
                    workspace.keys[i].str += current_fraction.numerator.ToString();
                    workspace.keys[i].str += "/";
                    workspace.keys[i].str += current_fraction.denominator.ToString();

                    if (numerators.Count == 0 || fractions.Count == 0)
                    {
                        break;
                    }
                }
                break;
            }
            }
        }
コード例 #3
0
ファイル: KeysInBoxes.cs プロジェクト: chokudai/TopCoder
 public fraction add(fraction a)
 {
     long waru = gcd(this.bunbo, a.bunbo);
     a.bunbo /= waru;
     this.bunbo /= waru;
     long nextbunbo = a.bunbo * this.bunbo * waru;
     long nextbunsi = a.bunbo * this.bunsi + this.bunbo * a.bunsi;
     return new fraction(nextbunbo, nextbunsi);
 }
コード例 #4
0
ファイル: KeysInBoxes.cs プロジェクト: chokudai/TopCoder
 public fraction mul(fraction a)
 {
     long nextbunbo = a.bunbo / gcd(a.bunbo, this.bunsi) * this.bunbo / gcd(this.bunbo, a.bunsi);
     long nextbunsi = this.bunsi / gcd(a.bunbo, this.bunsi) * a.bunsi / gcd(this.bunbo, a.bunsi);
     return new fraction(nextbunbo, nextbunsi);
 }
コード例 #5
0
ファイル: liveObjectStats.cs プロジェクト: Raurck/VI
 public void Assign(liveObjectStats inObj)
 {
     _liveCountMax = inObj.liveCountMax;
     _liveCount = inObj.liveCount;
     _stepCountMax = inObj.stepCountMax;
     _stepCount = inObj.stepCount;
     charFraction = inObj.charFraction;
     _turnInitiative = inObj.turnInitiative;
     _isInitiativeBuffed = inObj.isInitiativeBuffed;
     initiativeElector = inObj.initiativeElector;
 }