Пример #1
0
        public string SolveOneCase(InputParser input)
        {
            int    N = input.GetInt();
            double V = double.Parse(input.GetString());
            double X = double.Parse(input.GetString());

            double R0 = double.Parse(input.GetString());
            double C0 = double.Parse(input.GetString());

            if (N == 1)
            {
                if (C0 != X)
                {
                    return(IMPOSSIBLE);
                }
                else
                {
                    return((V / R0).ToString());
                }
            }



            double R1 = double.Parse(input.GetString());
            double C1 = double.Parse(input.GetString());

            if (C0 < X && C1 < X)
            {
                return(IMPOSSIBLE);
            }
            if (C0 > X && C1 > X)
            {
                return(IMPOSSIBLE);
            }

            if (X == C0 || X == C1)
            {
                double r = 0;
                if (X == C0)
                {
                    r += R0;
                }
                if (X == C1)
                {
                    r += R1;
                }

                return((V / r).ToString());
            }

            var v0 = V * (X - C1) / (C0 - C1);
            var v1 = V - v0;

            var t0 = v0 / R0;
            var t1 = v1 / R1;

            var res = Math.Max(t0, t1);

            return(res.ToString());
        }
Пример #2
0
        public string SolveOneCase(InputParser input)
        {
            int N = input.GetInt();

            E = new List <List <int> >();
            for (int i = 0; i < N + 1; i++)
            {
                E.Add(new List <int>());
            }

            for (int i = 0; i < N - 1; i++)
            {
                var a = input.GetInt();
                var b = input.GetInt();

                E[a].Add(b);
                E[b].Add(a);
            }

            int best = int.MaxValue;
            int node = -1;

            deletes = new List <Dictionary <int, int> >();
            trees   = new List <Dictionary <int, int> >();

            for (int i = 0; i < N + 1; i++)
            {
                deletes.Add(new Dictionary <int, int>());
                trees.Add(new Dictionary <int, int>());
            }

            for (int i = 1; i <= N; i++)
            {
                int b = tree(-1, i);

                if (b < best)
                {
                    best = b;
                    node = i;
                }
            }

            //Console.WriteLine(node);
            return(best.ToString());
        }
Пример #3
0
        public string SolveOneCase(InputParser input)
        {
            int N = input.GetInt();
            int L = input.GetInt();

            var        outlets = input.GetStringArray();
            List <int> outs    = new List <int>();

            var        devices = input.GetStringArray();
            List <int> devs    = new List <int>();

            for (int i = 0; i < N; i++)
            {
                outs.Add(Convert.ToInt32(outlets[i], 2));
                devs.Add(Convert.ToInt32(devices[i], 2));
            }

            int max = 2 << L + 1;

            int best = int.MaxValue;

            for (int i = 0; i <= max; i++)
            {
                int i1   = i;
                var copy = outs.Select(x => x ^ i1).ToList();

                var ex = copy.Except(devs);

                if (ex.Count() == 0)
                {
                    var b = count_bits(i);
                    if (b < best)
                    {
                        best = b;
                    }
                }
            }

            if (best == int.MaxValue)
            {
                return("NOT POSSIBLE");
            }
            return(best.ToString());
        }
Пример #4
0
        public static void Solve(IProblem problem, TextReader input, TextWriter output)
        {
            var parser = new InputParser(input);
            int T      = parser.GetInt();

            for (int i = 0; i < T; i++)
            {
                output.WriteLine(string.Format("Case #{0}: {1}", i + 1, problem.SolveOneCase(parser)));
            }
        }
Пример #5
0
        public string SolveOneCase(InputParser input)
        {
            N     = input.GetInt();
            count = 0;

            var cars = input.GetStringArray();

            Permute(new bool[N], new List <int>(), cars);


            return(count.ToString());
        }
Пример #6
0
        public string SolveOneCase(InputParser input)
        {
            checked
            {
                int  N = input.GetInt();
                long P = input.GetLong();

                long y = 0;

                int  x  = 0;
                long pa = P;

                while (pa > 1)
                {
                    x++;
                    pa = pa / 2;
                }

                long z = (1L << N) - (1L << (N - x));


                if (x == N)
                {
                    y = P - 1;
                }
                else
                {
                    long v = 1L << (N - 1);
                    long c = 2;
                    long t = v;
                    while (P > t)
                    {
                        y += c;
                        v  = v >> 1;
                        t += v;
                        c  = c << 1;
                    }
                }


                return(y + " " + z);
            }
        }
Пример #7
0
        public string SolveOneCase(InputParser input)
        {
            var word = input.GetString();
            int n    = input.GetInt();

            int count = 0;

            for (int i = 0; i < word.Length; i++)
            {
                for (int j = i + n - 1; j < word.Length; j++)
                {
                    int c   = 0;
                    var sub = word.Substring(i, j - i + 1);
                    for (int k = 0; k < sub.Length; k++)
                    {
                        if (IsConst(sub[k]))
                        {
                            c++;
                        }
                        else
                        {
                            c = 0;
                        }

                        if (c == n)
                        {
                            //Console.WriteLine(sub);

                            count++;
                            break;
                        }
                    }
                }
            }

            return(count.ToString());
        }
Пример #8
0
        public string SolveOneCase(InputParser input)
        {
            int N = input.GetInt();

            int[] d   = new int[N];
            int[] n   = new int[N];
            int[] w   = new int[N];
            int[] e   = new int[N];
            int[] S   = new int[N];
            int[] d_d = new int[N];
            int[] d_p = new int[N];
            int[] d_s = new int[N];

            int[] a = new int[N];

            for (int i = 0; i < N; i++)
            {
                d[i]   = input.GetInt();
                n[i]   = input.GetInt();
                w[i]   = input.GetInt();
                e[i]   = input.GetInt();
                S[i]   = input.GetInt();
                d_d[i] = input.GetInt();
                d_p[i] = input.GetInt();
                d_s[i] = input.GetInt();
            }

            var pq = new PriorityQueue <int>();

            for (int i = 0; i < N; i++)
            {
                pq.Enqueue(i, d[i]);
            }

            int[] wall = new int[20000];
            int   ADJ  = +10000;

            int count = 0;

            while (!pq.IsEmpty)
            {
                int dd = pq.GetNextPriority();

                var list = new List <int>();

                while (!pq.IsEmpty && pq.GetNextPriority() == dd)
                {
                    list.Add(pq.Dequeue());
                }

                for (int its = 0; its < 2; its++)
                {
                    for (int t = 0; t < list.Count; t++)
                    {
                        int i = list[t];



                        int ww = a[i] * d_p[i] + w[i];
                        int ee = a[i] * d_p[i] + e[i];
                        int ss = a[i] * d_s[i] + S[i];

                        for (int j = ww; j < ee; j++)
                        {
                            if (its == 0)
                            {
                                if (ss > wall[j + ADJ])
                                {
                                    count++;
                                    break;
                                }
                            }

                            if (its == 1)
                            {
                                wall[j + ADJ] = Math.Max(wall[j + ADJ], ss);
                            }
                        }

                        if (its == 1)
                        {
                            a[i]++;

                            if (a[i] < n[i])
                            {
                                pq.Enqueue(i, dd + d_d[i]);
                            }
                        }
                    }
                }
            }

            return(count.ToString());
        }
Пример #9
0
        public string SolveOneCase(InputParser input)
        {
            int C = input.GetInt();
            int D = input.GetInt();
            int V = input.GetInt();

            var Ds = input.GetIntArray();

            var hs = new HashSet <int>();

            hs.Add(0);

            for (int i = 0; i < D; i++)
            {
                var list = hs.ToList();

                var dd = Ds[i];
                for (int j = 0; j < list.Count; j++)
                {
                    int item = list[j] + dd;
                    if (item > V)
                    {
                        continue;
                    }
                    hs.Add(item);
                }
            }


            int count = 0;

            while (true)
            {
                var miss = new List <int>();

                for (int i = 0; i <= V; i++)
                {
                    if (!hs.Contains(i))
                    {
                        miss.Add(i);
                    }
                }

                if (miss.Count == 0)
                {
                    break;
                }
                miss.Sort();

                var list = hs.ToList();
                var dd   = miss[0];
                for (int j = 0; j < list.Count; j++)
                {
                    int item = list[j] + dd;
                    if (item > V)
                    {
                        continue;
                    }
                    hs.Add(item);
                }
                count++;
            }



            return(count.ToString());
        }
Пример #10
0
        public string SolveOneCase(InputParser input)
        {
            int K = input.GetInt();
            int L = input.GetInt();
            int S = input.GetInt();

            string alph = input.GetString();
            string word = input.GetString();

            // not in alphabet
            for (int i = 0; i < L; i++)
            {
                var c = word[i];
                if (!alph.Contains(c.ToString()))
                {
                    return("0.0");
                }
            }

            // all same
            bool same = true;
            var  a    = word[0];

            for (int i = 0; i < L; i++)
            {
                if (word[i] != a)
                {
                    same = false;
                }
            }
            for (int i = 0; i < K; i++)
            {
                if (alph[i] != a)
                {
                    same = false;
                }
            }

            if (same)
            {
                return("0.0");
            }

            int overlap = 0;

            for (int i = 1; i < L; i++)
            {
                var st = word.Substring(0, i);
                var e  = word.Substring(word.Length - i, i);

                if (st == e)
                {
                    overlap = i;
                }
            }

            int count = 0;
            int ii    = 0;

            while (true)
            {
                if (ii + L <= S)
                {
                    count++;
                    ii = ii + L - overlap;
                    continue;
                }
                break;
            }

            double p = 1;

            for (int i = 0; i < L; i++)
            {
                var    aa = word[i];
                double cc = alph.Count(x => x == aa);
                p *= cc / K;
            }

            var res = count - p * (S - L + 1);


            return(res.ToString());
        }
Пример #11
0
        public string SolveOneCase(InputParser input)
        {
            int X = input.GetInt();
            int Y = input.GetInt();


            int sum = Math.Abs(X) + Math.Abs(Y);

            int n    = 1;
            int nsum = 0;

            while (true)
            {
                nsum += n;

                if (nsum % 2 == sum % 2)
                {
                    if (nsum >= sum)
                    {
                        break;
                    }
                }

                n++;
            }

            StringBuilder sb = new StringBuilder();

            for (int i = n; i > 0; i--)
            {
                if (Math.Abs(X) >= Math.Abs(Y))
                {
                    if (X < 0)
                    {
                        sb.Append('W');
                        X += i;
                    }
                    else
                    {
                        sb.Append('E');
                        X -= i;
                    }
                }
                else
                {
                    if (Y < 0)
                    {
                        sb.Append('S');
                        Y += i;
                    }
                    else
                    {
                        sb.Append('N');
                        Y -= i;
                    }
                }

                //Console.WriteLine((String.Format("X={0} Y={1}", X, Y)));
            }

            if (X != 0 && Y != 0)
            {
                throw new Exception(String.Format("X={0} Y={1}", X, Y));
            }

            var s   = sb.ToString();
            var car = s.ToCharArray();

            Array.Reverse(car);

            return(new string(car));
        }