QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#314557 | #7750. Revenge on My Boss | arnold518 | WA | 0ms | 4080kb | C++17 | 2.4kb | 2024-01-25 20:27:51 | 2024-01-25 20:27:52 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int MAXN = 1e5;
struct Data
{
ll a, b, c;
int p;
};
struct Frac
{
ll u, d;
Frac(ll u, ll d) : u(u), d(d) {}
bool operator < (const Frac &ot) const { return (__int128)u*ot.d < (__int128)ot.u*d; }
};
int TC, N;
Data A[MAXN+10];
int main()
{
scanf("%d", &TC);
while(TC--)
{
scanf("%d", &N);
for(int i=1; i<=N; i++) scanf("%lld%lld%lld", &A[i].a, &A[i].b, &A[i].c), A[i].p=i;
vector<int> ans;
vector<int> V1, V2;
for(int i=1; i<=N; i++)
{
if(A[i].a<=A[i].b) V1.push_back(i);
else V2.push_back(i);
}
ll SA=0, SB=0;
for(int i=1; i<=N; i++) SA+=A[i].a, SB+=A[i].b;
ll lo=0, hi=1e18;
while(lo+1<hi)
{
ll mid=lo+hi>>1;
vector<pair<Frac, int>> V;
for(auto i : V1) V.push_back({{mid-A[i].a*A[i].c, A[i].c}, i});
sort(V.begin(), V.end());
ll t=SB;
bool flag=true;
for(auto [v, p] : V)
{
t+=A[p].b-A[p].a;
if(v<Frac(t, 1)) flag=false;
}
if(flag) hi=mid;
else lo=mid;
}
{
vector<pair<Frac, int>> V;
for(auto i : V1) V.push_back({{hi-A[i].b*A[i].c, A[i].c}, i});
sort(V.begin(), V.end());
for(auto it : V) ans.push_back(it.second);
}
lo=0, hi=1e18;
while(lo+1<hi)
{
ll mid=lo+hi>>1;
vector<pair<Frac, int>> V;
for(auto i : V2) V.push_back({{mid-A[i].b*A[i].c, A[i].c}, i});
sort(V.begin(), V.end());
ll t=SB;
bool flag=true;
for(auto [v, p] : V)
{
t+=A[p].a-A[p].b;
if(v<Frac(t, 1)) flag=false;
}
if(flag) hi=mid;
else lo=mid;
}
{
vector<pair<Frac, int>> V;
for(auto i : V2) V.push_back({{hi-A[i].b*A[i].c, A[i].c}, i});
sort(V.begin(), V.end());
for(auto it : V) ans.push_back(it.second);
}
for(auto it : ans) printf("%d ", it); printf("\n");
}
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 4080kb
input:
2 4 1 1 4 5 1 5 1 9 1 9 8 1 9 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 8 3 2 7
output:
1 3 2 4 2 8 4 3 5 9 7 1 6
result:
wrong answer Wrong Answer on Case#2