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;
}
相关推荐
jie188945758665 分钟前
C++ 中的 const 知识点详解,c++和c语言区别
java·c语言·c++
明月*清风11 分钟前
c++ —— 内存管理
开发语言·c++
WindSearcher31 分钟前
大模型微调相关知识
后端·算法
取酒鱼食--【余九】41 分钟前
rl_sar实现sim2real的整体思路
人工智能·笔记·算法·rl_sar
西北大程序猿1 小时前
单例模式与锁(死锁)
linux·开发语言·c++·单例模式
qq_454175792 小时前
c++学习-this指针
开发语言·c++·学习
Magnum Lehar2 小时前
vulkan游戏引擎test_manager实现
java·算法·游戏引擎
水蓝烟雨3 小时前
[面试精选] 0094. 二叉树的中序遍历
算法·面试精选
超闻逸事3 小时前
【题解】[UTPC2024] C.Card Deck
c++·算法
暴力求解3 小时前
C++类和对象(上)
开发语言·c++·算法