Ejemplo n.º 1
0
Archivo: Q1.cs Proyecto: Tilps/Stash
 private static void IncrementByRepresentative(Dictionary<int, int> counter1, DisjointTracker<int> tracker1, int p)
 {
     int rep = tracker1.GetRepresentative(p);
     if (counter1.ContainsKey(rep))
     {
         counter1[rep] = counter1[rep] + 1;
     }
     else
     {
         counter1[rep] = 1;
     }
 }
Ejemplo n.º 2
0
        private static void IncrementByRepresentative(Dictionary <int, int> counter1, DisjointTracker <int> tracker1, int p)
        {
            int rep = tracker1.GetRepresentative(p);

            if (counter1.ContainsKey(rep))
            {
                counter1[rep] = counter1[rep] + 1;
            }
            else
            {
                counter1[rep] = 1;
            }
        }
Ejemplo n.º 3
0
        private static string Solve(int r, int[] x1, int[] x2, int[] y1, int[] y2)
        {
            DisjointTracker <int> sets = new DisjointTracker <int>();

            for (int i = 0; i < r; i++)
            {
                sets.Add(i);
            }
            for (int i = 0; i < r; i++)
            {
                for (int j = i + 1; j < r; j++)
                {
                    if (x1[i] > x2[j] + 1 || x2[i] < x1[j] - 1 || y1[i] > y2[j] + 1 || y2[i] < y1[j] - 1)
                    {
                        continue;
                    }
                    if (x1[i] == x2[j] + 1 && y1[i] == y2[j] + 1)
                    {
                        continue;
                    }
                    if (x1[j] == x2[i] + 1 && y1[j] == y2[i] + 1)
                    {
                        continue;
                    }
                    sets.Union(i, j);
                }
            }
            Dictionary <int, List <int> > setLookup = new Dictionary <int, List <int> >();

            for (int i = 0; i < r; i++)
            {
                int        rep = sets.GetRepresentative(i);
                List <int> vals;
                if (setLookup.TryGetValue(rep, out vals))
                {
                    vals.Add(i);
                }
                else
                {
                    vals = new List <int>();
                    vals.Add(i);
                    setLookup[rep] = vals;
                }
            }
            int max = 0;

            foreach (List <int> set in setLookup.Values)
            {
                int maxx2 = int.MinValue;
                int maxy2 = int.MinValue;
                for (int i = 0; i < set.Count; i++)
                {
                    if (x2[set[i]] > maxx2)
                    {
                        maxx2 = x2[set[i]];
                    }
                    if (y2[set[i]] > maxy2)
                    {
                        maxy2 = y2[set[i]];
                    }
                }
                int selectedx1 = x1[set[0]];
                int selectedy1 = y1[set[0]];
                for (int i = 1; i < set.Count; i++)
                {
                    if (y1[set[i]] - selectedy1 < -1 * (x1[set[i]] - selectedx1))
                    {
                        selectedy1 = y1[set[i]];
                        selectedx1 = x1[set[i]];
                    }
                }

                int thisTotal = maxx2 - selectedx1 + maxy2 - selectedy1 + 1;
                if (thisTotal > max)
                {
                    max = thisTotal;
                }
            }

            return(max.ToString());
        }