Example #1
0
        static void probCore(long T, Env env)
        {
            Console.WriteLine("start#{0}", T);
            int N;
            {
                string line = env.srd.ReadLine();
                string[] parts = line.Split(Env.delim, StringSplitOptions.None);
                N = Int32.Parse(parts[0]);
            }
            int[][] 継承 = new int[N][];
            for (int i = 0; i < N; i++)
            {
                string line = env.srd.ReadLine();
                string[] parts = line.Split(Env.delim, StringSplitOptions.None);
                int M = Int32.Parse(parts[0]);
                継承[i] = new int[M];
                for (int j = 0; j < M; j++)
                {
                    継承[i][j] = Int32.Parse(parts[j + 1]) - 1;
                }
            }
            for (int i = 0; i < N; i++)
            {
                bool[] flag = new bool[N];

                //自分の子孫を全探索する
                if (search(i, i, 継承, flag)) {
                    env.swr.WriteLine("Case #{0}: Yes", T);
                    return;
                }
            }
            env.swr.WriteLine("Case #{0}: No", T);
        }
Example #2
0
        static void Main(string[] args)
        {
            StreamReader srd = null;
            StreamWriter swr = null;
            Env env = new Env();

            try
            {
                srd = new StreamReader(
                    args[0], Encoding.GetEncoding("Shift_JIS"));
                env.srd = srd;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            try
            {
                swr = new StreamWriter(
                    args[1], false, Encoding.GetEncoding("Shift_JIS"));
                env.swr = swr;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            probLoop(env);

            swr.Close();
        }
Example #3
0
        static void probCore(long T, Env env)
        {
            string line = env.sr.ReadLine();
            string[] parts = line.Split(Env.delim, StringSplitOptions.None);
            int L = Int32.Parse(parts[0]);
            int M = Int32.Parse(parts[1]);
            int maxK = 0;
            for (int i = 0; i < M; i++)
            {
                int K = Int32.Parse(parts[2+i]);
                if (K > maxK)
                {
                    maxK = K;
                }
            }

            int ans;
            if (L < maxK)
            {
                ans = -1;
            }
            // else if (0 == maxK)
            // {
            //     ans = 0;
            // }
            else
            {
                ans = L * (M - 1) + maxK;
            }
            env.sw.WriteLine("Case #{0}: {1}", T, ans);
            //env.sw.WriteLine("Case #{0}: {1}", t, ans);
            ////Console.WriteLine("ans:{0}", ans);
        }
Example #4
0
 static void probLoop(Env env)
 {
     string line = env.srd.ReadLine();
     Stopwatch sw = new Stopwatch();
     sw.Start();
     long t = Int64.Parse(line);
     for (long i = 1; i <= t; i++)
     {
         probCore(i, env);
     }
     sw.Stop();
     long millisec = sw.ElapsedMilliseconds;
     Console.WriteLine("used:{0}[ms]", millisec);
 }
Example #5
0
        //static int hikaku(
        //  KeyValuePair<string, int> kvp1,
        //  KeyValuePair<string, int> kvp2)
        //{
        //    return kvp1.Key.CompareTo(kvp2.Key);
        //}
        static void probCore(long T, Env env)
        {
            string line = env.srd.ReadLine();
            string[] parts = line.Split(Env.delim, StringSplitOptions.None);
            int A = Int32.Parse(parts[0]);
            int B = Int32.Parse(parts[1]);

            line = env.srd.ReadLine();
            parts = line.Split(Env.delim, StringSplitOptions.None);

            double[] q = new double[A];
            for (int i = 0; i < A; i++)
            {
                double[] p = new double[A];
                {
                    p[i] = Double.Parse(parts[i]);
                    if (i == 0)
                    {
                        q[i] = p[0];
                    }
                    else
                    {
                        q[i] = q[i - 1] * p[i];
                    }
                }
            }
            //戦略
            //スルーするX
            //  success (B-A)+1
            //  fail    (B-A)+1 + B+1
            //戻るY
            //  success (A-i)*2 + (B-A)+1
            //  fail    (A-i)*2 + (B-A)+1 + B+1
            //捨てるZ
            //  success B+2

            int x_success = (B - A + 1);
            int x_fail    = (B - A + 1) + B + 1;
            double xExp = q[A - 1] * x_success + (1 - q[A - 1]) * x_fail;
            Console.WriteLine("{0} x:{1} (s:{2} f:{3} p[a-1]:{4})", T, xExp, x_success, x_fail, q[A - 1]);
            double yExp = 1000 * 1000; // 十分に大きい数
            for (int i = 1; i < A; i++)
            {
                int y_success = (A - i) * 2 + (B - A) + 1;
                int y_fail    = (A - i) * 2 + (B - A) + 1 + B + 1;
                double y_exp = q[i - 1] * y_success + (1 - q[i - 1]) * y_fail;
                if (y_exp < yExp)
                {
                    yExp = y_exp;
                }
            }
            double zExp = B + 2;
            Console.WriteLine("{0} y:{1}", T, yExp);
            Console.WriteLine("{0} z:{1}", T, zExp);
            double xyExp = xExp < yExp ? xExp : yExp;

            double xyzExp = xyExp < zExp ? xyExp : zExp;

            //for (int i = 0; i < A; i++)
            //{
            //    p[i] = Double.Parse(parts[i]);
            //}

            //    string S = parts[1];
            //    int N = S.Length;

            //    List<uint> list = new List<uint>();
            //    list.Sort();
            //    bool flag = false;
            //    uint lastPrint = 0;
            env.swr.WriteLine("Case #{0}: {1}", T, xyzExp);
            //    for (int i = 1; i < (list.Count); i++)
            //    {
            //        if ((lastPrint != list[i])
            //            && (list[i - 1] == list[i]))
            //        {
            //            flag = true;
            //            lastPrint = list[i];
            //            env.swr.Write(" {0}", lastPrint);
            //        }
            //    }
            //    if (!flag)
            //    {
            //        env.swr.Write(" NONE", T);
            //    }
                //env.swr.WriteLine();
        }
Example #6
0
 static void probLoop(Env env)
 {
     string line = env.sr.ReadLine();
     long t = Int64.Parse(line);
     for (long i = 1; i <= t; i++)
     {
         //Console.WriteLine("case{0}", i);
         probCore(i, env);
     }
 }
Example #7
0
        static void probCore(long T, Env env)
        {
            Console.WriteLine("start#{0}", T);
            string line = env.srd.ReadLine();
            string[] parts = line.Split(Env.delim, StringSplitOptions.None);
            int N = Int32.Parse(parts[0]);
            int[] s = new int[N];
            int sum = 0;
            for (int i = 0; i < N; i++)
            {
                s[i] = Int32.Parse(parts[i+1]);
                sum = sum + s[i];
            }
            int 審査員持ち点 = (sum * 1);
            //double 合格に必要な点 = Math.Ceiling((sum * 2.0) / N);
            double 合格に必要な点 = 1;

            {
                int 審査員持ち点の残り = 審査員持ち点;
                合格に必要な点 = 0;
                while (true)
                {
                    int 合格に必要な点2 = (int)合格に必要な点 + 1;
                    int 合格に必要な点2に満たない人数 = 0;
                    foreach (int a in s)
                    {
                        if (a < 合格に必要な点2)
                        {
                            合格に必要な点2に満たない人数++;
                        }
                    }
                    if (T == 13)
                    {
                        Console.WriteLine("合格に必要な点{0}", 合格に必要な点);
                        Console.WriteLine("合格に必要な点2{0}", 合格に必要な点2);
                        Console.WriteLine("合格に必要な点2に満たない人数{0}", 合格に必要な点2に満たない人数);
                        Console.WriteLine("審査員持ち点の残り{0}", 審査員持ち点の残り);
                        Console.WriteLine();
                    }
                    if (審査員持ち点の残り <= 合格に必要な点2に満たない人数)
                    {
                        合格に必要な点 = 合格に必要な点 + 審査員持ち点の残り * 1.0 / 合格に必要な点2に満たない人数;
                        break;
                    }
                    else
                    {
                        審査員持ち点の残り = 審査員持ち点の残り - 合格に必要な点2に満たない人数;
                    }
                    合格に必要な点 = 合格に必要な点2;
                }
                Console.WriteLine("合格に必要な点{0} N{1}",
                    合格に必要な点,
                    N
                );
            }

            double[] 審査員から貰うべき点 = new double[N];
            for (int i = 0; i < N; i++)
            {
                審査員から貰うべき点[i] = 合格に必要な点 - s[i];
                if (審査員から貰うべき点[i] < 0.0) {
            //                    Console.WriteLine("T{0} 例外発生 i{1}, {2},{3},si{4}",
            //                        T,
            //                        i,
            //                        審査員から貰うべき点,
            //                        合格に必要な点,
            //                        s[i]
            //                    );
                    //審査員持ち点 = 審査員持ち点 - 審査員から貰うべき点[i];
                    審査員から貰うべき点[i] = 0;
                }
            }

            env.swr.Write("Case #{0}:", T);
            double 審査員から貰うべき得票率の合計 = 0;
            for (int i = 0; i < N; i++)
            {
                double 審査員から貰うべき得票率 = 審査員から貰うべき点[i] * 1.0 / 審査員持ち点;
                審査員から貰うべき得票率の合計 = 審査員から貰うべき得票率の合計 + 審査員から貰うべき得票率;
                env.swr.Write(" {0}", 審査員から貰うべき得票率 * 100.0);
            }
            env.swr.WriteLine();
            Console.WriteLine("T{0} {1}",
                T,
                審査員から貰うべき得票率の合計
            );

            //                  double[] p = new double[A];
            //                  {
            //                      if (i == 0)
            //                      {
            //                          q[i] = p[0];
            //                      }
            //                      else
            //                      {
            //                          q[i] = q[i - 1] * p[i];
            //                      }
            //                  }
            //              }
            //              //戦略
            //              //スルーするX
            //              //  success (B-A)+1
            //              //  fail    (B-A)+1 + B+1
            //              //戻るY
            //              //  success (A-i)*2 + (B-A)+1
            //              //  fail    (A-i)*2 + (B-A)+1 + B+1
            //              //捨てるZ
            //              //  success B+2
            //
            //              int x_success = (B - A + 1);
            //              int x_fail    = (B - A + 1) + B + 1;
            //              double xExp = q[A - 1] * x_success + (1 - q[A - 1]) * x_fail;
            //              Console.WriteLine("{0} x:{1} (s:{2} f:{3} p[a-1]:{4})", T, xExp, x_success, x_fail, q[A - 1]);
            //              double yExp = 1000 * 1000; // 十分に大きい数
            //              for (int i = 1; i < A; i++)
            //              {
            //                  int y_success = (A - i) * 2 + (B - A) + 1;
            //                  int y_fail    = (A - i) * 2 + (B - A) + 1 + B + 1;
            //                  double y_exp = q[i - 1] * y_success + (1 - q[i - 1]) * y_fail;
            //                  if (y_exp < yExp)
            //                  {
            //                      yExp = y_exp;
            //                  }
            //              }
            //              double zExp = B + 2;
            //              Console.WriteLine("{0} y:{1}", T, yExp);
            //              Console.WriteLine("{0} z:{1}", T, zExp);
            //              double xyExp = xExp < yExp ? xExp : yExp;
            //
            //              double xyzExp = xyExp < zExp ? xyExp : zExp;
            //
            //              //for (int i = 0; i < A; i++)
            //              //{
            //              //    p[i] = Double.Parse(parts[i]);
            //              //}
            //
            //
            //
            //
            //              //    string S = parts[1];
            //          //    int N = S.Length;
            //
            //          //    List<uint> list = new List<uint>();
            //          //    list.Sort();
            //          //    bool flag = false;
            //          //    uint lastPrint = 0;
            //          //    for (int i = 1; i < (list.Count); i++)
            //          //    {
            //          //        if ((lastPrint != list[i])
            //          //            && (list[i - 1] == list[i]))
            //          //        {
            //          //            flag = true;
            //          //            lastPrint = list[i];
            //          //            env.swr.Write(" {0}", lastPrint);
            //          //        }
            //          //    }
            //          //    if (!flag)
            //          //    {
            //          //        env.swr.Write(" NONE", T);
            //          //    }
            //                  //env.swr.WriteLine();
        }