QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#875201#9678. 网友小 Z 的树JohnAlfnov0 0ms15560kbC++172.6kb2025-01-29 12:42:022025-01-29 12:42:08

Judging History

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

  • [2025-01-29 12:42:08]
  • 评测
  • 测评结果:0
  • 用时:0ms
  • 内存:15560kb
  • [2025-01-29 12:42:02]
  • 提交

answer

#include "diameter.h"
#include<bits/stdc++.h>
using namespace std;
int b[15][15],d[15][15],p[15];
pair<int,int>find_diameter(int subid,int n){
	if(n==1)return make_pair(1,1);
	if(n==2)return make_pair(1,2);
	if(n==3){
		if(in(1,2,3))return make_pair(2,3);
		if(in(2,1,3))return make_pair(1,3);
		return make_pair(1,2);
	}
	if(n==4){
		int he=query(1,2,3),x=1,y=2,z=3;
		for(int i=4;i<=n;++i){
			int A=query(y,z,i),B=query(x,z,i),C=query(x,y,i);
			if(A>=B&&A>=C){
				if(A>he)he=A,x=i;
			}else if(B>=A&&B>=C){
				if(B>he)he=B,y=i;
			}else if(C>he)he=C,z=i;
		}
		he/=2;
		int mn=1e9,w=0;
		for(int i=1;i<=n;++i)if(i!=x&&i!=y&&i!=z){
			int hh=query(i,x,y);
			if(mn>hh)mn=hh,w=i;
		}
		mn/=2;
		int C=he-mn,A=0,B=0;
		if(in(w,x,z))B=he-query(w,x,z)/2,A=he-B-C;
		else A=he-query(w,y,z)/2,B=he-A-C;
		if(A<=B&&A<=C)return make_pair(y,z);
		if(B<=A&&B<=C)return make_pair(x,z);
		return make_pair(x,y);
	}
	int b123=query(1,2,3),b124=query(1,2,4),b125=query(1,2,5);
	int b134=query(1,3,4),b135=query(1,3,5),b145=query(1,4,5);
	int b234=query(2,3,4),b235=query(2,3,5),b245=query(2,4,5);
	int b345=query(3,4,5),he=b123+b124+b125+b134+b135+b145+b234+b235+b245+b345;
	b[1][2]=(b123+b124+b125+b345-he/3)/2;
	b[1][3]=(b123+b134+b135+b245-he/3)/2;
	b[1][4]=(b124+b134+b145+b235-he/3)/2;
	b[1][5]=(b125+b135+b145+b234-he/3)/2;
	b[2][3]=(b123+b234+b235+b145-he/3)/2;
	b[2][4]=(b124+b234+b245+b135-he/3)/2;
	b[2][5]=(b125+b235+b245+b134-he/3)/2;
	b[3][4]=(b134+b234+b345+b125-he/3)/2;
	b[3][5]=(b135+b235+b345+b124-he/3)/2;
	b[4][5]=(b145+b245+b345+b123-he/3)/2;
	int mx=-1,x=0,y=0,z=0;
	for(int i=1;i<5;++i)for(int j=i+1;j<=5;++j){
		if(b[i][j]>mx)mx=b[i][j],x=i,y=j;
	}
	mx=-1;
	for(int i=1;i<=5;++i)if(i!=x&&i!=y){
		int d1=(x<i?b[x][i]:b[i][x]),d2=(y<i?b[y][i]:b[i][y]);
		if(d1+d2>mx)mx=d1+d2,z=i;
	}
	if(x>y)swap(x,y);
	if(x>z)swap(x,z);
	if(y>z)swap(y,z);
	int dxy=b[x][y],dxz=b[x][z],dyz=b[y][z];
	for(int i=6;i<=n;++i){
		int qxy=query(x,y,i),qxz=query(x,z,i),qyz=query(y,z,i);
		int he=(qxy-dxy+qxz-dxz+qyz-dyz)/2;
		d[0][1]=dxy,d[0][2]=dxz,d[1][2]=dyz;
		d[0][3]=he-qyz+dyz,d[1][3]=he-qxz+dxz,d[2][3]=he-qxy+dxy;
		p[0]=x,p[1]=y,p[2]=z,p[3]=i;
		int mx=-1;x=-1,y=-1,z=-1;
		for(int j=0;j<4;++j)for(int k=j+1;k<4;++k){
			if(mx<d[j][k])mx=d[j][k],x=j,y=k;
		}
		mx=-1;
		for(int j=0;j<4;++j)if(j!=x&&j!=y){
			int di=d[min(j,x)][max(j,x)]+d[min(j,y)][max(j,y)];
			if(di>mx)mx=di,z=j;
		}
		dxy=d[x][y],dxz=d[x][z],dyz=d[y][z];
		x=p[x],y=p[y],z=p[z];
	}
	int mn=max(max(dxy,dxz),dyz);
	if(dxy==mn)return make_pair(x,y);
	if(dxz==mn)return make_pair(x,z);
	return make_pair(y,z);
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 15560kb

input:

1 100
25
1 3
2 18
3 8
4 18
5 14
6 22
7 18
8 10
9 11
10 12
11 25
12 16
13 11
14 17
15 17
16 25
17 2
18 20
19 18
20 12
21 1
22 17
23 14
24 1
50
1 37
2 27
3 10
4 25
5 16
6 17
7 10
8 36
9 16
10 6
11 48
12 2
13 28
14 30
15 10
16 44
17 31
18 1
19 6
20 7
21 30
22 42
23 45
24 23
25 27
26 39
27 45
28 48
29 4...

output:

WA

result:

wrong answer Wrong Answer

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Skipped

Dependency #3:

0%

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Skipped

Dependency #5:

0%

Subtask #7:

score: 0
Skipped

Dependency #6:

0%

Subtask #8:

score: 0
Skipped

Dependency #7:

0%

Subtask #9:

score: 0
Skipped

Dependency #8:

0%

Subtask #10:

score: 0
Skipped

Dependency #9:

0%

Subtask #11:

score: 0
Skipped

Dependency #1:

0%