QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#279047#7744. ElevatorFreeuni1#TL 0ms3500kbC++172.1kb2023-12-08 04:00:362023-12-08 04:00:36

Judging History

你现在查看的是最新测评结果

  • [2023-12-08 04:00:36]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:3500kb
  • [2023-12-08 04:00:36]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
#define ff first
#define ss second
#define all(x) (x).begin(), (x).end()
#define MAXA(x, y) (x) = ((x) > (y)) ? (x) : (y)
#define MINA(x, y) (x) = ((x) < (y)) ? (x) : (y)
#define MAX(x, y) ((x) > (y)) ? (x) : (y)
#define MIN(x, y) ((x) < (y)) ? (x) : (y)
#define ADD(x, y, mod) (x) = (((x)+(y) >= (mod)) ? ((x)+(y) - (mod)) : (((x)+(y) < 0) ? ((x)+(y)+(mod)) : ((x)+(y))) )
#define pb push_back
#define eb emplace_back
#define pii pair<int,int>
#define vi vector<int>
#define count1(x) __builtin_popcount(x)
#define endl '\n'
using namespace std;

// lllllllllllll
const int N = 102;

void test_case(){
    ll n, k;
    cin >> n >> k;
    pair<int, pii> P[n];
    ll answer = 0;
    for(int i = 0; i < n; i++){
        cin >> P[i].ss.ff >> P[i].ss.ss >> P[i].ff;
        if(P[i].ss.ss == 1){
            answer += P[i].ss.ff/k*P[i].ff;
            P[i].ss.ff %= k;
        } else {
            answer += P[i].ss.ff*2/k*P[i].ff;
            P[i].ss.ff = P[i].ss.ff*2%k/2;
        }
    }

    sort(P, P+n);

    vector<int> v;
    for(int i = 0; i < n; i++){
        if(P[i].ss.ss == 1){
            v.push_back(i);
        }
    }


    int p = n-1;
    while(p >= 0){
        ll cur = 0;
        answer += P[p].ff;
        while(p >= 0 && cur <= k-1){
            auto [f, a] = P[p];
            auto [c, w] = a;
            ll rao = min((k - cur)/w, (ll)c);
            cur += rao * w;
            P[p].ss.ff -= rao;
            assert(P[p].ss.ff >= 0);
            if(P[p].ss.ff == 0) p--;
            //cout << cur << endl;
        }


        if(cur < k && p >= 0){
            while(v.size() > 0 && P[v.back()].ss.ff == 0) v.pop_back();
            if(v.size()){
                P[v.back()].ss.ff--;
                if(P[v.back()].ss.ff == 0) v.pop_back();
            }
        }
    }

    cout << answer << endl;
}

int main(){

    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    
    int t = 1;
    cin >> t;
    while(t--){
        test_case();
    }
    
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3500kb

input:

2
4 6
1 1 8
7 2 5
1 1 7
3 2 6
8 1200000
100000 1 100000
100000 1 12345
100000 2 100000
100000 2 12345
100000 1 100000
100000 1 12345
100000 2 100000
100000 2 12345

output:

24
100000

result:

ok 2 lines

Test #2:

score: -100
Time Limit Exceeded

input:

5501
8 104
5 2 3
6 2 4
5 2 3
6 2 9
8 2 4
2 1 3
7 2 4
8 2 8
1 290
3 1 1
12 12
6 1 2
1 2 2
1 1 2
1 2 4
6 1 1
1 2 5
6 1 4
4 1 4
6 2 4
6 2 5
4 2 5
4 1 4
5 334
1 1 4
1 2 3
4 2 1
5 1 1
2 1 2
13 218
5 2 3
5 1 4
1 2 1
1 2 5
3 2 2
1 1 3
4 2 2
1 2 5
2 2 1
2 1 5
3 2 1
5 2 1
1 1 4
10 260
7 2 1
5 1 1
5 2 4
6 1 6...

output:


result: