Exemple #1
0
        public object D()
        {
            bool IsMatch(string T, string S)
            {
                for (int i = 0; i < S.Length - T.Length + 1; i++)
                {
                    var ok = true;
                    for (int j = 0; j < T.Length; j++)
                    {
                        if (S[i + j] != T[j] && T[j] != '.')
                        {
                            ok = false;
                        }
                    }
                    if (ok)
                    {
                        return(true);
                    }
                }
                return(false);
            }

            var S = cin.Next();
            var C = "abcdefghijklmnopqrstuvwxyz.";
            var M = new List <string>();

            foreach (var item in C)
            {
                if (IsMatch(item.ToString(), S))
                {
                    M.Add(item.ToString());
                }
            }
            foreach (var c1 in C)
            {
                foreach (var c2 in C)
                {
                    var T = c1.ToString() + c2.ToString();
                    if (IsMatch(T, S))
                    {
                        M.Add(T);
                    }
                }
            }
            foreach (var c1 in C)
            {
                foreach (var c2 in C)
                {
                    foreach (var c3 in C)
                    {
                        var T = c1.ToString() + c2.ToString() + c3.ToString();
                        if (IsMatch(T, S))
                        {
                            M.Add(T);
                        }
                    }
                }
            }
            return(M.Count());
        }
Exemple #2
0
        static void Main()
        {
            using var cin = new Scanner();
            int    n = cin.Int();
            string s = cin.Next();

            int ans = 0;

            for (int i = 0; i < n; i++)
            {
                string ss  = s[i..n];
Exemple #3
0
        static void Main()
        {
            var          sc      = new Scanner();
            var          S       = sc.Next();
            var          N       = S.Length;
            const double mod     = 1e9 + 7;
            var          indexes = Enumerable.Range(0, 8).Select(_ => new List <int>()).ToArray();
            var          counts  = new double[8];

            for (int i = N - 1; i >= 0; i--)
            {
                var item = S[i];

                switch (item)
                {
                case 'i':
                    counts[7] += 1;
                    break;

                case 'a':
                    counts[6] = (counts[6] + counts[7]) % mod;
                    break;

                case 'd':
                    counts[5] = (counts[5] + counts[6]) % mod;
                    break;

                case 'u':
                    counts[4] = (counts[4] + counts[5]) % mod;
                    break;

                case 'k':
                    counts[3] = (counts[3] + counts[4]) % mod;
                    break;

                case 'o':
                    counts[2] = (counts[2] + counts[3]) % mod;
                    break;

                case 'h':
                    counts[1] = (counts[1] + counts[2]) % mod;
                    break;

                case 'c':
                    counts[0] = (counts[0] + counts[1]) % mod;
                    break;
                }
            }
            Console.WriteLine(counts[0]);
        }
Exemple #4
0
        static void Main()
        {
            using var cin = new Scanner();
            var(n, m)     = cin.Int2();
            var s = new string[n];

            for (int i = 0; i < n; i++)
            {
                s[i] = cin.Next();
            }

            int num  = n * m + 2;
            int si   = n * m;
            int ti   = n * m + 1;
            var flow = new MFGraph <long, CapLong>(num);

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (s[i][j] == '#')
                    {
                        continue;
                    }

                    int k = i * m + j;
                    if ((i + j) % 2 == 0)
                    {
                        flow.AddEdge(si, k, 1);
                        Helper.DoAt4(i, j, n, m, (ii, jj) => {
                            if (s[ii][jj] == '.')
                            {
                                int kk = ii * m + jj;
                                flow.AddEdge(k, kk, 1);
                            }
                        });
                    }
                    else
                    {
                        flow.AddEdge(k, ti, 1);
                    }
                }
            }

            long maxFlow = flow.Flow(si, ti);

            Console.WriteLine(maxFlow);

            var ans = new char[n][];

            for (int i = 0; i < n; i++)
            {
                ans[i] = new char[m];
            }

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    ans[i][j] = s[i][j];
                }
            }

            var edges = flow.Edges();

            foreach (var e in edges)
            {
                if (e.From == si || e.To == ti || e.Flow == 0)
                {
                    continue;
                }

                int i0 = e.From / m;
                int j0 = e.From % m;
                int i1 = e.To / m;
                int j1 = e.To % m;

                if (i0 == i1 + 1)
                {
                    ans[i1][j1] = 'v';
                    ans[i0][j0] = '^';
                }
                else if (j0 == j1 + 1)
                {
                    ans[i1][j1] = '>';
                    ans[i0][j0] = '<';
                }
                else if (i0 == i1 - 1)
                {
                    ans[i0][j0] = 'v';
                    ans[i1][j1] = '^';
                }
                else
                {
                    ans[i0][j0] = '>';
                    ans[i1][j1] = '<';
                }
            }

            for (int i = 0; i < n; i++)
            {
                Console.WriteLine(new string(ans[i]));
            }
        }