【解析】
一开始以为八皇后,结果。。。
题意:给出棋盘n*n和q对变化,每对坐标为i = 0,1……k-1.
问会造成多少次碰撞(横竖、对角线都算碰撞)
#include <bits/stdc++.h>
using namespace std;
int r[30010], c[30000], zhu[60010], fu[60010];
int main()
{
int n, q, k, x, y, s, t;
while (~scanf("%d", &n) && n)
{
scanf("%d", &q);
while (q--)
{
scanf("%d%d%d%d%d", &k, &x, &y, &s, &t);
for (int i = 0; i < k; i++)
{
int tempx = x + i * s;
int tempy = y + i * t;
r[tempx]++;
c[tempy]++;
zhu[tempx + tempy]++;
fu[tempx - tempy + n]++;
}
}
int bo = n, ans = 0;
for (int i = 1; i <= bo; i++)
{
if (r[i] > 1)ans += r[i] - 1;
if (c[i] > 1)ans += c[i] - 1;
r[i] = c[i] = 0;//为下组数据还原
}
bo = 2 * n;
for (int i = 1; i <= bo; i++)
{
if (zhu[i] > 1)ans += zhu[i] - 1;
if (fu[i] > 1)ans += fu[i] - 1;
zhu[i] = fu[i] = 0;
}
printf("%d\n", ans);
}
return 0;
}