コード例 #1
0
        public void Simple()
        {
            var rnd = new Random(42);

            for (int c = 0; c < 100; c++)
            {
                for (int n = 1; n < 20; n++)
                {
                    for (int m = 1; m < 20; m++)
                    {
                        var a = new uint[n];
                        var b = new uint[m];

                        for (int i = 0; i < n; i++)
                        {
                            a[i] = rnd.NextUInt();
                        }
                        for (int i = 0; i < m; i++)
                        {
                            b[i] = rnd.NextUInt();
                        }
                        ConvolutionAnyMod.Convolution(a, b, 1000000000 + c).Should().Equal(ConvNative(a, b, 1000000000 + c));
                    }
                }
            }
        }
コード例 #2
0
 public void EmptyInt(int[] a, int[] b, uint[] expected)
 {
     for (int i = 2; i < 10; i++)
     {
         ConvolutionAnyMod.Convolution(a, b, i).Should().Equal(expected);
     }
 }
コード例 #3
0
        public override void Solve(ConsoleReader cr, ConsoleWriter cw)
        {
            int N = cr;
            int M = cr;

            uint[] arr = cr.Repeat(N);
            uint[] brr = cr.Repeat(M);
            cw.WriteLineJoin(ConvolutionAnyMod.Convolution(arr, brr, 1000000007));
        }
コード例 #4
0
        public void Mid()
        {
            var rnd = new Random(42);
            int n = 1234, m = 2345;
            var a = new uint[n];
            var b = new uint[m];

            for (int i = 0; i < n; i++)
            {
                a[i] = rnd.NextUInt();
            }
            for (int i = 0; i < m; i++)
            {
                b[i] = rnd.NextUInt();
            }
            ConvolutionAnyMod.Convolution <Mod998244353>(a, b).Should().Equal(ConvNative(a, b, 998244353));
            ConvolutionAnyMod.Convolution <Mod1000000000>(a, b).Should().Equal(ConvNative(a, b, 1000000000));
            ConvolutionAnyMod.Convolution <Mod1000000007>(a, b).Should().Equal(ConvNative(a, b, 1000000007));
        }
コード例 #5
0
        public void Large()
        {
            var rnd = new Random(42);
            int n = 123, m = 234;
            var a = new uint[n];
            var b = new uint[m];

            for (int i = 0; i < n; i++)
            {
                a[i] = rnd.NextUInt();
            }
            for (int i = 0; i < m; i++)
            {
                b[i] = rnd.NextUInt();
            }
            for (int i = 0; i < 50; i++)
            {
                ConvolutionAnyMod.Convolution(a, b, 1000000005 + i).Should().Equal(ConvNative(a, b, 1000000005 + i));
            }
        }