QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#849350 | #3224. Directions | CarroT1212 | WA | 56ms | 14252kb | C++14 | 1.9kb | 2025-01-09 14:49:34 | 2025-01-09 14:49:34 |
Judging History
answer
#include <bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
using namespace std; bool MEM;
using ll=long long; using ld=long double;
using pii=pair<int,int>; using pll=pair<ll,ll>;
const int I=1e9;
const ll J=1e18,N=2e5+7;
const ld pi=acos(-1);
ll n,m,ans=J;
pair<ld,ll> a[N],b[N],c[N];
map<ld,ll> mp;
void go(ll p) {
if (b[p].fi>0) for (ll i=1;i<=m;i++) b[i].fi=b[i].fi>0?b[i].fi-pi:b[i].fi+pi;
for (ll i=1;i<=m;i++) c[i]=b[i];
sort(c+1,c+m+1);
ld l=b[p].fi,r=l+pi;
ll s=1,t=1,mnn=J;
for (ll i=1;i<=m;i++) if (c[i].fi>l) { s=i; break; }
for (ll i=1;i<=m;i++) if (c[i].fi>r) { t=i; break; }
// printf("%lld %lld %lld %Lf %Lf\n",p,s,t,l,r);
// for (ll i=1;i<=m;i++) printf(" %Lf %lld\n",c[i].fi,c[i].se);
for (ll i=s,u=t;i<t;i++) {
while (u!=s) {
if (c[i].fi<=0?c[u].fi-c[i].fi<pi:c[u].fi>0||c[i].fi-c[u].fi>pi)
mnn=min(mnn,c[u].se),u=u%m+1;
else break;
}
ans=min(ans,b[p].se+mnn+c[i].se);
// printf("%lld %lld\n",i,u);
}
}
void solve3() {
ll mn=J,p=0,pp=0;
for (ll i=1;i<=m;i++) if (b[i].se<mn) mn=b[i].se,p=i;
pp=mp[b[p].fi>0?b[p].fi-pi:b[p].fi+pi];
go(p);
if (pp) go(pp);
}
void solve4() {
vector<ll> v;
for (auto i:mp) if (i.fi>0&&mp.count(-i.fi)) v.pb(i.se+mp[-i.fi]);
sort(v.begin(),v.end());
if (v.size()>=2) ans=min(ans,v[0]+v[1]);
}
void mian() {
scanf("%lld",&n);
for (ll i=1,x,y,z;i<=n;i++) {
scanf("%lld%lld%lld",&x,&y,&z);
if (!x&&!y) z=J;
a[i]={atan2(y,x),z};
}
sort(a+1,a+n+1);
for (ll l=1,r;l<=n;l=r+1) {
for (r=l;r<n&&a[r+1].fi==a[l].fi;r++);
b[++m]={a[l].fi,J};
for (ll i=l;i<=r;i++) b[m].se=min(b[m].se,a[i].se);
mp[b[m].fi]=b[m].se;
}
if (m<=3) return cout<<"-1",void();
// for (ll i=1;i<=m;i++) printf(" %Lf %lld\n",b[i].fi,b[i].se);
solve3(),solve4();
cout<<(ans==J?-1:ans);
}
bool ORY; int main() {
// while (1)
// int t; for (scanf("%d",&t);t--;)
mian();
cerr<<"\n"<<abs(&MEM-&ORY)/1048576<<"MB";
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 42ms
memory: 14252kb
input:
200000 -1 -1 1 1 1 1 0 1 1 1 0 1 1 -1 1 1 1 1 1 1 1 -1 1 1 1 -1 1 0 1 1 0 0 1 0 0 1 1 -1 1 -1 -1 1 0 0 1 1 0 1 -1 1 1 -1 1 1 1 1 1 1 1 1 -1 1 1 0 -1 1 1 -1 1 -1 0 1 1 0 1 1 -1 1 0 -1 1 1 0 1 -1 1 1 1 0 1 -1 0 1 1 1 1 1 0 1 -1 -1 1 -1 1 1 -1 -1 1 0 -1 1 0 -1 1 1 1 1 1 -1 1 0 1 1 1 1 1 -1 1 1 1 -1 1 0...
output:
3
result:
ok single line: '3'
Test #2:
score: 0
Accepted
time: 43ms
memory: 12448kb
input:
200000 -1 -1 2 1 0 1 1 0 2 1 -1 2 1 0 1 -1 1 1 -1 -1 2 1 1 1 0 -1 2 -1 -1 1 0 1 2 0 -1 2 -1 0 2 0 0 2 -1 1 1 1 1 1 -1 0 1 1 -1 2 1 0 1 0 0 1 1 0 2 0 -1 1 0 1 1 0 -1 2 -1 1 2 0 1 2 -1 1 2 0 1 1 0 1 1 1 1 2 1 1 1 1 0 2 1 1 2 -1 1 2 -1 1 1 0 1 2 0 -1 2 1 0 2 0 1 1 0 -1 1 1 -1 1 1 0 2 0 -1 1 -1 0 1 0 -1...
output:
3
result:
ok single line: '3'
Test #3:
score: -100
Wrong Answer
time: 56ms
memory: 13380kb
input:
200000 1 0 555860533 -1 1 633479355 0 0 411890838 -1 -1 411764668 0 0 324117889 1 1 147426106 1 0 41681213 1 -1 169580394 1 -1 204074237 -1 1 265787176 1 -1 204010614 0 -1 582574240 0 -1 98238758 1 1 489573021 -1 1 747647275 1 -1 933893240 0 -1 663924164 0 0 470849190 1 -1 479419247 -1 -1 53695974 0...
output:
59116
result:
wrong answer 1st lines differ - expected: '95355', found: '59116'