Submission #28569936


Source Code Expand

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Common;
using System.IO;
using System.Linq;
using System.Numerics;

namespace Tasks
{
    public class F
    {
        public static void Main(string[] args)
        {
            var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
            Console.SetOut(sw);
            Solve();
            Console.Out.Flush();
        }

        public static void Solve()
        {
            const long Mod = 998244353;
            var V = Console.ReadLine().Trim();
            var N = V.Length;
            var M = Scanner.Scan<int>();
            var C = Console.ReadLine().Trim().Split(' ');

            var ok = 0;
            foreach (var c in C)
            {
                ok |= 1 << int.Parse(c);
            }

            var max = 1 << 10;
            var count = new long[2][] { new long[max], new long[max] };
            var sum = new long[2][] { new long[max], new long[max] };
            long curr = 0;
            var digit = 0;

            var t = 1;
            for (var i = 0; i < N; i++)
            {
                t ^= 1;
                var tt = t ^ 1;
                var c = V[i] - '0';
                Array.Fill(count[tt], 0);
                Array.Fill(sum[tt], 0);
                for (var j = 0; j < max; j++)
                {
                    for (var d = 0; d < 10; d++)
                    {
                        var next = j | (1 << d);
                        count[tt][next] += count[t][j];
                        count[tt][next] %= Mod;
                        sum[tt][next] += sum[t][j] * 10 + count[t][j] * d;
                        sum[tt][next] %= Mod;
                    }
                }

                if (i > 0)
                {
                    for (var d = 1; d < 10; d++)
                    {
                        var next = 1 << d;
                        count[tt][next]++;
                        count[tt][next] %= Mod;
                        sum[tt][next] += d;
                        sum[tt][next] %= Mod;
                    }
                }

                for (var d = 0; d < c; d++)
                {
                    if (i == 0 && d == 0) continue;
                    var next = digit | (1 << d);
                    count[tt][next]++;
                    count[tt][next] %= Mod;
                    sum[tt][next] += curr * 10 + d;
                    sum[tt][next] %= Mod;
                }

                digit |= 1 << c;
                curr = (curr * 10 + c) % Mod;
            }

            t ^= 1;
            var answer = 0L;
            for (var j = 0; j < max; j++)
            {
                if ((j & ok) == ok)
                {
                    answer += sum[t][j];
                    answer %= Mod;
                }
            }

            if ((digit & ok) == ok)
            {
                answer += curr;
                answer %= Mod;
            }

            Console.WriteLine(answer);
        }

        public static class Scanner
        {
            public static T Scan<T>() where T : IConvertible => Convert<T>(ScanLine()[0]);
            public static (T1, T2) Scan<T1, T2>() where T1 : IConvertible where T2 : IConvertible
            {
                var line = ScanLine();
                return (Convert<T1>(line[0]), Convert<T2>(line[1]));
            }
            public static (T1, T2, T3) Scan<T1, T2, T3>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible
            {
                var line = ScanLine();
                return (Convert<T1>(line[0]), Convert<T2>(line[1]), Convert<T3>(line[2]));
            }
            public static (T1, T2, T3, T4) Scan<T1, T2, T3, T4>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible
            {
                var line = ScanLine();
                return (Convert<T1>(line[0]), Convert<T2>(line[1]), Convert<T3>(line[2]), Convert<T4>(line[3]));
            }
            public static (T1, T2, T3, T4, T5) Scan<T1, T2, T3, T4, T5>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible
            {
                var line = ScanLine();
                return (Convert<T1>(line[0]), Convert<T2>(line[1]), Convert<T3>(line[2]), Convert<T4>(line[3]), Convert<T5>(line[4]));
            }
            public static (T1, T2, T3, T4, T5, T6) Scan<T1, T2, T3, T4, T5, T6>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible where T6 : IConvertible
            {
                var line = ScanLine();
                return (Convert<T1>(line[0]), Convert<T2>(line[1]), Convert<T3>(line[2]), Convert<T4>(line[3]), Convert<T5>(line[4]), Convert<T6>(line[5]));
            }
            public static IEnumerable<T> ScanEnumerable<T>() where T : IConvertible => ScanLine().Select(Convert<T>);
            private static T Convert<T>(string value) where T : IConvertible => (T)System.Convert.ChangeType(value, typeof(T));
            private static string[] ScanLine() => Console.ReadLine()?.Trim().Split(' ') ?? Array.Empty<string>();
        }
    }
}

Submission Info

Submission Time
Task F - Variety of Digits
User AconCavy
Language C# (.NET Core 3.1.201)
Score 500
Code Size 5411 Byte
Status AC
Exec Time 671 ms
Memory 27600 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 3
AC × 34
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt, random_30.txt, random_31.txt, sample_01.txt, sample_02.txt, sample_03.txt
Case Name Status Exec Time Memory
random_01.txt AC 99 ms 27232 KiB
random_02.txt AC 81 ms 27556 KiB
random_03.txt AC 77 ms 27248 KiB
random_04.txt AC 77 ms 27172 KiB
random_05.txt AC 85 ms 27208 KiB
random_06.txt AC 85 ms 27084 KiB
random_07.txt AC 81 ms 27316 KiB
random_08.txt AC 455 ms 27312 KiB
random_09.txt AC 102 ms 27600 KiB
random_10.txt AC 484 ms 27352 KiB
random_11.txt AC 627 ms 27320 KiB
random_12.txt AC 565 ms 27356 KiB
random_13.txt AC 634 ms 27280 KiB
random_14.txt AC 600 ms 27340 KiB
random_15.txt AC 530 ms 27204 KiB
random_16.txt AC 415 ms 27492 KiB
random_17.txt AC 240 ms 27412 KiB
random_18.txt AC 157 ms 27272 KiB
random_19.txt AC 101 ms 27280 KiB
random_20.txt AC 364 ms 27216 KiB
random_21.txt AC 307 ms 27412 KiB
random_22.txt AC 527 ms 27496 KiB
random_23.txt AC 614 ms 27304 KiB
random_24.txt AC 601 ms 27380 KiB
random_25.txt AC 449 ms 27216 KiB
random_26.txt AC 136 ms 27080 KiB
random_27.txt AC 522 ms 27264 KiB
random_28.txt AC 671 ms 27376 KiB
random_29.txt AC 87 ms 27168 KiB
random_30.txt AC 655 ms 27128 KiB
random_31.txt AC 82 ms 27468 KiB
sample_01.txt AC 85 ms 27404 KiB
sample_02.txt AC 73 ms 27204 KiB
sample_03.txt AC 101 ms 27600 KiB