构造三元组使符合条件、数学证明可行性
题意

n个点形成完全无向图,我们可以选择互相连边的三元组(x, y, z)并删去这个三角形的三条边,问一种选择方案,使去掉这些三角形的三边后整个图中剩余边数小于n

解法分析

先使x < y < z,对于每个(x, y),只能选择一个z。
需要构造一种选取方法,使选取的三角形符合规则且总数目大于\(\frac{n(n-3)}6\)
方法是使 x + y + z = n或者 x + y + z = 2n。
仔细想想,手推一下,这样的构造是没有二元重复的,然后计算一下个数是够的。
计算方法:每次固定x,然后(y, z)的穷举范围随着x增加减少三,范围除二求和就是选择个数。

代码
#include <iostream>
using namespace std;
int main()
{
    int n, ans;
    cin>>n;
    if (n % 3)
    {
        ans = (n * n - 3 * n + 2) / 6;
        cout << ans <<endl;
    }
    else 
    {
        ans = (n * n - 3 * n + 6) / 6;
        cout << ans << endl;
    }
    for (int i = 1; i <= n - 2; ++i)
        for (int j = i + 1; j <= n - 1; ++j)
        {
            int k = n - i - j;
            if (k > j && k <= n)
                cout << i << ' ' << j << ' ' << k << endl;
            k += n;
            if (k > j && k <= n)
                cout << i << ' ' << j << ' ' << k << endl;
        }
    return 0;
}
小结

构造挺难想的,而且证明比较复杂。。。不光是代码力不太够,数学功底也欠缺。