Submission #53368651


Source Code Expand

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
using ll = long long;
#define REP_(i, a_, b_, a, b, ...) \
  for (int i = (a), lim##i = (b); i < lim##i; i++)
#define REP(i, ...) REP_(i, __VA_ARGS__, __VA_ARGS__, 0, __VA_ARGS__)
#define all(v) v.begin(), v.end()

int main() {
  int N;
  cin >> N;
  vector<ll> A(N);
  ll lim = 100000000;
  vector<ll> acc(N + 1);
  acc[0] = 0;
  REP(i, N) { cin >> A[i]; }

  sort(A.begin(), A.end());
  REP(i, N) {
    // cout << A[i] << " ";
    acc[i + 1] = acc[i] + A[i];
    // acc[i + 1] %= lim;
  }
  // cout << endl;
  // cout << endl;

  ll ans = 0;
  REP(i, N - 1) {
    // cout << A[i] << endl;
    // cout << "A[i]について二分探索する" << A[i] << endl;
    ll v = lim - A[i];
    auto it = lower_bound(A.begin() + i + 1, A.end(), v);
    if (it != A.end()) {
      // 二分探索にヒットしたので10**8を引く回数を求める
      int idx = it - A.begin();
      // cout << "合計が10**8以上になる最初の数: " << idx << " " << *it << endl;
      // cout << "i+1から終端までの合計" << acc[N] - acc[i + 1] << endl;
      ans += acc[N] - acc[i + 1];
      ans += A[i] * (N - i - 1);
      // cout << N - idx << "回 10**8を減産する" << endl;
      ans -= lim * (N - idx);
    } else {
      ans += acc[N] - acc[i + 1];
      ans += A[i] * (N - i - 1);
    }
    // cout << ans << endl;
  }
  cout << ans << endl;
}

Submission Info

Submission Time
Task C - Sigma Problem
User noyan
Language C++ 23 (gcc 12.2)
Score 300
Code Size 1435 Byte
Status AC
Exec Time 94 ms
Memory 7944 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 300 / 300
Status
AC × 2
AC × 22
Set Name Test Cases
Sample 00_sample_01.txt, 00_sample_02.txt
All 00_sample_01.txt, 00_sample_02.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt
Case Name Status Exec Time Memory
00_sample_01.txt AC 1 ms 3464 KiB
00_sample_02.txt AC 1 ms 3456 KiB
01_test_01.txt AC 92 ms 7808 KiB
01_test_02.txt AC 93 ms 7916 KiB
01_test_03.txt AC 92 ms 7816 KiB
01_test_04.txt AC 93 ms 7944 KiB
01_test_05.txt AC 93 ms 7908 KiB
01_test_06.txt AC 93 ms 7868 KiB
01_test_07.txt AC 93 ms 7936 KiB
01_test_08.txt AC 92 ms 7860 KiB
01_test_09.txt AC 93 ms 7884 KiB
01_test_10.txt AC 93 ms 7904 KiB
01_test_11.txt AC 87 ms 7812 KiB
01_test_12.txt AC 33 ms 7820 KiB
01_test_13.txt AC 73 ms 7808 KiB
01_test_14.txt AC 12 ms 3812 KiB
01_test_15.txt AC 94 ms 7796 KiB
01_test_16.txt AC 60 ms 6316 KiB
01_test_17.txt AC 1 ms 3460 KiB
01_test_18.txt AC 1 ms 3440 KiB
01_test_19.txt AC 85 ms 7884 KiB
01_test_20.txt AC 84 ms 7796 KiB