有n个点,要求连最多的双向边使图中不存在任意三个点直接连接
可以考虑将n个点分为两个集合,分别有a,b个点,则n=a+b,相同集合的点不连接,不同集合的点全连接,则边数c=a*b,根据均值不等式可以知道当n为偶数时a=b=n/2,c最大,当n为奇数时a=n/2,b=n/2+1,c最大。
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e5+5;
const int mod=2015;
const int inf=0x3f3f3f3f;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
if(n&1) printf("%d\n",(n/2)*(n/2+1));
else printf("%d\n",n*n/4);
}
return 0;
}