CF413B 水题

题意:有n个人,m个通讯设备,通讯k次。给出人可以通讯的矩阵。当一个人在某台设备通讯时,其他人可以接收,问k次通讯结束后每个人接收了多少次。

思路:开始没看清楚m的范围,如果简单暴力,通讯一次就把接收到的人加一次,这样要n*k的时间,一看就会超时。再一看m的取值范围是【1,10】,所以我可以先不管是谁通讯,只要对某个设备通讯,就统计,最后一次把连接这个设备的人加上统计的值,但是通讯的那个人又不能接收,所以多加了他通讯的次数,只需在统计一下他通讯多少次就可以了。

代码:

#include<stdio.h>
#include<string.h>
const int maxn = 20009;
int map[maxn][14];

int spyke[14];
int per[maxn];
int sum[maxn];
void init()
{
	memset(spyke,0,sizeof(spyke));
	memset(per,0,sizeof(per));
	memset(sum,0,sizeof(sum));
}

int main()
{
int n,m,k,i,j;
while(~scanf("%d%d%d",&n,&m,&k))
{
	init();
	for(i=1;i<=n;i++)
	{
		for(j =1;j<=m;j++)
		{
			scanf("%d",&map[i][j]);
		}
	}
	for(i=0;i<k;i++)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		per[a] ++;
		spyke[b] ++;
	}
	for(i=1;i<=m;i++)
	{
		for(j = 1;j<=n;j++)
		{
			sum[j] +=map[j][i] * spyke[i];
		}
	}
	for(i=1;i<=n;i++)
	{
		sum[i] -=per[i];
	}
	for(i=1;i<=n;i++)
	{
		printf("%d ",sum[i]);
	}
	printf("\n");
}
	return 0;
}

posted on 2014-07-18 20:32  黎昊明  阅读(193)  评论(0编辑  收藏  举报

导航