关于二分写法的疑惑
查看原帖
关于二分写法的疑惑
360780
Qerrj楼主2024/7/11 19:22

如果将二分偏移量写成减的形式。

int l = -110, r = 110, mid, ans;
	while(l <= r) {
		mid = l + r >> 1;
		for(int i = 1; i <= m; i++) 
			if(edge[i].col) edge[i].dis -= mid;
		kruskal();
		if(cnt < k)
			l = mid + 1, ans = res + k * mid; 
		else	
			r = mid - 1;
		for(int i = 1; i <= m; i++) 
			if(edge[i].col) edge[i].dis += mid;
	}

就会35pts

但如果改成加的写法, 就直接AC了, 如下。

int l = -110, r = 110, mid, ans;
	while(l <= r) {
		mid = l + r >> 1;
		for(int i = 1; i <= m; i++) 
			if(edge[i].col) edge[i].dis += mid;
		kruskal();
		if(cnt >= k)
			l = mid + 1, ans = res - k * mid; 
		else	
			r = mid - 1;
		for(int i = 1; i <= m; i++) 
			if(edge[i].col) edge[i].dis -= mid;
	}

AClink

求问原因(

2024/7/11 19:22
加载中...