• hdu 4517


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4517

    昨天Tencent的题目,好吧,当时悲剧地TLE了。。。。orz,今天网上搜了一下,基本上都是用dp做的。。。orz。。。

    思路:sum[i][j]表示从1-i,1-j的矩阵中的'*'的个数。。。

    View Code
     1 #include<iostream>
     2 const int N=2004;
     3 using namespace std;
     4 char map[N][N];
     5 int sum[N][N];//sum[i][j]表示从1-i,1-j的矩形中的"*"的个数
     6 
     7 int main(){
     8     int n,m;
     9     while(~scanf("%d%d",&n,&m)){
    10         if(n==0&&m==0)break;
    11         int x,y,count=0;
    12         scanf("%d%d",&x,&y);
    13         memset(sum,0,sizeof(sum));
    14         for(int i=1;i<=n;i++){
    15             scanf("%s",1+map[i]);
    16             count=0;
    17             for(int j=1;j<=m;j++){
    18                 if(map[i][j]=='*')count++;
    19                 sum[i][j]=count+sum[i-1][j];
    20             }
    21         }
    22         count=0;
    23         for(int i=1;i<=n;i++){
    24             for(int j=1;j<=m;j++){
    25                 if(i+x-1<=n&&j+y-1<=m){
    26                     int ans=sum[i+x-1][j+y-1]-sum[i+x-1][j-1]-sum[i-1][j+y-1]+sum[i-1][j-1];//求x*y的面积内的'*'的个数
    27                     if(ans==x*y)count++;
    28                 }
    29                 //一开始没判断x!=y!!!!
    30                 if(i+y-1<=n&&j+x-1<=m&&x!=y){
    31                     int ans=sum[i+y-1][j+x-1]-sum[i+y-1][j-1]-sum[i-1][j+x-1]+sum[i-1][j-1];
    32                     if(ans==x*y)count++;
    33                 }
    34             }
    35         }
    36         printf("%d\n",count);
    37     }
    38     return 0;
    39 }
  • 相关阅读:
    C#微信开发
    3-4:字符串方法
    2-4-1 元组
    2-3-3 列表方法
    2-2-3:序列(字符串)乘法(p32)
    3-3字符串格式化(p47)
    2-2:分片
    2-1:Print date(p28)
    old.2.三次登录机会
    old.2.sum(1-2+3-4+...+99)
  • 原文地址:https://www.cnblogs.com/wally/p/2978148.html
Copyright © 2020-2023  润新知