int main()
{
//freopen("in.txt", "r", stdin);
int t;
int n, m;
cin >> t;
while (t--)
{
scanf("%d%d", &n, &m);
int mx = n * 4;
if (m & 1) { puts("No");continue; }
if (m > mx) { puts("No");continue; }
if (16 * n > m*m) { puts("No");continue; }
int ju = 2 * n + 2;
puts("Yes");
if (m > ju)//把链拆开
{
int tmp = (m - ju)/2;
int re = n - tmp;
f(i, 1, re)printf("%d %d\n", 1, i);
f(i, 3, 3 + tmp - 1)printf("%d %d\n", i, i);
}
else//把链合并 m=2*(x+y)
{
int tmp = m / 2;
int x = tmp / 2, y = tmp - x;//尽可能让空间大,这样可以放的点多
int cot = n;
f(i, 1, y)
{
cot--;
printf("%d %d\n", 1, i);
}
f(i, 2, x)
{
cot--;
printf("%d %d\n", i, 1);
}
f(i, 2, x)
{
f(j, 2,y)
{
if (!cot)goto hh;
printf("%d %d\n", i, j);
cot--;
}
}
hh:;
}
}
return 0;
}
2020暑期牛客第三场D Points Construction Problem(构造)
最新推荐文章于 2020-09-26 10:07:13 发布