zoukankan      html  css  js  c++  java
  • BZOJ1218:[HNOI2003]激光炸弹

    1218: [HNOI2003]激光炸弹

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 2375  Solved: 1081
    [Submit][Status][Discuss]

    Description

    一 种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标。现在地图上有n(N<=10000)个目标,用整数Xi,Yi(其值在 [0,5000])表示目标在地图上的位置,每个目标都有一个价值。激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆破范围,即那个边长为R的 正方形的边必须和x,y轴平行。若目标位于爆破正方形的边上,该目标将不会被摧毁。 0

    Input

    输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示

    Output

    输出文件仅有一个正整数,表示一颗炸弹最多能炸掉地图上总价值为多少的目标(结果不会超过32767)。

    Sample Input

    2 1
    0 0 1
    1 1 1

    Sample Output

    1

    HINT

    Source

     1 #include <bits/stdc++.h>
     2 
     3 inline void read(int &x)
     4 {
     5     x = 0;char ch = getchar();
     6     char c = ch;
     7     while(ch > '9' || ch < '0')c = ch, ch = getchar();
     8     while(ch <= '9' && ch >= '0')x = x * 10 + ch - '0', ch = getchar();
     9     if(c == '-')x = -x;
    10 }
    11 inline int min(int a, int b){return a > b ? b : a;}
    12 inline int max(int a, int b){return a > b ? a : b;}
    13 
    14 const int INF = 0x3f3f3f3f; 
    15 const int MAXN = 5000 + 10;
    16 
    17 int q;
    18 int sum[MAXN][MAXN],R;
    19 int tmp1, tmp2;
    20 int n,m;
    21 
    22 inline void put()
    23 {
    24     for(int i = 1;i <= n;++ i)
    25     {
    26         for(int j = 1;j <= m;++ j)
    27             printf("%d", sum[i][j]);
    28         putchar('
    ');
    29     }
    30 }
    31 int main()
    32 {
    33     scanf("%d %d", &q, &R);
    34     for(register int i = 1;i <= q;++ i)
    35     {
    36         scanf("%d %d", &tmp1, &tmp2);
    37         tmp1 ++;tmp2 ++;
    38         scanf("%d", &sum[tmp1][tmp2]);
    39         n = max(n, tmp1);m = max(m, tmp2);
    40     }
    41     for(register int i = 1;i <= 5001;++ i)
    42         for(register int j = 1;j <= 5001;++ j)
    43             sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
    44     int ans = -1;
    45     for(register int i = 5001;i >= R;-- i)
    46         for(register int j = 5001;j >= R;-- j)
    47                 ans = max(ans, sum[i][j] - sum[i - R][j] - sum[i][j - R] + sum[i - R][j - R]);
    48     printf("%d", ans);
    49     return 0;
    50 }
    View Code
  • 相关阅读:
    2019自我剖析
    jzoj4640. 【GDOI2017模拟7.15】妖怪
    jzoj4649. 【NOIP2016提高A组模拟7.17】项链
    jzoj3171. 【GDOI2013模拟4】重心
    jzoj4673. 【NOIP2016提高A组模拟7.20】LCS again
    学习计算几何基础知识小结
    学习第一类斯特林数小记
    jzoj4213. 对你的爱深不见底
    jzoj4212. 【五校联考1day2】我想大声告诉你
    jzoj3085. 图的计数
  • 原文地址:https://www.cnblogs.com/huibixiaoxing/p/7137905.html
Copyright © 2011-2022 走看看