• 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("
    ");
    }
    	return 0;
    }
    
  • 相关阅读:
    华师菜鸟杯2020
    「算法」排序
    生成函数
    多项式乘法逆
    多项式牛顿迭代
    「数学」快速幂
    「算法」贪心
    「组合数学」一:什么是组合数学
    「具体数学」三:整值函数
    「图论」树上问题
  • 原文地址:https://www.cnblogs.com/BruceNoOne/p/3854235.html
Copyright © 2020-2023  润新知