列表

详情


NC231907. XCPC

描述

在遥远的 XCPC 国,那里的人喜欢在辽阔的土地上画 'X' 形。同时如下图所示,'X' 形的大小也可能不同。





具体来讲,XCPC 国的领土可以被视为一个 的矩形,一共有 q 位 XCPC 居民,第 i 个居民在以 (x_i, y_i) 为中心的区域画一个大小为 s_i 的 'X' 形。若该 'X' 形溢出 XCPC 领土,则溢出的部分被忽略。

而你作为一名优秀的 XCPCer,想要知道每个位置被 'X' 形覆盖了几次。

输入描述

共有  组测试数据。

对于每组测试数据,有 行。

第一行输入三个整数

接下来 q 行,每行三个整数

保证

输出描述

对于每组测试数据,输出 n 行,每行 m 个整数,表示每个位置被 'X' 形覆盖的次数。

示例1

输入:

2
4 4 1
3 3 1
7 8 2
4 4 3
1 1 2

输出:

0 0 0 0
0 1 0 1
0 0 1 0
0 1 0 1
2 0 0 0 0 0 1 0
0 2 0 0 0 1 0 0
0 0 2 0 1 0 0 0
0 0 0 1 0 0 0 0
0 0 1 0 1 0 0 0
0 1 0 0 0 1 0 0
1 0 0 0 0 0 1 0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 57ms, 内存消耗: 1824K, 提交时间: 2022-01-10 17:06:37

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	scanf("%d",&t);
	while (t--)
	{
		int n,m,q;
		scanf("%d%d%d",&n,&m,&q);
        int a[n+2][m+2];
        memset(a,0,sizeof a);
		while (q--)
		{
			int x,y,s;
			scanf("%d%d%d",&x,&y,&s);
			a[x][y]++;
			for (int i=1;i<=s;i++)
			{
				if (x+i>n||y+i>m) break;
				a[x+i][y+i]++;
			}
			for (int i=1;i<=s;i++)
			{
				if (x+i>n||y-i<1) break;
				a[x+i][y-i]++;
			}
			for (int i=1;i<=s;i++)
			{
				if (x-i<1||y+i>m) break;
				a[x-i][y+i]++;
			}
			for (int i=1;i<=s;i++)
			{
				if (x-i<1||y-i<1) break;
				a[x-i][y-i]++;
			}
		}
		for (int i=1;i<=n;i++)
		{
			for (int j=1;j<=m;j++)
			{
				printf("%d ",a[i][j]);
			 } 
			 printf("\n");
		}
	}
}

上一题