acwing周赛第150场 题解(不包含第三题)

第一题:

题目描述:

某班有 n 个学生,编号 1∼n。

他们上学期的编程成绩分别为 a1,a2,…,an。

他们本学期的编程成绩分别为 b1,b2,…,bn。

请你判断,是否有学生出现成绩退步的情况。

输入格式

第一行包含整数 n。

第二行包含 n个整数 a1,a2,…,an。

第三行包含 n个整数 b1,b2,…,bn。

输出格式

如果有学生出现成绩退步的情况,则输出 YES,否则,输出 NO

数据范围

前 3 个测试点满足 1≤n≤10。
所有测试点满足 1≤n≤100,1≤ai,bi≤100。

输入样例1:
3
100 80 70
100 90 100
输出样例1:
NO
输入样例2:
3
80 70 90
79 100 100
输出样例2:
YES

AC代码:
#include<iostream>

using namespace std;

const int N = 110;
int a[N],b[N];

int main()
{
    int n;
    cin >> n;
    for(int i=0;i<n;i++){
        cin >> a[i];
    }
    for(int i=0;i<n;i++) cin >> b[i];
    for (int i = 0; i < n; i ++ )
    {
        if(a[i] > b[i]){
            printf("YES");
            return 0;
        }
    }
    printf("NO");
    return 0;
}

第二题:

题目描述:

贝茜盖了一面长方形的墙,该墙恰好由 N×M 个边长为 1 的正方形砖块堆叠而成。

作为一头缺乏生活常识的奶牛,它并不懂得使用水泥等胶凝材料让墙变得坚固。

所以仅仅一场台风,就让该墙变为了残垣断壁。

墙面上的一些砖块还存在(用 B 表示),另一些砖块已经消失了(用 . 表示)。

受重力影响,每个幸存的砖块要么位于地面上(最下面一行),要么位于另一块砖块的顶部,不会出现浮空而立的超自然情况。

给定墙面的现状,请你分析当前墙面中一共包含多少个由砖块构成的连通块。

每个砖块视为与其上、下、左、右四个邻近砖块相连。

输入格式

第一行包含两个整数 N,M。

接下来 N 行,包含一个 N×M 的由 B 和 . 构成的字符矩阵,表示整面墙体的当前状况。

输入保证至少存在一个砖块。

输出格式

一个整数,表示当前墙面中包含的由砖块构成的连通块的数量。

数据范围

前 3个测试点满足 1≤N,M≤10。
所有测试点满足 1≤N,M≤100。

输入样例1:
3 7
.......
.......
.BB.B..
输出样例1:
2
输入样例2:
4 5
..B..
..B..
B.B.B
BBB.B
输出样例2:
2
输入样例3:
4 6
..B...
B.B.BB
BBB.BB
BBBBBB
输出样例3:
1

AC代码: 

此题与本人之前发过的一个海战的题类似

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 110;
char g[N][N];
int dx[4] = {-1,0,1,0},dy[4] = {0,1,0,-1};
int n,m;

void dfs(int x,int y)
{
    g[x][y] = '.';
    for(int i=0;i<4;i++)
    {
        int a = x + dx[i],b = y + dy[i];
        if(a >= 0 && a < n && b >= 0 && b < m && g[a][b] == 'B')
        {
            dfs(a,b);
        }
    }
    return;
}

int main()
{
    cin.tie(0)->ios::sync_with_stdio(false);
    int ans=0;
    cin >> n >> m;
    for(int i=0;i<n;i++)
    {
        for(int j = 0 ;j < m ; j++)
        {
            cin >> g[i][j];
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(g[i][j] == 'B')
            {
                ans++;
                dfs(i,j);
            }
        }
    }
    cout << ans << endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值