QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#169909 | #7184. Transport Pluses | ucup-team918# | WA | 3ms | 10600kb | C++20 | 3.2kb | 2023-09-09 14:15:55 | 2023-09-09 14:15:57 |
Judging History
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(sx,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;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 10256kb
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: 10600kb
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: 8240kb
input:
0 0 1 1 1 1
output:
1 0 1 1 0.000000000
result:
wrong answer claimed 1.0000000000, actual 0.0000000000