示例1
输入
复制
3
输出
复制
1
1 2 3
题意 :
- 给出一个n个点的完全图,删除一些三元环使得边数 < n
思路 :
- 输出x + y + z = 0(mod n),1 <= x < y < z <= n所有解即可
- 完全图边数 n * (n - 1) / 2,由此可得删除所需的次数,然后枚举几个n得出每次删什么,发现规律就是 i + j + k是n或者2n,那么就有了。
- endl坑
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <unordered_map>
#define x first
#define y second
#define endl '\n'
using namespace std;
typedef long long LL;
struct node
{
int i, j, k;
};
int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n;
cin >> n;
vector<node> ve;
for (int i = 1; i <= n; i ++ )
for (int j = i + 1; j <= n; j ++ )
{
int k = n - i - j;
if (k <= 0) k += n;
if (k > j) ve.push_back({i, j, k});
}
cout << ve.size() << endl;
for (int i = 0; i < ve.size(); i ++ ) cout << ve[i].i << " " << ve[i].j << " " << ve[i].k << endl;
return 0;
}