QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#169868#7184. Transport Plusesucup-team918#WA 3ms9932kbC++203.2kb2023-09-09 14:11:582023-09-09 14:12:00

Judging History

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

  • [2023-09-09 14:12:00]
  • 评测
  • 测评结果:WA
  • 用时:3ms
  • 内存:9932kb
  • [2023-09-09 14:11:58]
  • 提交

answer

//#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define N 100005
#define mod 998244353
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define ld long double
#define ls (rt<<1)
#define rs ((rt<<1)|1)
#define SZ(x) (int)(x.size())
#define debug cout<<endl<<"ff"<<endl
#define YES cout<<"YES"<<endl
#define NO cout<<"NO"<<endl
#define fi first
#define se second
#define INF 1e9
#define pq priority_queue
#define rep(x,a,b) for(int x=a;x<=b;x++)
int qpow(int a,int b){
	int res=1;
	for(;b;b>>=1){
		if(b&1) res=res*a%mod;
		a=a*a%mod;
	}
	return res;
}
/*int fac[N],ifac[N];
int C(int n,int m){
	if(m>n||m<0||n<0) return 0;
	return fac[n]*ifac[n-m]%mod*ifac[m]%mod;
}
void init(){
	fac[0]=1;
	for(int i=1;i<N;i++) fac[i]=fac[i-1]*i%mod;
	ifac[N-1]=qpow(fac[N-1],mod-2);
	for(int i=N-2;i>=0;i--) ifac[i]=ifac[i+1]*(i+1)%mod;
}*/
/*struct node{
	int nxt,to;
}e[N<<1];
int cnt=1,head[N];
inline void add(int x,int y){
	e[++cnt].nxt=head[x];
	head[x]=cnt;
	e[cnt].to=y;
}*/
inline int lowbit(int x){return x&(-x);}
inline int read(){
  int x=0,t=1;char ch=getchar();
  while(ch<'0'||ch>'9'){
    if(ch=='-') t=-1;
    ch=getchar();
  }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch-'0');
        ch=getchar();
    }
    return x*t;
}
inline void write(int x){
	if(x<0) putchar('-'),x=-x;
	if(x>=10) write(x/10);
	putchar(x%10+'0');
}
int T,n,tim,sx,sy,tx,ty,d[N],pre[N],x[N],y[N],vis[N],p[N],top;
vector<pii>g[N];
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n>>tim;
	cin>>sx>>sy>>tx>>ty;
	for(int i=1;i<=n;i++) cin>>x[i]>>y[i];
	for(int i=1;i<=n;i++){
		g[0].pb(mp(2*i-1,min(abs(x[i]-sx),abs(y[i]-sy))));
		g[2*i].pb(mp(2*n+1,min(abs(x[i]-tx),abs(y[i]-ty))));
	}
	for(int i=1;i<=n;i++) g[2*i-1].pb(mp(2*i,tim));
	for(int i=1;i<=n;i++)
		for(int j=i+1;j<=n;j++){
			g[2*i].pb(mp(2*j-1,0));
			g[2*j].pb(mp(2*i-1,0));
		}
	memset(d,0x3f,sizeof(d));d[0]=0;
	priority_queue<pii,vector<pii>,greater<pii>>q;
	while(!q.empty()) q.pop();q.push(mp(0,0));
	while(!q.empty()){
		int u=q.top().se;q.pop();
		if(vis[u]) continue;
		vis[u]=1;
		for(auto t:g[u]){
			if(d[t.fi]>d[u]+t.se){
				d[t.fi]=d[u]+t.se;
				pre[t.fi]=u;
				q.push(mp(d[t.fi],t.fi));
			}
		}
	} 
	double ans=sqrt((double)(sx-tx)*(sx-tx)+(double)(sy-ty)*(sy-ty));
	if(ans<d[2*n+1]){
		printf("%.9lf\n",ans);
		cout<<1<<endl;
		cout<<0<<" "<<tx<<" "<<ty<<endl;
		return 0; 
	}
	vector<pii>v;v.clear();int now=2*n+1;p[++top]=0;v.pb(mp(tx,ty));
	while(now!=0){
		int u=pre[now];
		if(now==2*n+1){
			int pos=(u+1)/2,v1=abs(x[pos]-tx),v2=abs(y[pos]-ty);
			p[++top]=pos;
			if(v1==min(v1,v2)) v.pb(mp(x[pos],ty));
			else v.pb(mp(tx,y[pos])); 
		}else if(u==0){
			int pos=(now+1)/2,v1=abs(x[pos]-sx),v2=abs(y[pos]-sy);
			p[++top]=0;
			if(v1==min(v1,v2)) v.pb(mp(x[pos],sy));
			else v.pb(mp(sy,y[pos]));
		}else if(now%2==1){
			int p1=(u+1)/2,p2=(now+1)/2;
			p[++top]=p1;
			v.pb(mp(x[p1],y[p2])); 
		}
		now=u;
	}
	cout<<d[2*n+1]<<endl;
	cout<<v.size()<<endl;
	for(int i=v.size()-1;i>=0;i--)	cout<<p[top]<<" "<<v[i].fi<<" "<<v[i].se<<'\n',top--; 
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 3ms
memory: 9932kb

input:

1 2
1 1
5 3
6 2

output:

4
3
0 1 2
1 6 3
0 5 3

result:

ok correct

Test #2:

score: 0
Accepted
time: 1ms
memory: 9816kb

input:

2 1
1 1
6 1
1 3
6 3

output:

2
4
0 1 1
1 1 3
2 6 1
0 6 1

result:

ok correct

Test #3:

score: -100
Wrong Answer
time: 1ms
memory: 8972kb

input:

0 0
1 1
1 1

output:

1
0 1 1
0.000000000

result:

wrong answer claimed 1.0000000000, actual 0.0000000000