当前位置:编程学习 > C/C++ >>

Hdu 4517 小小明系列故事——游戏的烦恼

第一种解法:

遍历求解。num[i][j]代表i行j列之前一共有多少个'×'。然后再面积夹击求解x*y、y*x是否满足,x==y只需要判断一次。

这种方法提交用C++,不要用G++,否则会超时。


[cpp]
#include <iostream>  
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <math.h>  
#include <algorithm>  
#include <stack>  
#include <queue>  
using namespace std; 
 
int map[2005][2005]; 
int num[2005][2005]; 
 
int main() 

#ifndef ONLINE_JUDGE  
    freopen("in.txt","r",stdin); 
#endif  
    int n,m,x,y; 
    while(scanf(" %d %d",&n,&m)!=EOF) 
    { 
        if(n+m == 0) break; 
        for(int i=0;i<=n;i++) 
        { 
            for(int j=0;j<=m;j++) 
            { 
                num[i][j] = 0; 
            } 
        } 
 
        scanf(" %d %d",&x,&y); 
        getchar(); 
        for(int i=1; i<=n; i++) 
        { 
            for(int j=1; j<=m; j++) 
            { 
                char c; 
                scanf("%c",&c); 
                if(c == '*') 
                { 
                    map[i][j] = 1; 
                } 
                else 
                { 
                    map[i][j] = 0; 
                } 
            } 
            getchar(); 
        } 
        for(int i=1; i<=n; i++) 
        { 
            for(int j=1; j<=m; j++) 
            { 
                if(map[i][j] == 1) 
                { 
                    num[i][j] = num[i-1][j] + num[i][j-1] - num[i-1][j-1] + 1; 
                } 
                else 
                { 
                    num[i][j] = num[i-1][j] + num[i][j-1] - num[i-1][j-1]; 
                } 
            } 
        } 
        int ans = 0; 
        int size = x*y; 
        for(int i=x; i<=n; i++) 
        { 
            for(int j=y; j<=m; j++) 
            { 
                //满足x*y的摆放位置  
                if(num[i][j] - num[i-x][j] - num[i][j-y] + num[i-x][j-y] == size) 
                { 
                    ans++; 
                } 
            } 
        } 
        if(x!=y) 
        { 
            for(int i=y; i<=n; i++) 
            { 
                for(int j=x; j<=m; j++) 
                { 
                    //满足x*y的摆放位置  
                    if(num[i][j] - num[i-y][j] - num[i][j-x] + num[i-y][j-x] == size) 
                    { 
                        ans++; 
                    } 
                } 
            } 
        } 
        printf("%d\n",ans); 
    } 
  &

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,