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); }
static void Main() { int N = cin.Int(); var a = cin.ArrayLong(N); Console.WriteLine(a.Sum() - N); Console.ReadLine(); }
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); }
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(); }
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(); }
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); }
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); }
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(); }
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(); }
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); }
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(); }
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); }
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); }
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]); } }