QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#220269 | #7184. Transport Pluses | 123456qwe | WA | 1ms | 3744kb | C++14 | 2.7kb | 2023-10-20 00:30:15 | 2023-10-20 00:30:16 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define fi first
#define se second
const int N=110;
ll d[N][N],st[N][N],td[N][N],idx[N][N];
ll qx,qy,zx,zy,t;
vector<pair<ll,ll>>e;
map<pair<ll,ll>,pair<ll,ll>>mp;
void dj(ll xx,ll yy)
{
priority_queue<pair<ll,pair<ll,ll>>,vector<pair<ll,pair<ll,ll>>>,greater<pair<ll,pair<ll,ll>>>>q;
st[xx][yy]++;
for (int i=0;i<e.size();i++)
{
ll a=e[i].fi,b=e[i].se;
q.push({min(abs(a-xx),abs(b-yy)),{a,b}});d[a][b]=min(abs(a-xx),abs(b-yy));
mp[{a,b}]={qx,qy};
}
while (q.size())
{
auto tt=q.top();q.pop();
ll dd=tt.fi,x=tt.se.fi,y=tt.se.se;
if (st[x][y]) continue;
else st[x][y]++;
for (int i=0;i<e.size();i++)
{
ll a=e[i].fi,b=e[i].se;
if (a==x&&b==y) continue;
ll nwd=dd+t;
if (nwd<d[a][b])
{
d[a][b]=nwd;q.push({nwd,{a,b}});
mp[{a,b}]={x,y};
}
}
}
return;
}
void solve()
{
ll n;cin>>n>>t;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)d[i][j]=LLONG_MAX;
cin>>qx>>qy>>zx>>zy;
for (int i=1;i<=n;i++)
{
ll x,y;cin>>x>>y;
if (td[x][y]) continue;
e.push_back({x,y});
td[x][y]++;idx[x][y]=i;
}
if (qx==zx&&zy==zy)
{
cout<<0<<"\n"<<0<<"\n";return;
}
dj(qx,qy);
double ans=sqrt((qx-zx)*(qx-zx)+(qy-zy)*(qy-zy));
mp[{zx,zy}]={qx,qy};
ll xx=qx,yy=qy;
for (int i=0;i<e.size();i++)
{
ll a=e[i].fi,b=e[i].se;
ll dd=min(abs(a-zx)+d[a][b]+t,abs(b-zy)+d[a][b]+t);
if (dd<ans) ans=dd,xx=a,yy=b;
}
ll tp=0;
if (xx==zx&&yy==zy) tp=1;
else mp[{zx,zy}]={xx,yy};
printf ("%.10lf\n",ans);
if (ans==sqrt((qx-zx)*(qx-zx)+(qy-zy)*(qy-zy)))
{
cout<<1<<"\n"<<0<<" "<<zx<<" "<<zy;return;
}
// for (int i=0;i<e.size();i++)
// {
// cout<<e[i].fi<<" "<<e[i].se<<" "<<d[e[i].fi][e[i].se]<<"--------------\n";
// }
vector<pair<ll,ll>>ve;ve.pb({zx,zy});
ll hzb=zx,zzb=zy;
while (mp[{hzb,zzb}].fi!=qx||mp[{hzb,zzb}].se!=qy)
{
pair<ll,ll>d2=mp[{hzb,zzb}];
ve.pb({d2.fi,d2.se});
hzb=d2.fi;zzb=d2.se;
}
cout<<ve.size()+1<<"\n";
ll x2=ve[ve.size()-1].fi,y2=ve[ve.size()-1].se;
if (x2==qx&&y2==qy) cout<<0<<" "<<qx<<" "<<qy<<"\n";
else if (abs(y2-qy)<abs(x2-qx))cout<<0<<" "<<qx<<" "<<y2<<"\n";
else cout<<0<<" "<<x2<<" "<<qy<<"\n";
for (int i=ve.size()-2;i>=0;i--)
{
x2=ve[i].fi;y2=ve[i].se;
ll x1=ve[i+1].fi,y1=ve[i+1].se;
if (y2==y1&&x2==x1) cout<<0<<x1<<" "<<y1<<"\n";
else if (abs(y2-y1)>abs(x2-x1))cout<<idx[x1][y1]<<" "<<x1<<" "<<y2<<"\n";
else cout<<idx[x1][y1]<<" "<<x2<<" "<<y1<<"\n";
}
if (tp) cout<<1<<" "<<zx<<" "<<zy;
else cout<<0<<" "<<zx<<" "<<zy;
}
int main()
{
// ios::sync_with_stdio(0);
// cin.tie(0);
// cout.tie(0);
ll T=1;
while(T--)
{
solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3744kb
input:
1 2 1 1 5 3 6 2
output:
4.0000000000 3 0 1 2 1 5 2 0 5 3
result:
ok correct
Test #2:
score: 0
Accepted
time: 0ms
memory: 3648kb
input:
2 1 1 1 6 1 1 3 6 3
output:
2.0000000000 4 0 1 1 1 6 3 2 6 1 0 6 1
result:
ok correct
Test #3:
score: 0
Accepted
time: 0ms
memory: 3492kb
input:
0 0 1 1 1 1
output:
0 0
result:
ok correct
Test #4:
score: 0
Accepted
time: 0ms
memory: 3632kb
input:
0 0 100 100 0 0
output:
141.4213562373 1 0 0 0
result:
ok correct
Test #5:
score: -100
Wrong Answer
time: 0ms
memory: 3744kb
input:
1 0 100 100 0 0 100 100
output:
100.0000000000 2 0 0 100 0 0 0
result:
wrong answer claimed 100.0000000000, actual 200.0000000000