#NOIP 2014#day.2 T1 无限网络发射器选址

来源:互联网 发布:南泥湾种鸦片 知乎 编辑:程序博客网 时间:2024/05/18 03:54

为了方便处理我们把x++,y++预留出一个空白行和空白列

#include<cstdio>#include<iostream>#include<cmath>#include<cstring>#include<algorithm>using namespace std;int d,n;#define maxn 140int a[maxn][maxn];int sum[maxn][maxn];int ans  = 0, tot = 0;int main(){    #define LOC    #ifdef LOC    freopen("wireless.in","r",stdin);    freopen("wireless.out","w",stdout);    #endif    scanf("%d",&d);    scanf("%d",&n);    int x,y;    for(int i=0;i<n;i++)    {        scanf("%d%d",&x,&y);        x++,y++;        if(x>129||y>129)continue;        scanf("%d",&a[x][y]);    }    sum[1][1]=a[1][1];    for(int i=2;i<=129;i++)sum[1][i]=sum[1][i-1]+a[1][i];    for(int j=2;j<=129;j++)sum[j][1]=sum[j-1][1]+a[j][1];    for(int i=2;i<=129;i++)    {        for(int j=2;j<=129;j++)        {            sum[i][j]=sum[i][j-1]+sum[i-1][j]+a[i][j]-sum[i-1][j-1];        }    }        for(int i=1;i<=129;i++)        {            for(int j=1;j<=129;j++)            {                int dx = max(0,i-d-1);                int kx = min(129,i+d);                int dy = max(j-d-1,0);                int ky = min(129,j+d);                int _tot = sum[kx][ky]-sum[dx][ky]-sum[kx][dy]+sum[dx][dy];                if(_tot==tot)ans++;                else if(_tot>tot)                {                    ans = 1;                    tot = _tot;                }            }        }    printf("%d %d",ans,tot);    return 0;}/*对于 100%的数据, 1 ≤ d ≤ 20, 1 ≤ n ≤ 20, 0 ≤ x ≤ 128, 0 ≤ y ≤ 128, 0 < k ≤1,000,000。 输出一行,包含两个整数, 用一个空格隔开,分别表示能覆盖最多公共场所的安装地点方案数,以及能覆盖的最多公共场所的数量。*/
0 0
原创粉丝点击