题目链接:https://codeforces.com/contest/1118/problem/E
这题能想到按照(1,2)(2,1)(1,3)(3,1)的方法来排列就解决了
要注意的是N和K要开long long类型的,因为下面代码中的那句表达式的嘴边部分会超出INT_MAX的值,变成负的。
#include <iostream>
using namespace std;
int main()
{
long long n, k;
int i, j;
int num;
cin >> n >> k;
if (k*( k - 1 ) < n) //!!!!!!K*(K-1)超出INT_MAX
{
cout << "NO" << endl;
}
else
{
num = n;
cout << "yes" << endl;
for (int i = 1; i < k; ++i)
{
for (int j = i + 1; j <= k; ++j)
{
cout << i << " " << j << '\n';
--num;
if (num == 0) return 0;
cout << j << " " << i << '\n';
--num;
if (num == 0) return 0;
}
}
}
return 0;
}