首页 > 其他 > 详细

CF818F Solution

时间:2021-05-01 12:10:30      阅读:28      评论:0      收藏:0      [点我收藏+]

题目链接

题解

易得,将割边全部放在一边,让剩下的点组完全图即可得出最多边数。二分答案(\(m\)),如果\(\lceil \frac{m}{2} \rceil+\)完全图边数\(\ge m\)即可行。

AC代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q,tmp;
bool check(int m)
{
	tmp=n-(m+1)/2;//完全图中点的个数
	if(tmp<=0) return 0;
	return tmp*(tmp-1)/2+(m+1)/2>=m;
}
signed main()
{
	scanf("%lld",&q);
	while(q--)
	{
		scanf("%lld",&n);
		int l=0,r=1e18,ans=0;
		while(l<=r)
		{
			int mid=(l+r)/2;
			if(check(mid)) {l=mid+1; ans=mid;}
			else r=mid-1;
		}
		printf("%lld\n",ans);
	}
	return 0;
}

CF818F Solution

原文:https://www.cnblogs.com/violetholmes/p/14723902.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!