完全图

二分+求和公式(这个题的精度错了无数次
以五个顶点的完全图为例
删去四个边(共删4个),形成两个连通图-->再删去三个边(共删4+3),形成三个完全图-->再删去两个边(共删4+3+2),形成四个完全图-->再删去一个边(共删4+3+2+1),形成五个完全图。
因此,只要判断区间就可以。
五个顶点的完全图共有5个区间。(使用两分法查找)
每个区间对应的范围可以推导出来:
0:0
1:0+4
2:0+4+(4-1)
3:0+4+(4-1)+(4-2)
4:0+4+(4-1)+(4-2)+(4-1)-->(5-1)*4-4*(3)/2
所以通过上式,可以推导出公式为,化简一下:

#include<iostream>
#include<vector>
#include<string>
#include<algorithm> 
#include<map>
#include<climits> 
using namespace std;
typedef long long ll; 
long double n,m; 
long double check(ll mid){//求和公式 
	return (n-1-mid+n)*mid/2.0;
}
int main(){
	ll t;
	cin>>t;
	while(t--){
		cin>>n>>m;
		ll left=0,right=n-1;
		while(left<=right){
		    ll mid=(left+right)/2;
			if(check(mid)>m){
				right=mid-1;
			}else{
				left=mid+1;
			}
		}
		cout<<left<<endl;	
	}
	return 0;
}


全部评论
棒棒的!😁
点赞 回复
分享
发布于 2020-03-23 15:32

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务