ABC351

C 栈的应用

cpp 复制代码
#include<bits/stdc++.h>

using namespace std;

stack<int>stk;

int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int a;cin>>a;
        while(!stk.empty()&&a==stk.top())
        {
            stk.pop();
            a++;
        }
        stk.push(a);
    }
    cout<<stk.size()<<endl;
    return 0;
}
//每次操作序列最右边的两个球,不难想到可以使用栈来进行维护。为了便于处理,
//每次操作不将数字放入栈后再进行判断,直接拿该球与栈顶元素比较,如果相同就删除栈顶元素,并增加小球大小,
//直到栈空或栈顶元素与当前小球大小不同,然后将小球放入栈中。结束操作后,栈中元素数量即为最后的答案。

D BFS加set

cpp 复制代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <set>
#include<queue>
#define x first
#define y second


using namespace std;

const int N = 1e3+10;
typedef pair<int, int> PII;

char c[N][N];
int n,m,ans=0;
int dp[N][N],vis[N][N];

int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};

queue<PII>Q;
set<PII>V;
set<PII>S;

bool check(int x,int y)
{
    for(int i=0;i<4;i++)
    {
        int a=x+dx[i],b=y+dy[i];
        if(c[a][b]=='#')return 0;
    }
    return 1;
}

void bfs(int x,int y)
{
    V.clear();
    S.clear();
    Q.push({x,y});
    vis[x][y]=1;
    while(!Q.empty())
    {
        auto t=Q.front();
        Q.pop();
        V.insert(t);
        for(int i=0;i<4;i++)
        {
            int a=t.x+dx[i],b=t.y+dy[i];
            if(a>=1&&b>=1&&a<=n&&b<=m&&check(a,b)&&vis[a][b]==0)
            {
                vis[a][b]=1;
                Q.push({a,b});
            }
        }
    }
    for(auto man:V)
    {
        for(int i=0;i<4;i++)
        {
            int a=man.x+dx[i],b=man.y+dy[i];
            if(c[a][b]=='.'&&vis[a][b]==0)
            {
                S.insert({a,b});
            }
        }
    }
    int size=V.size()+S.size();
    ans=max(ans,size);
}

void solve()
{
     cin>>n>>m;
    for(int i=1;i<=n;i++)
       for(int j=1;j<=m;j++)
          cin>>c[i][j];
          
    for(int i=1;i<=n;i++)
       for(int j=1;j<=m;j++)
       {
           if(vis[i][j]==0&&c[i][j]=='.')
           {
               ans=max(ans,1);
               if(check(i,j))
                  bfs(i,j);
           }
       }
       
    cout<<ans<<endl;
}

int main()
{
   solve();
   return 0;
}
相关推荐
C语言小火车5 分钟前
【C++八股文】基础知识篇
c++·tcp/ip·const·智能指针·多线程同步·static关键字·c++内存模型
liulilittle21 分钟前
IP校验和算法:从网络协议到SIMD深度优化
网络·c++·网络协议·tcp/ip·算法·ip·通信
眠りたいです33 分钟前
基于脚手架微服务的视频点播系统-播放控制部分
c++·qt·ui·微服务·云原生·架构·播放器
Want5951 小时前
C/C++圣诞树①
c语言·开发语言·c++
老赵的博客1 小时前
c++ 杂记
开发语言·c++
jimmy.hua1 小时前
[C++刷怪笼]:set/map--优质且易操作的容器
开发语言·c++
tan180°1 小时前
Boost搜索引擎 网络库与前端(4)
linux·网络·c++·搜索引擎
bkspiderx2 小时前
C++经典的数据结构与算法之经典算法思想:贪心算法(Greedy)
数据结构·c++·算法·贪心算法
郝学胜-神的一滴3 小时前
避免使用非const全局变量:C++中的最佳实践 (C++ Core Guidelines)
开发语言·c++·程序人生
中华小当家呐3 小时前
算法之常见八大排序
数据结构·算法·排序算法