1.13寒假集训

发布时间:2024年01月14日

晚上兼职下班回来才有时间写题,早上根本起不来

A:

解题思路:我第一开始以为只要满足两个red以上的字母数量就行,但是过不了,后面才发现是red字符串,直接三个三个判断就行。

下面是c++代码:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    string s;
    int r = 0,e = 0,d = 0,sum = 0;
    cin >> s;
    for(int i = 0;i < s.length() - 2;i++){
        if(s[i] == 'r' && s[i + 1] == 'e' && s[i + 2] == 'd'){
            sum++;
        }
    }
    if(sum >= 2){
        cout << "Yes";
    }else{
        cout << "No";
    }
    return 0;
}

B:

解题思路:看示例不难发现只要倒着输出数组就好,我最开始还想模拟题意进行两次翻转。

下面是c++代码:

#include<iostream>
using namespace std;
int main()
{
    int n,arr[100][100];
    cin >> n;
    for(int i = 0;i < n;i++){
        for(int j = 0;j < n;j++){
            cin >> arr[i][j];
        }
    }
    for(int i = n - 1;i >= 0;i--){
        for(int j = n - 1;j >= 0;j--){
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}

C:

解题思路:只要判断x这个数左边或者右边是否等于y即可

下面是c++代码:

#include<iostream>
using namespace std;
int main()
{
    int n,x,y,arr[200000];
    cin >> n;
    for(int i = 0;i < n;i++){
        cin >> arr[i];
    }
    cin >> x >> y;
    for(int i = 1;i < n - 1;i++){
        if(arr[i] == x && (arr[i + 1] == y || arr[i - 1] == y)){
            cout << "Yes";
            return 0;
        }
    }
    cout << "No";
    return 0;
}

D:

解题思路:

遍历每一个元素的2 * 2 矩阵就好,注意遍历到n - 1行m - 1列就行,如果遍历到n行或者m列,那么就没有2 * 2矩阵了,在判断每个2 * 2矩阵里y o u 三个字母数量最小值是否为1就行。

下面是c++代码:

#include<iostream>
using namespace std;
char arr[1000][1000];
int main()
{
    int n,m,y = 0,o = 0,u = 0,sum = 0;
    cin >> n >> m;
    for(int i = 0;i < n;i++){
        for(int j = 0;j < m;j++){
            cin >> arr[i][j];
        }
    }
    for(int i = 0;i < n - 1;i++){
        for(int j = 0;j < m - 1 ;j++){
            y = 0,o = 0,u = 0;
            for(int k = i;k < i + 2;k++){
                for(int f = j;f < j + 2;f++){
                    if(arr[k][f] == 'y'){
                        y++;
                    }else if(arr[k][f] == 'o'){
                        o++;
                    }else if(arr[k][f] == 'u'){
                        u++;
                    }
                }
            }
            if(min(min(y,o),u) == 1){
                sum++;
            }
        }
    }
    cout << sum;
    return 0;
}

E:

解题思路:

定义初始长度为1,找到稳定数组就加一,不是就重新赋值为1,将每一次的稳定子数组长度与Max比较找最大值。

下面是c++代码:

#include<iostream>
using namespace std;
int main()
{
    int n,arr[100000],Max = 0,sum = 1;
    cin >> n;
    for(int i = 0;i < n;i++){
        cin >> arr[i];
    }
    for(int i = 1;i < n;i++){
        if(abs(arr[i] - arr[i - 1]) <= 1){
            sum++;
            Max = max(Max,sum);
        } else{
            sum = 1;
        }
    }
    cout << Max;
    return 0;
}

文章来源:https://blog.csdn.net/2301_81718511/article/details/135577664
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。