[Offer收割]编程练习赛1 register

Ended

Participants:955

Verdict:Accepted
Score:100 / 100
Submitted:2016-03-06 15:08:48

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
const int mx = 100005;
using namespace std;
int n, p[mx];
long long q;
priority_queue<int> pq;
bool ok(int a) {
    long long ans = 0;
    int t = 1;
    while(!pq.empty())
        pq.pop();
    for(int i = 0; i < a; i++)
        pq.push(p[i]);
    for(int i = a; i < n; i++) {
        ans += pq.top() * t;
        t++;
        pq.pop();
        pq.push(p[i]);
    }
    for(int i = 0; i < a; i++) {
        ans += pq.top() * t;
        t++;
        pq.pop();
    }
    // cout << a << " " << ans << endl;
    if(ans <= q)return true;
    return false;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX