QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#50542#2281. BnPCdariusuzumakiTL 3ms3668kbC++2.2kb2022-09-27 01:55:582022-09-27 01:56:00

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-09-27 01:56:00]
  • 评测
  • 测评结果:TL
  • 用时:3ms
  • 内存:3668kb
  • [2022-09-27 01:55:58]
  • 提交

answer

#include <bits/stdc++.h>
#include <unordered_map>
#include <iostream>
#include <queue>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int ui;
typedef double db;
typedef long double ldb;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<vi> vvi;

#define LI(i, a, b) for (int i = a; i <= b; i++)  // forloop inclusive
#define LE(i, a, b) for (int i = a; i < b; i++)   // forloop exclusive
#define LBI(i, a, b) for (int i = a; i >= b; i--) // forloop backward inclusive
#define LBE(i, a, b) for (int i = a; i > b; i--)  // forloop backward inclusive

#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Max(a, b) ((a) < (b) ? (b) : (a))

void b()
{
    ll n, k;
    cin >> n >> k;
    unordered_map<string, ll> attr;
    unordered_map<string, multiset<ll> > challs;
    string name;
    ll score, res = 0;
    LE(i, 0, n)
    {
        cin >> name >> score;
        attr.insert(pair<string, ll >(name, score));
    }

    cin >> n;
    LE(i, 0, n)
    {
        cin >> name >> score;
        challs[name].insert(score);
    }

    for(auto &a : challs) {
        k -= (*a.second.rbegin() - attr[a.first] > 0) ? *a.second.rbegin() - attr[a.first] : 0;
        if (k < 0) {
            cout << 0 << "\n";
            return;
        }
        attr[a.first] = Max(attr[a.first], *a.second.rbegin());
        if (*a.second.rbegin() < attr[a.first])
        {
            res += attr[a.first] * a.second.size();
            continue;
        }

        res += attr[a.first] * distance(a.second.begin(), a.second.find(attr[a.first]));
    }

    while (k--)
    {
        ll h = 0;
        string attribute;
        for (auto a : attr)
        {
            ll old_score = (a.second) * distance(challs[a.first].begin(), challs[a.first].find(attr[a.first]));
            ll np = res - old_score + (a.second + 1) * challs[a.first].size();

            if (h < np)
            {
                h = np;
                attribute = a.first;
            }
        }
        attr[attribute]++;
        res = h;
    }
    cout << res << "\n";
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    b();

    return 0;
}

详细

Test #1:

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

input:

3 14
THISISTHEONE 8
B 0
C 0
8
THISISTHEONE 10
C 0
B 1
B 0
THISISTHEONE 0
C 1
THISISTHEONE 0
THISISTHEONE 0

output:

82

result:

ok single line: '82'

Test #2:

score: 0
Accepted
time: 3ms
memory: 3620kb

input:

3 99
THEFIRSTINCREASE 6
SECONDINCREASE 4
ZZZ 1
9
THEFIRSTINCREASE 4
ZZZ 0
THEFIRSTINCREASE 6
SECONDINCREASE 8
THEFIRSTINCREASE 2
SECONDINCREASE 1
ZZZ 0
SECONDINCREASE 8
THEFIRSTINCREASE 3

output:

429

result:

ok single line: '429'

Test #3:

score: 0
Accepted
time: 2ms
memory: 3668kb

input:

5 20
A 100
B 200
C 300
D 400
E 500
949
A 39
A 23
C 163
A 98
B 36
A 3
A 52
B 152
B 167
B 65
C 142
B 66
B 117
C 288
C 155
E 341
A 97
D 173
E 31
A 62
D 90
E 361
A 42
D 85
E 1
C 141
B 77
B 194
D 221
E 203
D 345
E 48
B 26
D 46
B 74
E 380
B 181
C 243
B 112
A 99
E 403
C 20
E 453
C 149
B 26
E 245
A 74
D 304...

output:

285180

result:

ok single line: '285180'

Test #4:

score: 0
Accepted
time: 2ms
memory: 3644kb

input:

2 1
A 10
B 12
3
A 10
B 10
B 10

output:

35

result:

ok single line: '35'

Test #5:

score: 0
Accepted
time: 2ms
memory: 3624kb

input:

1 1
OVERENTHUSIASTICNESS 41
1
OVERENTHUSIASTICNESS 0

output:

42

result:

ok single line: '42'

Test #6:

score: -100
Time Limit Exceeded

input:

100000 1000000000
A 1000000000
B 1000000000
C 1000000000
D 1000000000
E 1000000000
F 1000000000
G 1000000000
H 1000000000
I 1000000000
J 1000000000
K 1000000000
L 1000000000
M 1000000000
N 1000000000
O 1000000000
P 1000000000
Q 1000000000
R 1000000000
S 1000000000
T 1000000000
U 1000000000
V 1000000...

output:


result: