前言
因为是cf的题 通过率还挺高 所以就以为是规律题 (你不说 我还真给样例推出来了 (进圈了))
结果就WA了
思路
因为对于每任意的三个点 是(任意的) 都不能有环
我们就可以把 这n个点 分成 两组 (组内不连边 || 组与组 之间连边)
所以我们就需要考虑
- 如果组数正好可以平分 那么每组是 n/2 个 边数就是 n/2*n/2
- 如果组数不可以平分 那么应该分成n/2 和 n/2+1 边数就是(n/2)*(n/2+1)
最后直接输出边即可
抽屉原理分析
由 你有n个球 问最少需要多个抽屉 使得有一个抽屉能装两个球
答案是n-1个抽屉
所以就由这个类推
Code:
#include <iostream>
using namespace std;
int n,m;
void solve()
{
cin>>n;
if(n%2 == 1)
m = (n/2)*(n/2+1);
else
m= (n/2)*(n/2);
cout<<m<<endl;
for(int i=1;i<=n/2;i++)
{
for(int j = n/2+1 ; j<=n;j++)
{
cout<<i<<" "<<j<<endl;///每个连一条边
}
}
}
int main()
{
solve();
return 0;
}