首页 > 其他分享 >数据量大的数组要开到全局变量 否则会造成运行超时

数据量大的数组要开到全局变量 否则会造成运行超时

时间:2022-10-03 10:45:28浏览次数:87  
标签:typedef 超时 const str int LL 数据量 return 全局变量

1097. 池塘计数


农夫约翰有一片 <span id="MathJax-Span-2" class="mrow"><span id="MathJax-Span-3" class="mi">N<span id="MathJax-Span-4" class="mo">&lowast;<span id="MathJax-Span-5" class="mi">MN∗M 的矩形土地。

最近,由于降雨的原因,部分土地被水淹没了。

现在用一个字符矩阵来表示他的土地。

每个单元格内,如果包含雨水,则用”W”表示,如果不含雨水,则用”.”表示。

现在,约翰想知道他的土地中形成了多少片池塘。

每组相连的积水单元格集合可以看作是一片池塘。

每个单元格视为与其上、下、左、右、左上、右上、左下、右下八个邻近单元格相连。

请你输出共有多少片池塘,即矩阵中共有多少片相连的”W”块。

输入格式

第一行包含两个整数 NN 和 MM。

接下来 NN 行,每行包含 MM 个字符,字符为”W”或”.”,用以表示矩形土地的积水状况,字符之间没有空格。

输出格式

输出一个整数,表示池塘数目。

数据范围

1≤N,M≤10001≤N,M≤1000

输入样例:

10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

输出样例:

3
定义在局部变量:
运行超时:
#include <bits/stdc++.h>
#define fi first
#define se second 
using namespace std;
const int N=1010;
const int M=N*N;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
typedef long long LL;
typedef pair<int,int>PII;
typedef pair<LL,LL>PLL;
LL gcd(LL a,LL b) {return b?gcd(b,a%b):a;}
LL lcm(LL a,LL b) {return a/gcd(a,b)*b;}
LL lowbit(LL a){return a&-a;}
//8个方向的和4个方向的是不同的计算方法


//typedf属于类型替代
//define 属于名字替代 
int n,m,cnt;
char str[N][N];
 

void BFS(int i,int j)
{//宽搜了
   PII q[M];
    int l=0,r=-1;
    q[++r]={i,j};
    str[i][j]='*';
    while(l<=r)//小于等于
    {
        PII x=q[l++];
        for(int i=x.fi-1;i<=x.fi+1;i++)
            for(int j=x.se-1;j<=x.se+1;j++)
                if(i<=n&&i>0&&j<=m&&j>0&&str[i][j]=='W')
                    q[++r]={i,j},str[i][j]='*';
    }
}
int main()
{
   scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)scanf("%s",str[i]+1);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(str[i][j]=='W')
            BFS(i,j),cnt++;
        }
    }
   
   cout<<cnt;
    return 0;
}

  


定义在全局变量:
答案正确:
#include <bits/stdc++.h>
#define fi first
#define se second 
using namespace std;
const int N=1010;
const int M=N*N;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
typedef long long LL;
typedef pair<int,int>PII;
typedef pair<LL,LL>PLL;
LL gcd(LL a,LL b) {return b?gcd(b,a%b):a;}
LL lcm(LL a,LL b) {return a/gcd(a,b)*b;}
LL lowbit(LL a){return a&-a;}
//8个方向的和4个方向的是不同的计算方法


//typedf属于类型替代
//define 属于名字替代 
int n,m,cnt;
char str[N][N];
 PII q[M];

void BFS(int i,int j)
{//宽搜了
   
    int l=0,r=-1;
    q[++r]={i,j};
    str[i][j]='*';
    while(l<=r)//小于等于
    {
        PII x=q[l++];
        for(int i=x.fi-1;i<=x.fi+1;i++)
            for(int j=x.se-1;j<=x.se+1;j++)
                if(i<=n&&i>0&&j<=m&&j>0&&str[i][j]=='W')
                    q[++r]={i,j},str[i][j]='*';
    }
}
int main()
{
   scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)scanf("%s",str[i]+1);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(str[i][j]=='W')
            BFS(i,j),cnt++;
        }
    }
   
   cout<<cnt;
    return 0;
}

  

 

标签:typedef,超时,const,str,int,LL,数据量,return,全局变量
From: https://www.cnblogs.com/qianchangxiaozhushenyi/p/16750132.html

相关文章