QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#220269#7184. Transport Pluses123456qweWA 1ms3744kbC++142.7kb2023-10-20 00:30:152023-10-20 00:30:16

Judging History

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

  • [2023-10-20 00:30:16]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3744kb
  • [2023-10-20 00:30:15]
  • 提交

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;
}

詳細信息

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