HZNUOJ

三台云水

Tags:
Time Limit:  1 s      Memory Limit:   256 MB
Submission:93     AC:32     Score:98.44

Description

三台山景区集浙江山地和江南水乡风貌于一身,它以浴鹄湾景区为核心,东靠杨公堤,西临三台山路,北至乌龟潭景区,南到虎跑路。重新修复后的三台山景区内恢复了先贤堂、黄公望故居、黄篾楼水轩、武状元坊、霁虹桥、三台梦迹等故迹。三台山景区的茶楼,是杭州茶楼的一大特色。飞檐仿古的建筑,亭阁宛然,花木葱茏,与周围的环境十分协调。


此时,你看着湖面想着这么一个问题:

用$n*m$的二维数组来表示湖面,当湖面平静时值为$0$。

湖中有三个振源在时间$t=0$时开始,以固定频率振动(类似正弦曲线,即t=0时振源就为峰值),振幅为$r$。然后波开始传播,每个单位时间传播一个单位距离。

为了简化这个问题,假设波峰和波谷间隔为一个单位距离,平面上任意两点的距离定义为($\vert x_1-x_2 \vert + \vert y_1-y_2 \vert$)。

现在请你计算t时刻湖面的状态。注意:三个振源发出的波会叠加。主要代码已经给出。


#include <stdio.h>
int func(int x,int y,int i,int j,int r,int t);
int main()
{
	int map[25][25];
	int n,m,t;
        int i,j,p;
	for(i=0;i<25;++i)
	{
		for(j=0;j<25;++j)
		{
			map[i][j]=0;
		}
	}
	scanf("%d%d%d",&n,&m,&t);
	int x,y,r;
	for(p=0;p<3;++p)
	{
		scanf("%d %d %d",&x,&y,&r);
		for(i=0;i<n;++i)
		{
			for(j=0;j<m;++j)
			{
				map[i][j]+=func(x-1,y-1,i,j,r,t);	
			}			
		}
	}
	for(i=0;i<n;++i)
	{
		for(j=0;j<m;++j)
		{
			printf("%d",map[i][j]);
			printf("%c",j==m-1?'\n':' ');
		}
	}
}


Input

输入第一行三个整数$n,m$,表示湖面的长和宽,以及时间$t$($0<n,m<20$)($0 \leq t \leq10$)
接下来三行每行有三个数字,分别为振源坐标$x,y$,以及振幅$r$($0<r<100$)($0 \lt x \leq n,0 \lt y \leq m$)。


Output

输出$n$行$m$列的数组,表示湖面的初始状态;
数字间用空格隔开行末无多余空格。

Samples

input
5 5 3 1 1 1 2 2 2 3 3 3
output
-3 6 -6 6 0 6 -6 6 -5 5 -6 6 -5 5 -3 6 -5 5 -3 3 0 5 -3 3 0

Hint

那单振源做例子:n=5,m=6,t=3;x=1,y=2,r=3;
3 -3 3 -3 3 0
-3 3 -3 3 0 0
3 -3 3 0 0 0
0 3 0 0 0 0
0 0 0 0 0 0
$这是一道函数题,如果用C语言提交,只需要提交问题中的func()函数$

Author

JI, CHAOHAN