QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#673409 | #7744. Elevator | Yuanyin26 | WA | 132ms | 10548kb | C++17 | 2.2kb | 2024-10-24 22:13:59 | 2024-10-24 22:13:59 |
Judging History
answer
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<string.h>
#include <string>
#include<math.h>
#include<set>
#include<unordered_map>
#include<unordered_set>
#include<map>
#include<queue>
#include<stack>
#include<functional>
using namespace std;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define int long long
#define inf 1e18
const int N = 1e5+7;
const int M = 205;
const int mod = 1e9 + 7;
char* p1, * p2, buf[100000];
#define nc() (p1==p2 && (p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int read()
{
int x = 0, f = 1;
char ch = nc();
while (ch < 48 || ch>57)
{
if (ch == '-')
f = -1;
ch = nc();
}
while (ch >= 48 && ch <= 57)
x = x * 10 + ch - 48, ch = nc();
return x * f;
}
struct node
{
int c;
int w;
int f;
};
void solve()
{
int n, k;
n = read();
k = read();
int mx = -inf;
vector<node>x;
vector<int>q;
for (int i = 1; i <= n; i++)
{
int c, w, f;
c = read();
w = read();
f = read();
x.push_back({ c,w,f });
q.push_back(f);
mx = max(mx, f);
}
sort(q.begin(), q.end(),greater<int>());
q.resize(unique(q.begin(), q.end()) - q.begin());
vector<vector<int>>a(3, vector<int>(mx+1, 0));//重量为i,高度为h的数量
for (int i = 0; i < n; i++)
{
int c, w, f;
c = x[i].c, w = x[i].w, f = x[i].f;
a[w][f] += c;
}
int sum = 0;
int re = 0;
for (auto i:q)//从最高层往下枚举
{
if (re)//前面电梯带走他
{
if (((int)re / 2) > a[2][i])//空电梯把他带走
{
re -= a[2][i] * 2;
a[2][i] = 0;
}
else//带不完
{
a[2][i] -= re / 2;
re %= 2;
}
if (re)//还有剩余
{
if (((int)re / 2) > a[1][i])//空电梯把他带走
{
re -= a[1][i];
a[1][i] = 0;
}
else//带不完
{
a[1][i] -= re;
re = 0;
}
}
}
int cnt = (a[2][i] * 2 + a[1][i]) / k;
sum += cnt * i;
if ((a[2][i] * 2 + a[1][i]) % k)
{
re += k - ((a[2][i] * 2 + a[1][i]) % k);
sum += i;
}
}
printf("%lld\n", sum);
}
signed main()
{
int T = 1;
cin >> T;
while (T--)
{
solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 2ms
memory: 6572kb
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
Wrong Answer
time: 132ms
memory: 10548kb
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:
9 1 25 4 5 7 1 3 9 6 1 10 4 10 20 7 4 1 8 5 5 7 1 3 23 6 3 3 2 2 2 3 8 1 6 6 9 12 147 7 10 2 7 7 8 6 5 6 1 7 3 5 10 7 7 10 8 1 4 2 3 9 1 5 2 9 1 6 7 7 6 13 18 8 10 4 11 9 2 8 3 5 9 3 6 5 3 2 6 1 3 2 2 1 6 9 6 3 4 8 9 9 2 6 1 2 6 7 5 2 5 21 8 1 2 3 4 9 3 4 6 5 9 6 1 7 3 7 3 2 2 8 7 3 5 9 7 10 7 3 2 4...
result:
wrong answer 3rd lines differ - expected: '23', found: '25'