Exemple #1
0
    void calc()
    {
        cin = new Scanner();
        int N = cin.nextInt();

        long[] A   = cin.ArrayLong(N);
        long[] sum = new long[N];
        long   now = 0;
        Dictionary <long, long> dic = new Dictionary <long, long>();

        dic[now] = 1;

        long ans = 0;

        for (int i = 0; i < N; i++)
        {
            now += A[i];
            if (!dic.ContainsKey(now))
            {
                dic[now] = 0;
            }
            ans += dic[now];
            dic[now]++;
        }

        Console.WriteLine(ans);
    }
Exemple #2
0
    static void Main()
    {
        int N = cin.Int();
        var a = cin.ArrayLong(N);

        Console.WriteLine(a.Sum() - N);
        Console.ReadLine();
    }
Exemple #3
0
        public object ABC194C()
        {
            var n = cin.NextInt();
            var a = cin.ArrayLong(n);
            var s = new long[n + 1];

            s[0] = 0;
            for (int i = 0; i < n; i++)
            {
                s[i + 1] = s[i] + a[i];
            }
            long ans = 0;

            for (int i = 0; i < n; i++)
            {
                ans += (n - 1) * a[i] * a[i];
                ans -= 2 * a[i] * (s[n] - s[i + 1]);
            }
            return(ans);
        }
Exemple #4
0
    static void Main()
    {
        int  N = cin.Int();
        int  M = cin.Int();
        long X = cin.Long();
        long Y = cin.Long();
        var  a = cin.ArrayLong(N);
        var  b = cin.ArrayLong(M);

        long current = 0, ans = 0;
        int  a_index = 0, b_index = 0;

        while (a_index < N)
        {
            current = a[a_index] + X;
            while (b_index < M && current > b[b_index])
            {
                b_index++;
            }
            if (b_index < M)
            {
                current = b[b_index] + Y;
                while (a_index < N && current > a[a_index])
                {
                    a_index++;
                }
                ans++;
            }
            else
            {
                break;
            }
        }

        Console.WriteLine(ans);
        Console.ReadLine();
    }
Exemple #5
0
    static void Main(string[] args)
    {
        int N = cin.Int();
        var a = cin.ArrayLong(3 * N);

        a = a.OrderByDescending(x => x).ToArray();
        long ans = 0;

        for (int i = 1; i <= 2 * N - 1; i += 2)
        {
            ans += a[i];
        }
        Console.WriteLine(ans);
        Console.ReadLine();
    }
Exemple #6
0
    void calc()
    {
        cin = new Scanner();
        int N = cin.nextInt();

        long[] num = cin.ArrayLong(N);
        Array.Sort(num);
        Array.Reverse(num);

        Dictionary <long, int> dic = new Dictionary <long, int>();

        foreach (var item in num)
        {
            if (!dic.ContainsKey(item))
            {
                dic[item] = 0;
            }
            dic[item]++;
        }

        int ans = 0;

        foreach (var A in num)
        {
            if (dic[A] == 0)
            {
                continue;
            }
            dic[A]--;
            long T = 1;
            while (T <= A)
            {
                T *= 2;
            }

            long B = T - A;

            if (dic.ContainsKey(B) && dic[B] >= 1)
            {
                dic[B]--;
                ans++;
            }
        }

        Console.WriteLine(ans);
    }
Exemple #7
0
    void calc()
    {
        cin = new Scanner();
        int N = cin.nextInt();

        long[] A   = cin.ArrayLong(3 * N);
        long   ans = 0;

        Array.Sort(A);
        Array.Reverse(A);

        for (int i = 0; i < N; i++)
        {
            ans += A[1 + i * 2];
        }

        Console.WriteLine(ans);
    }
Exemple #8
0
    static void Main(string[] args)
    {
        int  N = cin.Int();
        long M = cin.Long();
        var  A = cin.ArrayLong(N);

        var sum = new long[100010];

        for (int i = 1; i <= N; i++)
        {
            sum[i] = A[i - 1] + sum[i - 1];
        }
        for (int i = 1; i <= N; i++)
        {
            sum[i] %= M;
        }

        var dic = new Dictionary <long, long>();

        dic[0] = 1;
        for (int i = 1; i <= N; i++)
        {
            if (dic.ContainsKey(sum[i]))
            {
                dic[sum[i]]++;
            }
            else
            {
                dic[sum[i]] = 1;
            }
        }

        long ans = 0;

        foreach (var k in dic.Values)
        {
            ans += k * (k - 1) / 2;
        }
        Console.WriteLine(ans);
        Console.ReadLine();
    }
Exemple #9
0
    static void Main()
    {
        int N = cin.Int();
        int K = cin.Int();
        var a = cin.ArrayLong(N);

        long ans = 0;

        if (N >= 2 * K - 2)
        {
            for (int i = 0; i < K - 1; i++)
            {
                ans += a[i] * (i + 1);
            }
            for (int i = N - K + 1; i < N; i++)
            {
                ans += a[i] * (N - i);
            }
            for (int i = K - 1; i <= N - K; i++)
            {
                ans += a[i] * K;
            }
        }
        else
        {
            for (int i = 0; i < N - K + 1; i++)
            {
                ans += a[i] * (i + 1);
            }
            for (int i = K - 1; i < N; i++)
            {
                ans += a[i] * (N - i);
            }
            for (int i = N - K + 1; i <= K - 2; i++)
            {
                ans += a[i] * (N - K + 1);
            }
        }
        Console.WriteLine(ans);
        Console.ReadLine();
    }
Exemple #10
0
    void calc()
    {
        cin = new Scanner();
        int N = cin.nextInt();

        long[] A = cin.ArrayLong(N);
        Array.Sort(A);
        int  ok  = 0;
        long sum = 0;

        for (int i = 0; i < N; i++)
        {
            if (A[i] > sum * 2)
            {
                ok = 0;
            }
            sum += A[i];
            ok++;
        }
        Console.WriteLine(ok);
    }
Exemple #11
0
    static void Main()
    {
        int N = cin.Int();
        int K = cin.Int();
        var R = cin.ArrayLong(N).OrderByDescending(x => x).ToArray();

        double ans = 0;
        var    RR  = new long[K];

        for (int i = 0; i < K; i++)
        {
            RR[i] = R[i];
        }
        Array.Sort(RR);
        for (int i = 0; i < K; i++)
        {
            ans = (ans + RR[i]) / 2.0;
        }
        Console.WriteLine(ans);
        Console.ReadLine();
    }
Exemple #12
0
    void calc()
    {
        cin = new Scanner();
        int N = cin.nextInt();
        int K = cin.nextInt();

        long[] A    = cin.ArrayLong(N);
        long[] sumA = new long[N + 1];
        long[] sumB = new long[N + 1];
        for (int i = 0; i < N; i++)
        {
            sumA[i + 1] = sumA[i] + A[i];
            sumB[i + 1] = sumB[i] + Math.Max(A[i], 0);
        }
        long ans = 0;

        for (int i = K; i <= N; i++)
        {
            ans = Math.Max(ans, sumB[N] - (sumB[i] - sumB[i - K]) + (sumA[i] - sumA[i - K]));
            ans = Math.Max(ans, sumB[N] - (sumB[i] - sumB[i - K]));
        }
        Console.WriteLine(ans);
    }
        void Solve()
        {
            Scanner cin = new Scanner();
            int     N   = cin.NextInt();

            long[] A   = cin.ArrayLong(N);
            long[] gcd = new long[N + 2]; // gcd[i] is gcd with removing i-th number
            long[] L   = new long[N + 2];
            long[] R   = new long[N + 2];

            L[0]     = A[0];
            R[N - 1] = A[N - 1];

            for (int i = 0; i < N - 1; ++i)
            {
                L[i + 1] = CalcGCD(L[i], A[i + 1]);
            }
            for (int i = N - 2; 0 <= i; --i)
            {
                R[i] = CalcGCD(R[i + 1], A[i]);
            }

            long ans = Math.Max(L[N - 2], R[1]);

            for (int i = 1; i < N - 1; ++i)
            {
                long tmp = CalcGCD(L[i - 1], R[i + 1]) /*without i-th*/;

                //long tmp = Math.Max(
                //    CalcGCD(L[i], R[i + 1])/*without i-th*/,
                //    CalcGCD(L[i], R[i])/*with i-th*/);
                ans = ans <= tmp ? tmp : ans;
            }

            Console.WriteLine(ans);
        }
Exemple #14
0
    void calc()
    {
        cin = new Scanner();
        int N = cin.nextInt();

        long[] A = cin.ArrayLong(N);
        long[] B = new long[N];
        long[] C = (long[])A.Clone();
        for (int i = 0; i < N; i++)
        {
            B[i] = 1;
        }
        for (int i = 2; (long)i * i * i <= (long)1e10; i++)
        {
            if (isPrime(i))
            {
                for (int j = 0; j < N; j++)
                {
                    long mul = (long)i * i * i;
                    while (A[j] % mul == 0)
                    {
                        A[j] /= mul;
                        C[j] /= mul;
                    }
                    if (A[j] % i == 0)
                    {
                        B[j] *= mul;
                        //Console.WriteLine(j + " " + A[j] + " " + B[j] + " " + C);
                        while (C[j] % i == 0)
                        {
                            C[j] /= i;
                            B[j] /= i;
                        }

                        //Console.WriteLine(j+ " " + A[j] + " " + B[j] + " " + C);
                    }
                }
            }
        }
        for (int i = 0; i < N; i++)
        {
            long sq = (long)Math.Sqrt(C[i] + 1);
            if (sq * sq == C[i])
            {
                B[i] *= sq;
            }
            else
            {
                B[i] *= C[i] * C[i];
            }
        }

        int ans = 0;
        Dictionary <long, int> dic = new Dictionary <long, int>();

        for (int i = 0; i < N; i++)
        {
            //Console.WriteLine(A[i] + " " + B[i]);
            if (!dic.ContainsKey(A[i]))
            {
                dic[A[i]] = 0;
            }
            if (!dic.ContainsKey(B[i]))
            {
                dic[B[i]] = 0;
            }
            dic[A[i]]++;
            if (dic[A[i]] > dic[B[i]])
            {
                ans++;
            }
            if (A[i] == 1 && dic[A[i]] == 1)
            {
                ans++;
            }
        }

        Console.WriteLine(ans);
    }
Exemple #15
0
    void calc()
    {
        cin = new Scanner();
        int N = cin.nextInt();

        long[] X = cin.ArrayLong(N);
        int    M = cin.nextInt();
        long   K = cin.nextLong();

        int[] A = cin.ArrayInt(M, -2);

        int[] pos = new int[N - 1];
        for (int i = 0; i < N - 1; i++)
        {
            pos[i] = i;
        }

        for (int i = 0; i < M; i++)
        {
            int a = A[i];
            int b = A[i] + 1;
            swap(ref pos[a], ref pos[b]);
        }
        //i -> pos[i]???????????

        bool[] used = new bool[N - 1];
        for (int i = 0; i < N - 1; i++)
        {
            if (used[i])
            {
                continue;
            }
            List <int> l = new List <int>();
            l.Add(i);

            int now = pos[i];
            while (now != i)
            {
                l.Add(now); now = pos[now];
            }

            int step = (int)(K % l.Count);

            for (int j = 0; j < l.Count; j++)
            {
                pos[l[j]] = l[(j + step) % l.Count];
            }

            foreach (var j in l)
            {
                used[j] = true;
            }
        }

        long[] diff = new long[N - 1];
        for (int i = 0; i < N - 1; i++)
        {
            int P = pos[i];
            diff[i] = X[P + 1] - X[P];
        }

        long[] ans = new long[N];
        ans[0] = X[0];
        for (int i = 0; i < N - 1; i++)
        {
            ans[i + 1] = ans[i] + diff[i];
        }

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