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;
}
相关推荐
V搜xhliang024613 分钟前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化
汉克老师29 分钟前
GESP2025年3月认证C++五级( 第三部分编程题(2、原根判断))
c++·算法·模运算·gesp5级·gesp五级·原根·分解质因数
winner88811 小时前
从零吃透C++命名空间、std、#include、string、vector
java·开发语言·c++
数据皮皮侠1 小时前
上市公司创新韧性数据(2000-2024)|顶刊同款 EIR 指数
大数据·人工智能·算法·智慧城市·制造
WL_Aurora1 小时前
Python 算法基础篇之链表
python·算法·链表
科研前沿1 小时前
纯视觉无感解算 + 动态数字孪生:室内外无感定位技术全新升级
大数据·人工智能·算法·重构·空间计算
AI进化营-智能译站1 小时前
ROS2 C++开发系列07-高效构建机器人决策逻辑,运算符与控制流实战
开发语言·c++·ai·机器人
winner88811 小时前
C++ 命名空间、虚函数、抽象类、protected 权限全套通俗易懂精讲(附与 Java 对比)
java·开发语言·c++
不会编程的懒洋洋1 小时前
C# P/Invoke 基础
开发语言·c++·笔记·安全·机器学习·c#·p/invoke
代码中介商2 小时前
数据结构开篇:从问题到解决方案
数据结构