답안 #500672

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
500672 2021-12-31T18:27:39 Z 600Mihnea Sails (IOI07_sails) C++17
40 / 100
1000 ms 2512 KB
#include <bits/stdc++.h>

using namespace std;

#define int long long

int gauss(int x) {
  return x * (x + 1) / 2;
}

struct Data {
  int total;
  int need;
};

bool operator < (Data a, Data b) {
  return a.total < b.total;
}

const int N = (int) 1e5 + 7;
const int INF = (int) 1e18;
int n;
int cnt[N];
Data guys[N];

signed main() {
  ios::sync_with_stdio(0); cin.tie(0);
  //freopen ("input", "r", stdin);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> guys[i].total >> guys[i].need;
  }
  set<int> nez;
  sort(guys + 1, guys + n + 1);


  for (int i = 1; i <= n; i++) {
    cnt[0] += (guys[i].total - guys[i - 1].total);
    if (cnt[0]) {
      nez.insert(0);
    }
    int need = guys[i].need;
    vector<pair<int, int>> after;
    auto it = nez.begin();
    vector<int> del;
    while (need) {
      assert(it != nez.end());
      int s = *it;
      int take = min(need, cnt[s]);
      cnt[s] -= take;
      if (cnt[s] == 0) {
        del.push_back(s);
      }
      need -= take;
      after.push_back({s + 1, take});
      it++;
    }
    assert(need == 0);
    for (auto &it : del) {
      nez.erase(it);
    }
    for (auto &it : after) {
      cnt[it.first] += it.second;
      nez.insert(it.first);
    }
  }

  int sol = 0;
  for (int i = 1; i <= n; i++) {
    sol += cnt[i] * gauss(i - 1);
  }
  cout << sol << "\n";

  return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 4 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 91 ms 408 KB Output is correct
2 Correct 3 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1084 ms 664 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1078 ms 1232 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1088 ms 1252 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1084 ms 1672 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1067 ms 2512 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1090 ms 2064 KB Time limit exceeded
2 Halted 0 ms 0 KB -