Пример #1
0
    static object Solve()
    {
        var n = int.Parse(Console.ReadLine());
        var a = Read();
        var b = Read();

        var dp = NewArray2 <long>(n + 1, 3000 + 1);

        dp[0][0] = 1;

        for (int i = 1; i <= n; i++)
        {
            var av = a[i - 1];
            var bv = b[i - 1];

            var rsq = new StaticRSQ1(dp[i - 1]);

            for (int j = av; j <= bv; j++)
            {
                dp[i][j] = rsq.GetSum(0, j + 1) % M;
            }
        }

        return(dp[n].Sum() % M);
    }
Пример #2
0
    static object Solve()
    {
        var s = Console.ReadLine().Select(c => (long)(c - '0')).ToArray();
        var t = Console.ReadLine().Select(c => (long)(c - '0')).ToArray();

        var n = s.Length;
        var m = t.Length;

        var rsq  = new StaticRSQ1(s);
        var tSum = t.Sum();

        var tr   = t.Reverse().ToArray();
        var conv = FFT.Convolution(s, tr);

        return(Enumerable.Range(0, n - m + 1).Min(XorSum));

        long XorSum(int j)
        {
            var r = tSum;

            r += rsq.GetSum(j, j + m);
            r -= 2 * conv[j + m - 1];
            return(r);
        }
    }
Пример #3
0
    static object Solve()
    {
        var n = int.Parse(Console.ReadLine());
        var a = ReadL();
        var b = ReadL();

        var ab  = a.Zip(b, (x, y) => x + y).ToArray();
        var rsq = new StaticRSQ1(ab);

        var c = new long[2 * n];
        var t = 0L;

        for (int i = 1; i <= n; i++)
        {
            t   += rsq.GetSum(0, i);
            c[i] = t;
        }

        for (int i = 1; i < n; i++)
        {
            t       -= n * ab[i - 1];
            t       += rsq.GetSum(i, n);
            c[n + i] = t;
        }

        return(string.Join(" ", c));
    }
Пример #4
0
    static object Solve()
    {
        var(n, k) = Read2();
        var a = ReadL();

        var rsq = new StaticRSQ1(a);

        return(string.Join("\n", Enumerable.Range(0, n - k + 1).Select(x => rsq.GetSum(x, x + k))));
    }
Пример #5
0
    static object Solve()
    {
        var n  = int.Parse(Console.ReadLine());
        var ps = Array.ConvertAll(new bool[n], _ => Read2());

        var ts  = Array.ConvertAll(ps, p => (double)p.a / p.b);
        var rsq = new StaticRSQ1(ts);
        var t2  = ts.Sum() / 2;

        var si = First(0, n + 1, x => rsq.GetSum(0, x) >= t2);
        var dt = rsq.GetSum(0, si) - t2;

        return(Enumerable.Range(0, si).Sum(i => ps[i].a) - ps[si - 1].b * dt);
    }
Пример #6
0
    static object Solve()
    {
        var n = int.Parse(Console.ReadLine());
        var a = ReadL();
        var x = long.Parse(Console.ReadLine());

        var rsq = new StaticRSQ1(a);

        return(First(0, 1L << 60, k =>
                {
                BigInteger q = Math.DivRem(k, n, out var r);
                return rsq.GetSum(0, n) * q + rsq.GetSum(0, (int)r) > x;
            }));
    }
Пример #7
0
    static void Main()
    {
        var n  = int.Parse(Console.ReadLine());
        var ps = Array.ConvertAll(new bool[n], _ => Read2());
        var qc = int.Parse(Console.ReadLine());
        var qs = Array.ConvertAll(new bool[qc], _ => Read2());

        var rsq1 = new StaticRSQ1(Array.ConvertAll(ps, p => p.c == 1 ? p.p : 0L));
        var rsq2 = new StaticRSQ1(Array.ConvertAll(ps, p => p.c == 2 ? p.p : 0L));

        Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput())
        {
            AutoFlush = false
        });
        foreach (var(l, r) in qs)
        {
            Console.WriteLine($"{rsq1.GetSum(l - 1, r)} {rsq2.GetSum(l - 1, r)}");
        }
        Console.Out.Flush();
    }
Пример #8
0
    static bool Solve()
    {
        var n = int.Parse(Console.ReadLine());
        var a = ReadL();

        var sum = a.Sum();

        if (sum % 10 != 0)
        {
            return(false);
        }
        sum /= 10;

        a = a.Concat(a).ToArray();
        var rsq = new StaticRSQ1(a);
        var s   = rsq.Raw;

        var map = new MultiMap <long, int>();

        for (int i = 0; i < s.Length; i++)
        {
            map.Add(s[i] % sum, i);
        }

        foreach (var l in map.Values)
        {
            for (int i = 1; i < l.Count; i++)
            {
                if (rsq.GetSum(l[i - 1], l[i]) == sum)
                {
                    return(true);
                }
            }
        }
        return(false);
    }