Beispiel #1
0
        public static long Solve(Solut sol, long k)
        {
            var palTree    = sol.PalTree;
            var str        = sol.Str;
            var suffRevAdj = sol.SuffRevAdj;
            var sums       = sol.Sums;
            var hashes     = sol.Hashes;

            var node = 2;
            var sum  = 0L;

            while (true)
            {
                var found = false;

                var adj = suffRevAdj[node];
                if (adj.Count > 1 && !sol.IsSuffRevAdjSorted[node])
                {
                    adj.Sort((v1, v2) => CompareNodes(node, v1, v2, palTree, str));
                    sol.IsSuffRevAdjSorted[node] = true;
                }

                foreach (var next in suffRevAdj[node])
                {
                    var nextVal = palTree.tree[next].num;
                    var nextSum = sums[next];

                    if (sum + nextVal >= k)
                    {
                        return(hashes[next]);
                    }

                    if (sum + nextSum >= k)
                    {
                        sum  += nextVal;
                        node  = next;
                        found = true;
                        break;
                    }

                    sum += nextSum;
                }
                if (!found)
                {
                    return(-1);
                }
            }
        }
Beispiel #2
0
    /// <summary>
    /// Luo jokaiselle solut taulukon paikalle oman Solut-objektin ja lisää niiden Ruudut kentälle
    /// </summary>
    public void LuoSoluTaulukko(int soluKoko)
    {
        solut = new Solut[sarakkeet, rivit];
        for (int i = 0; i < sarakkeet; i++)
        {
            for (int j = 0; j < rivit; j++)
            {
                solut[i, j] = new Solut(false, false, false, false)
                {
                    Ruutu = new GameObject(soluKoko, soluKoko, Shape.Rectangle)
                    {
                        X     = Level.Left + (i * soluKoko) + soluKoko / 2,
                        Y     = Level.Top - (j * soluKoko) - soluKoko / 2 - 50,
                        Image = alkuBoxi
                    },
                };

                Add(solut[i, j].Ruutu);
            }
        }
    }