zoukankan      html  css  js  c++  java
  • 核弹危机

    核弹危机(jdoj1347-vijos1199)

        题目大意:给你n*n的网格图,每一个格点是 ' . ' 或者 ' # ' ,后者表示建筑物。现在你有一个炸弹,可以炸毁m*m的正方形,问最多能炸毁多少个?

        注释:m和n都小于10000

          想法:不会。连读入都读不进来,玩儿啥呢?看一下 discuss 数据很水,开1000就可以读进来。好吧,我对这个世界有了新的看法!!!咳咳,回归正题,我们一样思考——两种方法:1.dp前缀和,时间复杂度O(m*m),可过,极水,所以...在此就不做赘述。2.树状数组,维护想弱弱的战壕一样的东西,所以...这题就切了。注意一点,lowbit不可以是0,不可以是0,不可以是0!!!!!

        最后,附上丑陋的代码......

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 int c[5000][5000];
     5 char s[5000][5000];
     6 int n;
     7 void add(int x,int y)
     8 {
     9     for(int i=x;i<=n;i+=i&-i)
    10     for(int j=y;j<=n;j+=j&-j)
    11         c[i][j]++;
    12 }
    13 int getsum(int x,int y)
    14 {
    15     int s=0;
    16     for(int i=x;i;i-=i&-i)
    17     for(int j=y;j;j-=j&-j)
    18         s+=c[i][j];
    19     return s;
    20 }
    21 int main()
    22 {
    23     int m;
    24     scanf("%d%d",&n,&m);
    25     for(int i=1;i<=n;i++)
    26     {
    27         scanf("%s",s[i]+1);
    28         for(int j=1;j<=n;j++)
    29         {
    30             if(s[i][j]=='#') add(i,j);
    31         }
    32     }
    33     int ans=-1;
    34     int now;
    35     for(int i=m;i<=n;i++)
    36     {
    37         now=0;
    38         for(int j=m;j<=n;j++)
    39         {
    40             now=getsum(i,j)-getsum(i-m,j)-getsum(i,j-m)+getsum(i-m,j-m);
    41             ans=max(now,ans);
    42         }
    43     }
    44     printf("%d
    ",ans);
    45     return 0;
    46 }

          小结:错误

            真开心,1A

        转载请注明:http://www.cnblogs.com/ShuraK/p/7857811.html——请经博主允许

    | 欢迎来原网站坐坐! >原文链接<

  • 相关阅读:
    bat 批处理命令 文件 类型 语法 格式 应用 详解
    CString,int,string,char*之间的转换
    机器名修改
    查看或修改SQL2005实例的端口号
    无法在数据库 'ycmis2' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式。
    return另外一个用法
    tempdb多文件处理
    Oracle数据库表分区
    JavaWeb项目过滤器的编写
    略观SSH的优缺点
  • 原文地址:https://www.cnblogs.com/ShuraK/p/7857811.html
Copyright © 2011-2022 走看看