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;
}
相关推荐
Sw1zzle20 分钟前
算法入门(六):贪心算法 - 基础入门(Leetcode 121/455/860/376/738)
算法·leetcode·贪心算法
青山木27 分钟前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
不会就选b43 分钟前
算法日常・每日刷题--<归并排序>1
数据结构·算法
危桥带雨1 小时前
排序算法(快排、归并、计数、基数排序)
数据结构·算法·排序算法
啦啦啦啦啦zzzz1 小时前
算法:回溯算法
c++·算法·leetcode
IT探索1 小时前
Linux 查找文件指令总结
linux·算法
Lzg_na1 小时前
订阅发布模块事例
c++
郝学胜-神的一滴2 小时前
[简化版 GAMES 104] 现代游戏引擎 02:拆解现代游戏引擎5+1层级架构,吃透引擎底层核心逻辑
c++·unity·架构·游戏引擎·图形渲染·unreal engine·系统设计
汉克老师2 小时前
2026年CSP-J初赛分数线-----预测
c++·csp-j·小学生·学c++编程